From 3f8765a581b5f8d9e1f105b8a0771998e304c03b Mon Sep 17 00:00:00 2001 From: "kai.t@apactech.io" Date: Wed, 1 Jul 2026 07:22:08 +0000 Subject: [PATCH] Migrate to Laravel app + unified services; add email conversion - Move docling/markitdown services under services/ alongside new unlimited-ocr and vision services - Add Laravel app for email-to-markdown conversion and OCR frontend - Add email export tooling and example emails/output - Update docker-compose, Caddyfile, and frontend assets Co-Authored-By: Claude Opus 4.8 (1M context) --- .vscode/settings.json | 3 + db/init_unlimited_ocr.sql | 11 + docker-compose.yml | 104 +- .../app/services/DoclingService.py | 343 - emails/input/.gitignore | 3 + emails/output/.gitignore | 3 + example/1.eml | 2095 +++ example/1.md | 10546 ++++++++++++++++ example/1_extraction.md | 97 + example/1_shipment_analysis.md | 357 + ...and Kept Serial Numbers - Google Gemini.md | 285 + example/image.png | Bin 0 -> 377978 bytes export_mails.py | 411 + frontend/Caddyfile | 4 + frontend/email-convert.html | 279 + frontend/index.html | 1259 +- frontend/layout.js | 33 + frontend/style.css | 63 + laravel-app/.editorconfig | 18 + laravel-app/.env.example | 65 + laravel-app/.gitattributes | 11 + laravel-app/.gitignore | 27 + laravel-app/.npmrc | 2 + laravel-app/README.md | 58 + .../Http/Controllers/ApiProxyController.php | 49 + .../Http/Controllers/BatchJobController.php | 125 + .../app/Http/Controllers/Controller.php | 8 + .../app/Http/Controllers/PageController.php | 44 + laravel-app/app/Models/User.php | 32 + .../app/Providers/AppServiceProvider.php | 24 + laravel-app/artisan | 18 + laravel-app/bootstrap/app.php | 21 + laravel-app/bootstrap/cache/.gitignore | 2 + laravel-app/bootstrap/providers.php | 7 + laravel-app/composer.json | 87 + laravel-app/composer.lock | 8537 +++++++++++++ laravel-app/config/app.php | 126 + laravel-app/config/auth.php | 117 + laravel-app/config/cache.php | 136 + laravel-app/config/database.php | 224 + laravel-app/config/filesystems.php | 80 + laravel-app/config/logging.php | 132 + laravel-app/config/mail.php | 118 + laravel-app/config/queue.php | 129 + laravel-app/config/route-attributes.php | 46 + laravel-app/config/services.php | 38 + laravel-app/config/session.php | 233 + laravel-app/database/.gitignore | 1 + .../database/factories/UserFactory.php | 45 + .../0001_01_01_000000_create_users_table.php | 49 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 59 + .../database/seeders/DatabaseSeeder.php | 25 + laravel-app/package-lock.json | 1515 +++ laravel-app/package.json | 16 + laravel-app/phpunit.xml | 36 + laravel-app/public/.htaccess | 25 + laravel-app/public/favicon.ico | 0 laravel-app/public/index.php | 20 + laravel-app/public/robots.txt | 2 + laravel-app/resources/css/app.css | 9 + laravel-app/resources/js/app.js | 1 + .../resources/views/email_convert.blade.php | 1314 ++ laravel-app/resources/views/index.blade.php | 427 + .../resources/views/layouts/app.blade.php | 102 + .../views/partials/pane-body.blade.php | 11 + .../views/partials/pane-tabs.blade.php | 11 + laravel-app/routes/console.php | 8 + laravel-app/routes/web.php | 4 + laravel-app/storage/app/.gitignore | 4 + laravel-app/storage/app/private/.gitignore | 2 + laravel-app/storage/app/public/.gitignore | 2 + laravel-app/storage/framework/.gitignore | 9 + .../storage/framework/cache/.gitignore | 3 + .../storage/framework/cache/data/.gitignore | 2 + .../storage/framework/sessions/.gitignore | 2 + .../storage/framework/testing/.gitignore | 2 + .../storage/framework/views/.gitignore | 2 + laravel-app/storage/logs/.gitignore | 2 + laravel-app/tests/Feature/ExampleTest.php | 19 + laravel-app/tests/TestCase.php | 10 + laravel-app/tests/Unit/ExampleTest.php | 16 + laravel-app/vite.config.js | 24 + .../app/services/MarkitdownService.py | 219 - .../docling-service}/.dockerignore | 0 .../docling-service}/Dockerfile | 0 services/docling-service/app/config.py | 11 + .../app/controllers/ConvertController.py | 48 +- .../docling-service}/app/database.py | 0 .../app/models/ConvertModel.py | 0 .../app/services/DoclingService.py | 632 + .../docling-service}/main.py | 0 .../docling-service}/requirements.txt | 1 + .../markitdown-service}/.dockerignore | 0 .../markitdown-service}/Dockerfile | 0 services/markitdown-service/app/config.py | 11 + .../app/controllers/ConvertController.py | 82 +- .../markitdown-service}/app/database.py | 0 .../app/models/ConvertModel.py | 0 .../app/services/MarkitdownService.py | 370 + .../markitdown-service}/main.py | 0 .../markitdown-service}/requirements.txt | 0 services/unlimited-ocr-service/.dockerignore | 5 + services/unlimited-ocr-service/Dockerfile | 20 + .../app/controllers/ConvertController.py | 114 + .../unlimited-ocr-service/app/database.py | 18 + .../app/models/ConvertModel.py | 50 + .../app/services/UnlimitedOcrService.py | 178 + services/unlimited-ocr-service/main.py | 29 + .../unlimited-ocr-service/requirements.txt | 8 + services/vision-service/Dockerfile | 21 + services/vision-service/app/config.py | 20 + .../app/controllers/VisionController.py | 38 + .../app/services/VisionService.py | 88 + services/vision-service/main.py | 14 + services/vision-service/requirements.txt | 5 + 116 files changed, 30757 insertions(+), 1449 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 db/init_unlimited_ocr.sql delete mode 100644 docling-service/app/services/DoclingService.py create mode 100644 emails/input/.gitignore create mode 100644 emails/output/.gitignore create mode 100644 example/1.eml create mode 100644 example/1.md create mode 100644 example/1_extraction.md create mode 100644 example/1_shipment_analysis.md create mode 100644 example/Shipped and Kept Serial Numbers - Google Gemini.md create mode 100644 example/image.png create mode 100644 export_mails.py create mode 100644 frontend/email-convert.html create mode 100644 frontend/layout.js create mode 100644 frontend/style.css create mode 100644 laravel-app/.editorconfig create mode 100644 laravel-app/.env.example create mode 100644 laravel-app/.gitattributes create mode 100644 laravel-app/.gitignore create mode 100644 laravel-app/.npmrc create mode 100644 laravel-app/README.md create mode 100644 laravel-app/app/Http/Controllers/ApiProxyController.php create mode 100644 laravel-app/app/Http/Controllers/BatchJobController.php create mode 100644 laravel-app/app/Http/Controllers/Controller.php create mode 100644 laravel-app/app/Http/Controllers/PageController.php create mode 100644 laravel-app/app/Models/User.php create mode 100644 laravel-app/app/Providers/AppServiceProvider.php create mode 100755 laravel-app/artisan create mode 100644 laravel-app/bootstrap/app.php create mode 100644 laravel-app/bootstrap/cache/.gitignore create mode 100644 laravel-app/bootstrap/providers.php create mode 100644 laravel-app/composer.json create mode 100644 laravel-app/composer.lock create mode 100644 laravel-app/config/app.php create mode 100644 laravel-app/config/auth.php create mode 100644 laravel-app/config/cache.php create mode 100644 laravel-app/config/database.php create mode 100644 laravel-app/config/filesystems.php create mode 100644 laravel-app/config/logging.php create mode 100644 laravel-app/config/mail.php create mode 100644 laravel-app/config/queue.php create mode 100644 laravel-app/config/route-attributes.php create mode 100644 laravel-app/config/services.php create mode 100644 laravel-app/config/session.php create mode 100644 laravel-app/database/.gitignore create mode 100644 laravel-app/database/factories/UserFactory.php create mode 100644 laravel-app/database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 laravel-app/database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 laravel-app/database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 laravel-app/database/seeders/DatabaseSeeder.php create mode 100644 laravel-app/package-lock.json create mode 100644 laravel-app/package.json create mode 100644 laravel-app/phpunit.xml create mode 100644 laravel-app/public/.htaccess create mode 100644 laravel-app/public/favicon.ico create mode 100644 laravel-app/public/index.php create mode 100644 laravel-app/public/robots.txt create mode 100644 laravel-app/resources/css/app.css create mode 100644 laravel-app/resources/js/app.js create mode 100644 laravel-app/resources/views/email_convert.blade.php create mode 100644 laravel-app/resources/views/index.blade.php create mode 100644 laravel-app/resources/views/layouts/app.blade.php create mode 100644 laravel-app/resources/views/partials/pane-body.blade.php create mode 100644 laravel-app/resources/views/partials/pane-tabs.blade.php create mode 100644 laravel-app/routes/console.php create mode 100644 laravel-app/routes/web.php create mode 100644 laravel-app/storage/app/.gitignore create mode 100644 laravel-app/storage/app/private/.gitignore create mode 100644 laravel-app/storage/app/public/.gitignore create mode 100644 laravel-app/storage/framework/.gitignore create mode 100644 laravel-app/storage/framework/cache/.gitignore create mode 100644 laravel-app/storage/framework/cache/data/.gitignore create mode 100644 laravel-app/storage/framework/sessions/.gitignore create mode 100644 laravel-app/storage/framework/testing/.gitignore create mode 100644 laravel-app/storage/framework/views/.gitignore create mode 100644 laravel-app/storage/logs/.gitignore create mode 100644 laravel-app/tests/Feature/ExampleTest.php create mode 100644 laravel-app/tests/TestCase.php create mode 100644 laravel-app/tests/Unit/ExampleTest.php create mode 100644 laravel-app/vite.config.js delete mode 100644 markitdown-service/app/services/MarkitdownService.py rename {docling-service => services/docling-service}/.dockerignore (100%) rename {docling-service => services/docling-service}/Dockerfile (100%) create mode 100644 services/docling-service/app/config.py rename {docling-service => services/docling-service}/app/controllers/ConvertController.py (75%) rename {docling-service => services/docling-service}/app/database.py (100%) rename {docling-service => services/docling-service}/app/models/ConvertModel.py (100%) create mode 100644 services/docling-service/app/services/DoclingService.py rename {docling-service => services/docling-service}/main.py (100%) rename {docling-service => services/docling-service}/requirements.txt (87%) rename {markitdown-service => services/markitdown-service}/.dockerignore (100%) rename {markitdown-service => services/markitdown-service}/Dockerfile (100%) create mode 100644 services/markitdown-service/app/config.py rename {markitdown-service => services/markitdown-service}/app/controllers/ConvertController.py (57%) rename {markitdown-service => services/markitdown-service}/app/database.py (100%) rename {markitdown-service => services/markitdown-service}/app/models/ConvertModel.py (100%) create mode 100644 services/markitdown-service/app/services/MarkitdownService.py rename {markitdown-service => services/markitdown-service}/main.py (100%) rename {markitdown-service => services/markitdown-service}/requirements.txt (100%) create mode 100644 services/unlimited-ocr-service/.dockerignore create mode 100644 services/unlimited-ocr-service/Dockerfile create mode 100644 services/unlimited-ocr-service/app/controllers/ConvertController.py create mode 100644 services/unlimited-ocr-service/app/database.py create mode 100644 services/unlimited-ocr-service/app/models/ConvertModel.py create mode 100644 services/unlimited-ocr-service/app/services/UnlimitedOcrService.py create mode 100644 services/unlimited-ocr-service/main.py create mode 100644 services/unlimited-ocr-service/requirements.txt create mode 100644 services/vision-service/Dockerfile create mode 100644 services/vision-service/app/config.py create mode 100644 services/vision-service/app/controllers/VisionController.py create mode 100644 services/vision-service/app/services/VisionService.py create mode 100644 services/vision-service/main.py create mode 100644 services/vision-service/requirements.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3b66410 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "git.ignoreLimitWarning": true +} \ No newline at end of file diff --git a/db/init_unlimited_ocr.sql b/db/init_unlimited_ocr.sql new file mode 100644 index 0000000..b4c88e8 --- /dev/null +++ b/db/init_unlimited_ocr.sql @@ -0,0 +1,11 @@ +-- unlimited_ocr database tables +CREATE TABLE IF NOT EXISTS conversions ( + id SERIAL PRIMARY KEY, + filename VARCHAR(255) NOT NULL, + file_type VARCHAR(50), + output_format VARCHAR(20) DEFAULT 'markdown', + content TEXT, + page_count INTEGER, + llm_enabled BOOLEAN DEFAULT TRUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); diff --git a/docker-compose.yml b/docker-compose.yml index 9b378b3..f146e0c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,16 @@ # ============================================================ -# AI Markdown Demo — MarkItDown vs Docling +# AI Markdown Demo — MarkItDown vs Docling vs Unlimited-OCR # ============================================================ # Naming convention: - # -# ui :8484 — Comparison UI (nginx) -# api-markitdown:8282 — MarkItDown API (Microsoft) -# api-docling :8383 — Docling API (IBM) -# db-markitdown :5432 — PostgreSQL for markitdown -# db-docling :— — PostgreSQL for docling (internal only) -# db-admin :5050 — Adminer +# ui :8484 — Comparison UI (Laravel) +# api-markitdown :8282 — MarkItDown API (Microsoft) +# api-docling :8383 — Docling API (IBM) +# api-unlimited-ocr :8181 — Unlimited-OCR API (Baidu) +# db-markitdown :5432 — PostgreSQL for markitdown +# db-docling :— — PostgreSQL for docling (internal only) +# db-unlimited-ocr :— — PostgreSQL for unlimited-ocr (internal only) +# db-admin :5050 — Adminer # ============================================================ x-healthcheck-defaults: &healthcheck-defaults @@ -28,44 +30,98 @@ services: # --- UI layer --------------------------------------------------- ui: - image: caddy:alpine + image: shinsenter/laravel:php8.3 <<: *service-defaults ports: - "8484:80" volumes: - - ./frontend/Caddyfile:/etc/caddy/Caddyfile:ro - - ./frontend:/srv:ro + - ./laravel-app:/var/www/html + - .:/workspace:ro + environment: + APP_ENV: production + APP_DEBUG: "false" + LOG_CHANNEL: stderr + depends_on: + db-markitdown: + condition: service_healthy + db-docling: + condition: service_healthy + db-unlimited-ocr: + condition: service_healthy # --- API layer -------------------------------------------------- api-markitdown: build: - context: ./markitdown-service + context: ./services/markitdown-service <<: *service-defaults ports: - "8282:8000" env_file: .env environment: DATABASE_URL: postgresql://${POSTGRES_USER:-admin}:${POSTGRES_PASSWORD:-admin}@db-markitdown:5432/${POSTGRES_DB:-markitdown} - OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-} - OLLAMA_MODEL: ${OLLAMA_MODEL:-llava} + VISION_URL: ${VISION_URL:-http://api-vision:8000} + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - .:/workspace:rw depends_on: db-markitdown: condition: service_healthy + api-vision: + condition: service_started api-docling: build: - context: ./docling-service + context: ./services/docling-service <<: *service-defaults ports: - "8383:8000" env_file: .env environment: DATABASE_URL: postgresql://${POSTGRES_USER:-admin}:${POSTGRES_PASSWORD:-admin}@db-docling:5432/docling - OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-} - OLLAMA_MODEL: ${OLLAMA_MODEL:-llava} + VISION_URL: ${VISION_URL:-http://api-vision:8000} + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - .:/workspace:ro depends_on: db-docling: condition: service_healthy + api-vision: + condition: service_started + + api-unlimited-ocr: + build: + context: ./services/unlimited-ocr-service + <<: *service-defaults + ports: + - "8181:8000" + env_file: .env + environment: + DATABASE_URL: postgresql://${POSTGRES_USER:-admin}:${POSTGRES_PASSWORD:-admin}@db-unlimited-ocr:5432/unlimited_ocr + OCR_BASE_URL: ${OCR_BASE_URL:-} + OCR_API_KEY: ${OCR_API_KEY:-none} + OCR_MODEL: ${OCR_MODEL:-Unlimited-OCR} + OCR_DPI: ${OCR_DPI:-300} + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + db-unlimited-ocr: + condition: service_healthy + + # --- Vision layer (shared OCRFlux, dùng chung cho markitdown + docling) --- + api-vision: + build: + context: ./services/vision-service + <<: *service-defaults + ports: + - "8585:8000" + env_file: .env + environment: + LLM_BASE_URL: ${LLM_BASE_URL:-http://host.docker.internal:11436/v1} + LLM_MODEL: ${LLM_MODEL:-ggml-org/Qwen2.5-VL-3B-Instruct-GGUF} + extra_hosts: + - "host.docker.internal:host-gateway" # --- Database layer --------------------------------------------- db-markitdown: @@ -100,6 +156,21 @@ services: <<: *healthcheck-defaults test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-admin} -d docling"] + db-unlimited-ocr: + image: postgres:16-alpine + <<: *service-defaults + env_file: .env + environment: + POSTGRES_DB: unlimited_ocr + POSTGRES_USER: ${POSTGRES_USER:-admin} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin} + volumes: + - db_unlimited_ocr_data:/var/lib/postgresql/data + - ./db/init_unlimited_ocr.sql:/docker-entrypoint-initdb.d/init.sql:ro + healthcheck: + <<: *healthcheck-defaults + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-admin} -d unlimited_ocr"] + # --- Admin layer ------------------------------------------------ db-admin: image: adminer:4.8.1 @@ -122,3 +193,4 @@ networks: volumes: db_markitdown_data: db_docling_data: + db_unlimited_ocr_data: diff --git a/docling-service/app/services/DoclingService.py b/docling-service/app/services/DoclingService.py deleted file mode 100644 index c370c6e..0000000 --- a/docling-service/app/services/DoclingService.py +++ /dev/null @@ -1,343 +0,0 @@ -import os -import re -import json -import tempfile -import logging -from fastapi import UploadFile, HTTPException -from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import select -from docling.document_converter import DocumentConverter, PdfFormatOption, ImageFormatOption -from docling.datamodel.pipeline_options import PdfPipelineOptions, TesseractCliOcrOptions -from docling.datamodel.base_models import InputFormat -from app.models.ConvertModel import Conversion - -logger = logging.getLogger(__name__) - -import openai as _openai - -OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL") or None -OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llava") -CLEANUP_MODEL = os.getenv("CLEANUP_MODEL", "") - -def _build_converter() -> DocumentConverter: - try: - ocr_opts = TesseractCliOcrOptions() - pdf_opts = PdfPipelineOptions(do_ocr=True, ocr_options=ocr_opts) - logger.info("Docling: OCR enabled via Tesseract CLI") - except Exception as e: - logger.warning("Docling: Tesseract unavailable (%s) — OCR disabled", e) - pdf_opts = PdfPipelineOptions(do_ocr=False) - - # ImageFormatOption also uses StandardPdfPipeline — pass same pdf_opts - # to prevent docling from falling back to RapidOCR / PP-OCRv6 - return DocumentConverter(format_options={ - InputFormat.PDF: PdfFormatOption(pipeline_options=pdf_opts), - InputFormat.IMAGE: ImageFormatOption(pipeline_options=pdf_opts), - }) - -converter = _build_converter() - -_llm_client = None -LLM_ACTIVE = False - - -def _init_llm(base_url: str | None, model: str) -> bool: - global OLLAMA_BASE_URL, OLLAMA_MODEL, LLM_ACTIVE, _llm_client - if not base_url: - OLLAMA_BASE_URL, OLLAMA_MODEL, LLM_ACTIVE, _llm_client = None, model, False, None - return False - try: - client = _openai.OpenAI(base_url=base_url, api_key="ollama") - OLLAMA_BASE_URL = base_url - OLLAMA_MODEL = model - _llm_client = client - LLM_ACTIVE = True - logger.info("Docling: LLM enabled via %s (model=%s)", base_url, model) - return True - except Exception as e: - logger.warning("Docling: LLM init failed (%s)", e) - LLM_ACTIVE = False - return False - - -_init_llm(OLLAMA_BASE_URL, OLLAMA_MODEL) - - -DEFAULT_ENRICH_PROMPT = ( - "You are a document cleaning assistant. " - "Fix OCR errors, normalise whitespace, and improve the Markdown structure. " - "Return ONLY the raw Markdown text — no code fences, no commentary, no explanation." -) - - -def _llm_enrich(markdown: str, system_prompt: str | None = None) -> str: - """Send extracted markdown to LLM for cleanup. Optionally override the system prompt.""" - if not _llm_client or not markdown.strip(): - return markdown - try: - resp = _llm_client.chat.completions.create( - model=OLLAMA_MODEL, - messages=[ - {"role": "system", "content": system_prompt or DEFAULT_ENRICH_PROMPT}, - {"role": "user", "content": markdown}, - ], - temperature=0, - ) - result = resp.choices[0].message.content or markdown - # llava tends to wrap output in code fences regardless of instructions — strip them - result = re.sub(r"^```(?:markdown)?\s*\n?", "", result.strip()) - result = re.sub(r"\n?```\s*$", "", result.strip()) - return result.strip() or markdown - except Exception as e: - logger.warning("Docling: LLM enrichment failed (%s) — returning raw output", e) - return markdown - - - -async def convert_url( - url: str, - db: AsyncSession, - output_format: str = "markdown", - use_llm: bool = True, - llm_prompt: str | None = None, -) -> "Conversion": - """Fetch a YouTube (or any URL) transcript via yt-dlp, then convert with Docling.""" - try: - import yt_dlp # noqa: PLC0415 - except ImportError: - raise HTTPException(status_code=500, detail="yt-dlp not installed") - - ydl_opts = { - "quiet": True, - "skip_download": True, - "writesubtitles": True, - "writeautomaticsub": True, - "subtitleslangs": ["vi", "en"], - "outtmpl": "%(id)s.%(ext)s", - } - - try: - with yt_dlp.YoutubeDL(ydl_opts) as ydl: - info = ydl.extract_info(url, download=False) - except Exception as e: - raise HTTPException(status_code=422, detail=f"yt-dlp error: {e}") - - title = info.get("title", "YouTube Video") - description = info.get("description", "") or "" - channel = info.get("channel", info.get("uploader", "")) - duration = info.get("duration_string", "") - upload_date = info.get("upload_date", "") - view_count = info.get("view_count") - chapters = info.get("chapters") or [] - - # Build markdown from available metadata - lines = [f"# {title}", ""] - meta_rows = [] - if channel: - meta_rows.append(f"**Kênh:** {channel}") - if duration: - meta_rows.append(f"**Thời lượng:** {duration}") - if upload_date and len(upload_date) == 8: - meta_rows.append(f"**Ngày đăng:** {upload_date[:4]}-{upload_date[4:6]}-{upload_date[6:]}") - if view_count is not None: - meta_rows.append(f"**Lượt xem:** {view_count:,}") - meta_rows.append(f"**URL:** {url}") - lines.extend(meta_rows) - lines.append("") - - # Subtitles/transcript - subtitles = info.get("subtitles") or {} - auto_subtitles = info.get("automatic_captions") or {} - - transcript_text = None - for lang in ("vi", "en"): - tracks = subtitles.get(lang) or auto_subtitles.get(lang) - if tracks: - # Find a json3 or srv3 track to extract plain text - for track in tracks: - if track.get("ext") in ("json3", "srv3", "ttml", "vtt"): - try: - import urllib.request - with urllib.request.urlopen(track["url"], timeout=15) as r: - raw = r.read().decode("utf-8", errors="ignore") - # Strip VTT timestamps for vtt format - if track.get("ext") == "vtt": - cleaned = re.sub(r"\d{2}:\d{2}:\d{2}\.\d+ --> .*", "", raw) - cleaned = re.sub(r"^\d+$", "", cleaned, flags=re.MULTILINE) - cleaned = re.sub(r"<[^>]+>", "", cleaned) - transcript_text = re.sub(r"\n{3,}", "\n\n", cleaned).strip() - else: - transcript_text = raw - break - except Exception: - pass - if transcript_text: - break - - if transcript_text: - lines += ["## Transcript / Phụ đề", "", transcript_text, ""] - elif description: - lines += ["## Mô tả", "", description[:3000], ""] - else: - lines += ["## Ghi chú", "", "_Không có transcript hoặc mô tả._", ""] - - if chapters: - lines += ["## Chapters", ""] - for ch in chapters: - start = ch.get("start_time", 0) - m, s = divmod(int(start), 60) - lines.append(f"- **{m:02d}:{s:02d}** — {ch.get('title', '')}") - lines.append("") - - markdown_text = "\n".join(lines) - - # Write temp file and run through Docling - video_id = info.get("id", "youtube") - with tempfile.NamedTemporaryFile(delete=False, suffix=".md", mode="w", encoding="utf-8") as tmp: - tmp.write(markdown_text) - tmp_path = tmp.name - - try: - result = converter.convert(tmp_path) - doc = result.document - page_count = None - - if output_format == "markdown": - content = doc.export_to_markdown() - elif output_format == "json": - content = json.dumps(doc.export_to_dict(), ensure_ascii=False, indent=2) - elif output_format == "html": - content = doc.export_to_html() - else: - content = markdown_text - - llm_used = False - if _llm_client and use_llm and output_format in ("markdown", "text"): - content = _llm_enrich(content, system_prompt=llm_prompt or None) - llm_used = True - - from app.models.ConvertModel import Conversion - record = Conversion( - filename=f"{video_id}.md", - file_type="youtube", - output_format=output_format, - content=content, - page_count=page_count, - llm_enabled=llm_used, - ) - db.add(record) - await db.commit() - await db.refresh(record) - return record - except Exception as e: - await db.rollback() - raise HTTPException(status_code=500, detail=str(e)) - finally: - os.unlink(tmp_path) - - -# ----------------------------------------------------------------- -ALLOWED_EXTENSIONS = { - "pdf", "docx", "xlsx", "pptx", - "html", "htm", "jpg", "jpeg", "png", - "tiff", "tif", "bmp", "md", "txt", "asciidoc", "adoc" -} -OUTPUT_FORMATS = {"markdown", "json", "html", "text"} - - -def _allowed_file(filename: str) -> bool: - return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS - - -async def convert_file( - file: UploadFile, - db: AsyncSession, - output_format: str = "markdown", - use_llm: bool = True, - llm_prompt: str | None = None, -) -> Conversion: - if not _allowed_file(file.filename): - raise HTTPException( - status_code=422, - detail=f"File type not allowed. Allowed: {', '.join(sorted(ALLOWED_EXTENSIONS))}" - ) - if output_format not in OUTPUT_FORMATS: - raise HTTPException( - status_code=422, - detail=f"Output format not supported. Supported: {', '.join(sorted(OUTPUT_FORMATS))}" - ) - - suffix = os.path.splitext(file.filename)[1] - file_type = suffix.lstrip(".").lower() - - with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: - tmp.write(await file.read()) - tmp_path = tmp.name - - try: - result = converter.convert(tmp_path) - doc = result.document - - page_count = len(doc.pages) if hasattr(doc, "pages") and doc.pages else None - - if output_format == "markdown": - content = doc.export_to_markdown() - elif output_format == "json": - content = json.dumps(doc.export_to_dict(), ensure_ascii=False, indent=2) - elif output_format == "html": - content = doc.export_to_html() - elif output_format == "text": - content = doc.export_to_markdown() - content = re.sub(r"#{1,6}\s?", "", content) - content = re.sub(r"\*\*(.+?)\*\*", r"\1", content) - content = re.sub(r"\*(.+?)\*", r"\1", content) - - # LLM enrichment — only for markdown / text output, and only if requested - llm_used = False - if _llm_client and use_llm and output_format in ("markdown", "text"): - content = _llm_enrich(content, system_prompt=llm_prompt or None) - llm_used = True - - record = Conversion( - filename=file.filename, - file_type=file_type, - output_format=output_format, - content=content, - page_count=page_count, - llm_enabled=llm_used, - ) - db.add(record) - await db.commit() - await db.refresh(record) - return record - - except Exception as e: - await db.rollback() - raise HTTPException(status_code=500, detail=str(e)) - finally: - os.unlink(tmp_path) - - -async def get_conversion(conversion_id: int, db: AsyncSession) -> Conversion: - result = await db.execute(select(Conversion).where(Conversion.id == conversion_id)) - record = result.scalar_one_or_none() - if not record: - raise HTTPException(status_code=404, detail="Conversion not found") - return record - - -async def get_history(db: AsyncSession, limit: int = 20) -> list[Conversion]: - result = await db.execute( - select(Conversion).order_by(Conversion.created_at.desc()).limit(limit) - ) - return result.scalars().all() - - -async def delete_conversion(conversion_id: int, db: AsyncSession) -> dict: - result = await db.execute(select(Conversion).where(Conversion.id == conversion_id)) - record = result.scalar_one_or_none() - if not record: - raise HTTPException(status_code=404, detail="Conversion not found") - await db.delete(record) - await db.commit() - return {"message": f"Conversion {conversion_id} deleted"} diff --git a/emails/input/.gitignore b/emails/input/.gitignore new file mode 100644 index 0000000..70778aa --- /dev/null +++ b/emails/input/.gitignore @@ -0,0 +1,3 @@ +# Ignore tất cả file input (email thô), giữ lại thư mục +* +!.gitignore diff --git a/emails/output/.gitignore b/emails/output/.gitignore new file mode 100644 index 0000000..f461a63 --- /dev/null +++ b/emails/output/.gitignore @@ -0,0 +1,3 @@ +# Ignore tất cả file output (markdown đã convert), giữ lại thư mục +* +!.gitignore diff --git a/example/1.eml b/example/1.eml new file mode 100644 index 0000000..b0307ec --- /dev/null +++ b/example/1.eml @@ -0,0 +1,2095 @@ +Return-Path: +Delivered-To: dan+INBOX@ipsupply.com.au +Received: from lotus.anhtuanvu.com + by lotus.anhtuanvu.com with LMTP + id ijhqNjMwOmq0djsACjinhA + (envelope-from ) + for ; Tue, 23 Jun 2026 17:05:23 +1000 +Return-path: +Envelope-to: dan@ipsupply.com.au +Delivery-date: Tue, 23 Jun 2026 17:05:23 +1000 +Received: from mail-australiasoutheastazon11020090.outbound.protection.outlook.com ([52.101.152.90]:56867 helo=MEUPR01CU001.outbound.protection.outlook.com) + by lotus.anhtuanvu.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 + (Exim 4.99.4) + (envelope-from ) + id 1wbvCC-0000000GLLn-40MT + for dan@ipsupply.com.au; + Tue, 23 Jun 2026 17:05:23 +1000 +ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; + b=ofK46vmLN13ZbrVSX5A73nuWPgIs30fI8lmbKxT+M7upNev5jRdEweQwhJkdJowQi04Ck7VbgKR1reraZZ2TPeGC8rzN8QDKxMykA0ml5NP9Pfq1bophLvKtFQt9bgIcEIFY4FPAIV/t0ZmYdCVQDXgQExTvQTmSg3ntQdduvocm98oQMSdzMUMnX7P9B0LsmbFOLadswSMIfDtXlpvo1WC5vkm682pjQ8bwRuV306cf5HddjPzAhy7D8qFMLBbz8Ac1R2gJp7Tw2gg+zGABk2Xkai3bQiwmjaL0OIOnhmCdHkk7JhjfO+XsoKIkEAAtbzxK12kuzIsQYP5/xemXFQ== +ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; + s=arcselector10001; + h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; + bh=F3toWN7uMADdQJJ3sNMzkEwekPcpmsc4mZzyI0Uc+bI=; + b=VSoDpXKl3MNw/dp+MklZMaHTe/xcGa90tCXAlH3H1GRBCKflK4B1R8zEt36Z1r6vfvwHCgdEanScCno+0oyAdTKxDIxNNu+CMuq4dZqvqxxkMiQnlAXvpRZzWZdiPXN1aGH103fosR0csIWX13lZgKp9azZRuyEGpPCSnksG7/wzft9Ls76fmT1+vO3nK/1VIc7RYo5W6pZa9c+QQRRnRzqoXK0BRuCKTEEyluj7ER7AcoGMeX4aKRX/nQoj+mr60THbHWu9B83GuKtAIBLEZggK9MmgAl4vtPG2P7kr2OoVLt5nWHjM/ioXlpXA31hpHKHaBUHSqlRw+8DoHyP4KQ== +ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass + smtp.mailfrom=agiledataservices.com.au; dmarc=pass action=none + header.from=agiledataservices.com.au; dkim=pass + header.d=agiledataservices.com.au; arc=none +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=agiledataservices.com.au; s=selector1; + h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; + bh=F3toWN7uMADdQJJ3sNMzkEwekPcpmsc4mZzyI0Uc+bI=; + b=qDG+H7znNRmAwcoIcEAjh0DONwRIjtQq5PF804Y1Bvz8HJTA1qYLYZbUJE7J+DjqQ6rxLznAqnq/Xoc+At/WPcDSq0cYoSm225abpgUbluAjt1BJ9deQLY26bcYUKHP12mFnMY1hZtUxycUlVhNKt4O3ICGeSkMHjd6NTPwrsSDd1VG+JvSuS3c3t4u2DLTldNq/vCHlc/1O6Z2IgHMYhnuYv94l1L4i0yoIw92gINWCA8yTU2iCKW9A0MCDxHfzp3jxzJjQHGvWkwLmNVG2bs8haOJXG2kfm4v1hB/SjZfBF+Z84vrXWeJukND64Wl7tR39Vajco/57yyZLajuAvg== +Received: from SYCPR01MB4414.ausprd01.prod.outlook.com (2603:10c6:10:44::18) + by ME5PR01MB10941.ausprd01.prod.outlook.com (2603:10c6:220:262::14) with + Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Tue, 23 Jun + 2026 07:05:02 +0000 +Received: from SYCPR01MB4414.ausprd01.prod.outlook.com + ([fe80::8809:1ab0:c5a4:3d68]) by SYCPR01MB4414.ausprd01.prod.outlook.com + ([fe80::8809:1ab0:c5a4:3d68%3]) with mapi id 15.21.0139.018; Tue, 23 Jun 2026 + 07:05:02 +0000 +From: Chris Dawson +To: Daniel + IP Supply +Subject: RE: SFP's for Uplinx SFP-10/25G-CSR-S +Thread-Topic: SFP's for Uplinx SFP-10/25G-CSR-S +Thread-Index: AQHdAtsg/AfjNYVqzUmMuMdmqdMujLZLt3HA +Date: Tue, 23 Jun 2026 07:05:02 +0000 +Message-ID: + +References: + + + <4629842e-3e8a-33b2-34a1-6bf90f6d2a4d@ipsupply.com.au> +In-Reply-To: <4629842e-3e8a-33b2-34a1-6bf90f6d2a4d@ipsupply.com.au> +Accept-Language: en-GB, en-US +Content-Language: en-US +X-MS-Has-Attach: yes +X-MS-TNEF-Correlator: +authentication-results: dkim=none (message not signed) + header.d=none;dmarc=none action=none header.from=agiledataservices.com.au; +x-ms-publictraffictype: Email +x-ms-traffictypediagnostic: SYCPR01MB4414:EE_|ME5PR01MB10941:EE_ +x-ms-office365-filtering-correlation-id: 35b228d9-e37b-4b76-3f74-08ded0f5bf1c +x-ms-exchange-senderadcheck: 1 +x-ms-exchange-antispam-relay: 0 +x-microsoft-antispam: + BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|6049299003|23010399003|4143699003|56012099006|22082099003|18002099003|19033499003|8096899003|38070700021|4013099003|4053099003|13003099007; +x-microsoft-antispam-message-info: + 7rEW0QIcd3X+GSuh2JBkCJmtTnbJ1DZyKKvnqaoKkaTwukE+e2smhDs+a6copm5JjUEuLY/9ruMFDsTL/V70IjqE8elzQOPeL2zKHZhXqyo7JPHiNCNOuMNhUUZM+YB7e6c//rswVaVt477efopg4WG8RXe0yJ8X96zqpaLTOXNqxc/LX4s6b6RDbSNlXryLNU7XpEPsSj7RG61DY3IKlfKDkMjZl0PkruHd+D2tXncihR/cjQl9GnsbAThNZ43wWnjiredbe8hj2ftPZepRb3jtASL6QqvI62MPNftAzdnmssWKy1X8UWq6qYYTIGwYhxsBlh9qkJXvkN+fd3kuXwVV31lqUyx3b2wFR9DnkkgAeFKlnO+21x9cSBzumkxNy0Y7Zt+016f9RjjFJX59mlG4BHfPwJS49qj+RkVynp3kCsDjxQNDfYtCRm21n7HohtZQFHln/TNnbyqCCGd7o/UYYGpsLaVS41EuK+dUH+SXdG6Nid9DW9B/yOYbfJXHYlZaXod/vQhbIH53TsghFA8xEwmwjKBnaP/MUIkQpX0IxbnKa13tHGLlJQIkNKQ3Gx3swGLkjwPiyGwng8W4BYl41JDqL+vmSXi4cDVk5g7lXuj+5zZ0GtP+QGwbz9L4UQ4ylCMdzKZw55WQ9UKwB19zL/Lj1JQFrXLHae86+LI= +x-forefront-antispam-report: + CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SYCPR01MB4414.ausprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(6049299003)(23010399003)(4143699003)(56012099006)(22082099003)(18002099003)(19033499003)(8096899003)(38070700021)(4013099003)(4053099003)(13003099007);DIR:OUT;SFP:1102; +x-ms-exchange-antispam-messagedata-chunkcount: 2 +x-ms-exchange-antispam-messagedata-0: + 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 + =?utf-8?Q?VOKo1b8Mu7T+rSyI71GQK50tyt/6n8kEEcTcTS4eUsBzA?= +x-ms-exchange-antispam-messagedata-1: + KRC2/bnMUM2KKwmkHua0pyB4sL5NEHARxUAgVE/5bZ3seCM3Vw+2eCLk +Content-Type: multipart/related; + boundary="_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_"; + type="multipart/alternative" +MIME-Version: 1.0 +X-OriginatorOrg: agiledataservices.com.au +X-MS-Exchange-CrossTenant-AuthAs: Internal +X-MS-Exchange-CrossTenant-AuthSource: SYCPR01MB4414.ausprd01.prod.outlook.com +X-MS-Exchange-CrossTenant-Network-Message-Id: 35b228d9-e37b-4b76-3f74-08ded0f5bf1c +X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jun 2026 07:05:02.4701 + (UTC) +X-MS-Exchange-CrossTenant-fromentityheader: Hosted +X-MS-Exchange-CrossTenant-id: c09cb0b9-08ac-44fc-a219-6c5a64c232a4 +X-MS-Exchange-CrossTenant-mailboxtype: HOSTED +X-MS-Exchange-CrossTenant-userprincipalname: qaIJT4yUIbOqiMtRXWaosYm5fmEzphnUQSv1DLvYbUFGKRv1QJYBnLXwDqAb5iFJ1XRIRDabGTVw0YLdDnObERIvkooiTHgnFfxxSMqOZ1INLjh+hyk642Q/OEsI9yUm +X-MS-Exchange-Transport-CrossTenantHeadersStamped: ME5PR01MB10941 +X-Spam-Status: No, score=-1.7 +X-Spam-Score: -16 +X-Spam-Bar: - +X-Ham-Report: Spam detection software, running on the system "lotus.anhtuanvu.com", + has NOT identified this incoming email as spam. The original + message has been attached to this so you can view it or label + similar future email. If you have any questions, see + root\@localhost for details. + Content preview: Thanks Daniel From: Daniel + IP Supply + Sent: Tuesday, 23 June 2026 4:40 PM To: Chris Dawson + Subject: Re: SFP's for Uplinx SFP-10/25G-CSR-S + Content analysis details: (-1.7 points, 5.0 required) + pts rule name description + ---- ---------------------- -------------------------------------------------- + 0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) + [52.101.152.90 listed in wl.mailspike.net] + 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL + was blocked. See + http://wiki.apache.org/spamassassin/DnsBlocklists#DnsBlocklists-dnsbl-block + for more information. + [52.101.152.90 listed in list.dnswl.org] + -0.0 SPF_HELO_PASS SPF: HELO matches SPF record + -0.0 SPF_PASS SPF: sender matches SPF record + 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid + 0.0 KAM_DMARC_STATUS Test Rule for DKIM or SPF Failure with Strict + Alignment + 0.1 DKIM_INVALID DKIM or DK signature exists, but is not valid + -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% + [score: 0.0000] + 0.0 HTML_IMAGE_RATIO_06 BODY: HTML has a low ratio of text to image area + 0.0 HTML_MESSAGE BODY: HTML included in message +X-Spam-Flag: NO + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: multipart/alternative; + boundary="_000_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_" + +--_000_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: base64 + +VGhhbmtzIERhbmllbA0KDQpGcm9tOiBEYW5pZWwgKyBJUCBTdXBwbHkgPGRhbkBpcHN1cHBseS5j +b20uYXU+DQpTZW50OiBUdWVzZGF5LCAyMyBKdW5lIDIwMjYgNDo0MCBQTQ0KVG86IENocmlzIERh +d3NvbiA8Y2hyaXMuZGF3c29uQGFnaWxlZGF0YXNlcnZpY2VzLmNvbS5hdT4NClN1YmplY3Q6IFJl +OiBTRlAncyBmb3IgVXBsaW54IFNGUC0xMC8yNUctQ1NSLVMNCg0KDQpIaSBDaHJpcywNCg0KUmVm +dXJiDQpDaXNjbyBTRlAtMTAvMjVHLUNTUi1TPeKAgkR1YWwgUmF0ZSAxMC8yNUdCQVNFLUNTUiBT +RlAgTW9kdWxl4oCC4oCC4oCC4oCC4oCC4oCC4oCCMiAgJDI4MGVhICsgR1NUDQpDaXNjbyBTRlAt +MTAvMjVHLUxSLVM94oCC4oCCMTAvMjVHQkFTRS1MUiBTRlAyOCBNb2R1bGXigILigILigILigILi +gIIgICAgICAgICAgICAgIOKAguKAguKAguKAguKAgjIgICQ1ODZlYSArIEdTVA0KQXJvdW5kIDgg +ZGF5cyBsZWFkIHRvIHNoaXANCjEgWWVhciB3YXJyYW50eQ0KDQpGWUkgRGlzdGkgcHJpY2luZw0K +W2NpZDppbWFnZTAwMS5wbmdAMDFERDAzMzIuNkNFOTc0MzBdDQpbY2lkOmltYWdlMDAyLnBuZ0Aw +MUREMDMzMi42Q0U5NzQzMF0NCkJlc3QgcmVnYXJkcywNCkRhbmllbA0KDQpJUCBTdXBwbHkgaXMg +dHJhbnNpdGlvbmluZyB0byBQcm9sb2d5IOKAlCBzYW1lIHRlYW0sIHNhbWUgc2VydmljZS4NCkZ1 +dHVyZSBpbnZvaWNlcy9QTyBtYXkgYmUgaXNzdWVkIGJ5IFByb2xvZ3kgUHR5IEx0ZCAoQVUpIG9y +IFByb2xvZ3kgSW5jIChVUyksIGRlcGVuZGluZyBvbiByZWdpb24uDQpbY2lkOmltYWdlMDAzLmpw +Z0AwMUREMDMzMi42Q0U5NzQzMF0NClBoOiArNjEgMiA4MDYxIDY4ODYNCkU6IGRhbkBpcHN1cHBs +eS5jb20uYXU8L2Nkbi1jZ2kvbC9lbWFpbC1wcm90ZWN0aW9uIzUwMzQzMTNlMTAzOTIwMjMyNTIw +MjAzYzI5N2UzMzNmM2Q3ZTMxMjU+DQpNOiArNjEgNCA4ODgxIDY4ODYNClc6IGlwc3VwcGx5LmNv +bS5hdTxodHRwczovL2lwc3VwcGx5LmNvbS5hdT4gLyBwcm9sb2d5Lm5ldDxodHRwczovL3Byb2xv +Z3kubmV0Pg0KQVBBQyBPZmZpY2U6IFVuaXQgOC80QSBCYWNoZWxsIEF2ZSwgTGlkY29tYmUsIE5T +VyAyMTQxDQpVLlMuQSBPZmZpY2U6IDE3MTUwIE5ld2hvcGUgU3QuICMzMDgsIEZvdW50YWluIFZh +bGxleSwgQ0EgOTI3MDgNCkxpa2UgYW5kIFNoYXJlIG91ciBGYWNlYm9vayBwYWdlIGZhY2Vib29r +LmNvbS8gaXBzdXBwbHkuY29tLmF1PGh0dHBzOi8vZmFjZWJvb2suY29tL2lwc3VwcGx5LmNvbS5h +dT4NCltjaWQ6aW1hZ2UwMDQuanBnQDAxREQwMzMyLjZDRTk3NDMwXTxodHRwczovL2lwc3VwcGx5 +LmNvbS5hdS8+DQpPbiAyMy8wNi8yMDI2IDM6MDggcG0sIENocmlzIERhd3NvbiB3cm90ZToNCkhp +IERhbmllbA0KDQpKdXN0IGNoZWNraW5nIHlvdSBnb3QgbXkgcXVvdGUgcmVxdWVzdHMuIFRoaXMg +b25lIGFuZCB0aGUgb25lIGZvciBDODMwMD8NCg0KQ2hyaXMNCg0KRnJvbTogQ2hyaXMgRGF3c29u +DQpTZW50OiBNb25kYXksIDIyIEp1bmUgMjAyNiA1OjAwIFBNDQpUbzogRGFuaWVsICsgSVAgU3Vw +cGx5IDxkYW5AaXBzdXBwbHkuY29tLmF1PjxtYWlsdG86ZGFuQGlwc3VwcGx5LmNvbS5hdT4NClN1 +YmplY3Q6IFNGUCdzIGZvciBVcGxpbngNCg0KQ2FuIHlvdSBxdW90ZSBtZSB0aGVzZSBwbGVhc2Ug +RGFuaWVsDQoNClJlZnVyYiBpcyBmaW5lLg0KDQpDaXNjbyBTRlAtMTAvMjVHLUNTUi1TPeKAgkR1 +YWwgUmF0ZSAxMC8yNUdCQVNFLUNTUiBTRlAgTW9kdWxl4oCC4oCC4oCC4oCC4oCC4oCC4oCCMg0K +Q2lzY28gU0ZQLTEwLzI1Ry1MUi1TPeKAguKAgjEwLzI1R0JBU0UtTFIgU0ZQMjggTW9kdWxl4oCC +4oCC4oCC4oCC4oCCICAgICAgICAgICAgICDigILigILigILigILigIIyDQoNClRoYW5rcw0KQ2hy +aXMNCg0KDQpDaHJpcyBEYXdzb24NCg0KDQpbY2lkOmltYWdlMDA1LnBuZ0AwMUREMDMzMi42Q0U5 +NzQzMF0NCg0KTW9iaWxlICAgICs2MSAoMCk0MTQgNjE2IDgzNQ0KRGlyZWN0ICAgICAxMzAwIDAy +MCAzNDcNCg0KVW5pdCAyLCAyODEgUGFjaWZpYyBIaWdod2F5DQpOb3J0aCBTeWRuZXksIE5TVyAy +MDYwDQoNCmNocmlzLmRhd3NvbkBhZ2lsZWRhdGFzZXJ2aWNlcy5jb20uYXU8bWFpbHRvOmNocmlz +LmRhd3NvbkBhZ2lsZWRhdGFzZXJ2aWNlcy5jb20uYXU+DQphZ2lsZWRhdGFzZXJ2aWNlcy5jb20u +YXU8aHR0cHM6Ly93d3cuYWdpbGVkYXRhc2VydmljZXMuY29tLmF1Lz4NCg0KX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX18NCg0KDQpQUklWQVRFIEFORCBDT05GSURFTlRJQUwNClRoaXMg +ZW1haWwgKGluY2x1ZGluZyBhbnkgYXR0YWNobWVudHMpIG1heSBjb250YWluIHByaXZpbGVnZWQg +b3IgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIHdoaWNoIGlzIGludGVuZGVkIGZvciB0aGUgdXNl +IG9mIHRoZSBhZGRyZXNzZWUgb25seS4gQW55IHVuYXV0aG9yaXNlZCB1c2Ugb3IgZGlzY2xvc3Vy +ZSBpcyBwcm9oaWJpdGVkLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9y +LCBwbGVhc2UgaW5mb3JtIHRoZSBzZW5kZXIgYnkgZW1haWwgaW1tZWRpYXRlbHkgYW5kIGRlbGV0 +ZSB0aGUgZW1haWwgaW1tZWRpYXRlbHkuIFRoYW5rIHlvdSBmb3IgeW91ciBjby1vcGVyYXRpb24u +DQoNCg0KDQo= + +--_000_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: text/html; charset="utf-8" +Content-Transfer-Encoding: base64 + +PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy +bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt +YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj +cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv +VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg +Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv +ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPCEtLVtp +ZiAhbXNvXT48c3R5bGU+dlw6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kb1w6KiB7 +YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0 +I1ZNTCk7fQ0KLnNoYXBlIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQo8L3N0eWxlPjwh +W2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRpb25zICovDQpAZm9udC1mYWNl +DQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOw0KCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYg +MyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIg +MTUgNSAyIDIgMiA0IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6QXB0b3M7fQ0K +LyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5N +c29Ob3JtYWwNCgl7bWFyZ2luOjBjbTsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5 +OiJBcHRvcyIsc2Fucy1zZXJpZjsNCgltc28tbGlnYXR1cmVzOnN0YW5kYXJkY29udGV4dHVhbDsN +Cgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzt9DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5r +DQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjojNDY3ODg2Ow0KCXRleHQtZGVjb3Jh +dGlvbjp1bmRlcmxpbmU7fQ0Kc3Bhbi5jZmVtYWlsDQoJe21zby1zdHlsZS1uYW1lOl9fY2ZfZW1h +aWxfXzt9DQpzcGFuLkVtYWlsU3R5bGUyMQ0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBs +eTsNCglmb250LWZhbWlseToiQXB0b3MiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9 +DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNp +emU6MTAuMHB0Ow0KCW1zby1saWdhdHVyZXM6bm9uZTt9DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7 +c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7DQoJbWFyZ2luOjcyLjBwdCA3Mi4wcHQgNzIuMHB0IDcyLjBw +dDt9DQpkaXYuV29yZFNlY3Rpb24xDQoJe3BhZ2U6V29yZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+ +PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBz +cGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4 +bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIg +ZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0tLT4NCjwvaGVhZD4N +Cjxib2R5IGxhbmc9IkVOLUFVIiBsaW5rPSIjNDY3ODg2IiB2bGluaz0icHVycGxlIiBzdHlsZT0i +d29yZC13cmFwOmJyZWFrLXdvcmQiPg0KPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4NCjxwIGNs +YXNzPSJNc29Ob3JtYWwiPlRoYW5rcyBEYW5pZWw8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN +c29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRl +cjpub25lO2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBjbSAw +Y20gMGNtIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHls +ZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1saWdhdHVy +ZXM6bm9uZTttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+RnJvbTo8L3NwYW4+PC9iPjxzcGFu +IGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z +LXNlcmlmO21zby1saWdhdHVyZXM6bm9uZTttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+IERh +bmllbA0KICsgSVAgU3VwcGx5ICZsdDtkYW5AaXBzdXBwbHkuY29tLmF1Jmd0OyA8YnI+DQo8Yj5T +ZW50OjwvYj4gVHVlc2RheSwgMjMgSnVuZSAyMDI2IDQ6NDAgUE08YnI+DQo8Yj5Ubzo8L2I+IENo +cmlzIERhd3NvbiAmbHQ7Y2hyaXMuZGF3c29uQGFnaWxlZGF0YXNlcnZpY2VzLmNvbS5hdSZndDs8 +YnI+DQo8Yj5TdWJqZWN0OjwvYj4gUmU6IFNGUCdzIGZvciBVcGxpbnggU0ZQLTEwLzI1Ry1DU1It +UzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9y +bWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwPkhpIENocmlzLCA8c3BhbiBzdHlsZT0iZm9u +dC1zaXplOjEyLjBwdDttc28tbGlnYXR1cmVzOm5vbmU7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4t +QVUiPg0KPG86cD48L286cD48L3NwYW4+PC9wPg0KPHA+PGI+UmVmdXJiPC9iPjxicj4NCkNpc2Nv +IFNGUC0xMC8yNUctQ1NSLVM94oCCRHVhbCBSYXRlIDEwLzI1R0JBU0UtQ1NSIFNGUCBNb2R1bGXi +gILigILigILigILigILigILigIIyJm5ic3A7ICQyODBlYSArIEdTVCZuYnNwOw0KPGJyPg0KQ2lz +Y28gU0ZQLTEwLzI1Ry1MUi1TPeKAguKAgjEwLzI1R0JBU0UtTFIgU0ZQMjggTW9kdWxl4oCC4oCC +4oCC4oCC4oCCJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 +Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IOKAguKAguKAguKAguKAgjImbmJzcDsgJDU4 +NmVhICsgR1NUPGJyPg0KQXJvdW5kIDggZGF5cyBsZWFkIHRvIHNoaXAmbmJzcDsgPGJyPg0KMSBZ +ZWFyIHdhcnJhbnR5IDxicj4NCjxicj4NCkZZSSBEaXN0aSBwcmljaW5nIDxicj4NCjxzcGFuIHN0 +eWxlPSJtc28tbGlnYXR1cmVzOm5vbmUiPjxpbWcgd2lkdGg9IjcyOSIgaGVpZ2h0PSIxMjMiIHN0 +eWxlPSJ3aWR0aDo3LjU5NzJpbjtoZWlnaHQ6MS4yODQ3aW4iIGlkPSJQaWN0dXJlX3gwMDIwXzQi +IHNyYz0iY2lkOmltYWdlMDAxLnBuZ0AwMUREMDMzMi42Q0U5NzQzMCI+PC9zcGFuPjxicj4NCjxz +cGFuIHN0eWxlPSJtc28tbGlnYXR1cmVzOm5vbmUiPjxpbWcgd2lkdGg9Ijc4MSIgaGVpZ2h0PSIx +MDYiIHN0eWxlPSJ3aWR0aDo4LjEzODhpbjtoZWlnaHQ6MS4xMDQxaW4iIGlkPSJQaWN0dXJlX3gw +MDIwXzMiIHNyYz0iY2lkOmltYWdlMDAyLnBuZ0AwMUREMDMzMi42Q0U5NzQzMCI+PC9zcGFuPjxv +OnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ +PHNwYW4gc3R5bGU9ImNvbG9yOm5hdnkiPkJlc3QgcmVnYXJkcyw8L3NwYW4+PG86cD48L286cD48 +L3A+DQo8ZGl2Pg0KPGRpdj4NCjxkaXY+DQo8ZGl2Pg0KPGRpdj4NCjxkaXY+DQo8ZGl2Pg0KPGRp +dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjpuYXZ5Ij5EYW5pZWw8 +YnI+DQo8L3NwYW4+PGJyPg0KPGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6 +I0ZGODAwMCI+SVAgU3VwcGx5IGlzIHRyYW5zaXRpb25pbmcgdG8gUHJvbG9neSDigJQgc2FtZSB0 +ZWFtLCBzYW1lIHNlcnZpY2UuDQo8YnI+DQpGdXR1cmUgaW52b2ljZXMvUE8gbWF5IGJlIGlzc3Vl +ZCBieSBQcm9sb2d5IFB0eSBMdGQgKEFVKSBvciBQcm9sb2d5IEluYyAoVVMpLCBkZXBlbmRpbmcg +b24gcmVnaW9uLjwvc3Bhbj48L2k+DQo8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjx0 +YWJsZSBjbGFzcz0iTXNvTm9ybWFsVGFibGUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjMiIGNl +bGxwYWRkaW5nPSIwIj4NCjx0Ym9keT4NCjx0cj4NCjx0ZCB3aWR0aD0iMjAwIiByb3dzcGFuPSIy +IiB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjE1MC4wcHQ7cGFkZGluZzouNzVwdCAuNzVwdCAu +NzVwdCAuNzVwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0i +dGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0eWxlPSJtc28tbGlnYXR1cmVzOm5vbmUiPjxpbWcg +d2lkdGg9IjIwMCIgaGVpZ2h0PSI2MSIgc3R5bGU9IndpZHRoOjIuMDgzM2luO2hlaWdodDouNjM4 +OGluIiBpZD0iUGljdHVyZV94MDAyMF8yIiBzcmM9ImNpZDppbWFnZTAwMy5qcGdAMDFERDAzMzIu +NkNFOTc0MzAiPjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvdGQ+DQo8dGQgc3R5bGU9InBhZGRp +bmc6Ljc1cHQgLjc1cHQgLjc1cHQgLjc1cHQiPg0KPHRhYmxlIGNsYXNzPSJNc29Ob3JtYWxUYWJs +ZSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMyIgY2VsbHBhZGRpbmc9IjAiPg0KPHRib2R5Pg0K +PHRyPg0KPHRkIHN0eWxlPSJwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43NXB0Ij4NCjxwIGNs +YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojRUM3NjAwIj5QaDo8L3NwYW4+IDxz +cGFuIHN0eWxlPSJjb2xvcjpuYXZ5Ij4NCis2MSAyIDgwNjEgNjg4Njwvc3Bhbj48YnI+DQo8c3Bh +biBzdHlsZT0iY29sb3I6I0VDNzYwMCI+RTo8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOm5hdnki +PiZuYnNwOzxhIGhyZWY9Ii9jZG4tY2dpL2wvZW1haWwtcHJvdGVjdGlvbiM1MDM0MzEzZTEwMzky +MDIzMjUyMDIwM2MyOTdlMzMzZjNkN2UzMTI1Ij48c3BhbiBjbGFzcz0iY2ZlbWFpbCI+PHNwYW4g +c3R5bGU9ImNvbG9yOmJsdWUiPmRhbkBpcHN1cHBseS5jb20uYXU8L3NwYW4+PC9zcGFuPjwvYT48 +L3NwYW4+PG86cD48L286cD48L3A+DQo8L3RkPg0KPHRkIHN0eWxlPSJwYWRkaW5nOi43NXB0IC43 +NXB0IC43NXB0IC43NXB0Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xv +cjojRUM3NjAwIj5NOjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOm5hdnkiPg0KKzYxIDQgODg4 +MSA2ODg2PC9zcGFuPjxicj4NCjxzcGFuIHN0eWxlPSJjb2xvcjojRUM3NjAwIj5XOjwvc3Bhbj4g +PHNwYW4gc3R5bGU9ImNvbG9yOm5hdnkiPjxhIGhyZWY9Imh0dHBzOi8vaXBzdXBwbHkuY29tLmF1 +Ij5pcHN1cHBseS5jb20uYXU8L2E+IC8NCjxhIGhyZWY9Imh0dHBzOi8vcHJvbG9neS5uZXQiPnBy +b2xvZ3kubmV0PC9hPiA8L3NwYW4+PG86cD48L286cD48L3A+DQo8L3RkPg0KPC90cj4NCjx0cj4N +Cjx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0icGFkZGluZzouNzVwdCAuNzVwdCAuNzVwdCAuNzVwdCI+ +DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6I0VDNzYwMCI+QVBBQyBP +ZmZpY2U6PC9zcGFuPiA8c3BhbiBzdHlsZT0iY29sb3I6bmF2eSI+DQpVbml0IDgvNEEgQmFjaGVs +bCBBdmUsIExpZGNvbWJlLCBOU1cgMjE0MTwvc3Bhbj48YnI+DQo8c3BhbiBzdHlsZT0iY29sb3I6 +I0VDNzYwMCI+VS5TLkEgT2ZmaWNlOjwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOm5hdnkiPjE3 +MTUwIE5ld2hvcGUgU3QuICMzMDgsIEZvdW50YWluIFZhbGxleSwgQ0EgOTI3MDg8L3NwYW4+PGJy +Pg0KTGlrZSBhbmQgU2hhcmUgb3VyIEZhY2Vib29rIHBhZ2UgPGEgaHJlZj0iaHR0cHM6Ly9mYWNl +Ym9vay5jb20vaXBzdXBwbHkuY29tLmF1Ij5mYWNlYm9vay5jb20vIGlwc3VwcGx5LmNvbS5hdTwv +YT4NCjxvOnA+PC9vOnA+PC9wPg0KPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwv +dGQ+DQo8L3RyPg0KPHRyPg0KPHRkIHN0eWxlPSJwYWRkaW5nOi43NXB0IC43NXB0IC43NXB0IC43 +NXB0Ij48L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjwv +ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGEgaHJlZj0iaHR0cHM6Ly9pcHN1cHBseS5jb20u +YXUvIj48c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZTttc28tbGlnYXR1cmVzOm5vbmU7dGV4dC1kZWNv +cmF0aW9uOm5vbmUiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iNjc1IiBoZWlnaHQ9IjExNyIgc3R5 +bGU9IndpZHRoOjcuMDM0N2luO2hlaWdodDoxLjIxNTJpbiIgaWQ9Il94MDAwMF9pMTAzMiIgc3Jj +PSJjaWQ6aW1hZ2UwMDQuanBnQDAxREQwMzMyLjZDRTk3NDMwIj48L3NwYW4+PC9hPjxzcGFuIHN0 +eWxlPSJmb250LXNpemU6MTIuMHB0Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjwv +ZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRp +dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPk9uIDIzLzA2LzIwMjYgMzowOCBwbSwgQ2hyaXMgRGF3 +c29uIHdyb3RlOjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFy +Z2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi +PkhpIERhbmllbDxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86 +cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5KdXN0IGNoZWNraW5nIHlvdSBnb3Qg +bXkgcXVvdGUgcmVxdWVzdHMuIFRoaXMgb25lIGFuZCB0aGUgb25lIGZvciBDODMwMD88bzpwPjwv +bzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAg +Y2xhc3M9Ik1zb05vcm1hbCI+Q2hyaXM8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt +YWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25l +O2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBjbSAwY20gMGNt +Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9u +dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1saWdhdHVyZXM6bm9u +ZTttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIGxhbmc9 +IkVOLVVTIiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm +O21zby1saWdhdHVyZXM6bm9uZTttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+IENocmlzDQog +RGF3c29uIDxicj4NCjxiPlNlbnQ6PC9iPiBNb25kYXksIDIyIEp1bmUgMjAyNiA1OjAwIFBNPGJy +Pg0KPGI+VG86PC9iPiBEYW5pZWwgKyBJUCBTdXBwbHkgPGEgaHJlZj0ibWFpbHRvOmRhbkBpcHN1 +cHBseS5jb20uYXUiPiZsdDtkYW5AaXBzdXBwbHkuY29tLmF1Jmd0OzwvYT48YnI+DQo8Yj5TdWJq +ZWN0OjwvYj4gU0ZQJ3MgZm9yIFVwbGlueDwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0K +PC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNs +YXNzPSJNc29Ob3JtYWwiPkNhbiB5b3UgcXVvdGUgbWUgdGhlc2UgcGxlYXNlIERhbmllbDxvOnA+ +PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8 +cCBjbGFzcz0iTXNvTm9ybWFsIj5SZWZ1cmIgaXMgZmluZS48bzpwPjwvbzpwPjwvcD4NCjxwIGNs +YXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h +bCI+Q2lzY28gU0ZQLTEwLzI1Ry1DU1ItUz3igIJEdWFsIFJhdGUgMTAvMjVHQkFTRS1DU1IgU0ZQ +IE1vZHVsZeKAguKAguKAguKAguKAguKAguKAgjI8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN +c29Ob3JtYWwiPkNpc2NvIFNGUC0xMC8yNUctTFItUz3igILigIIxMC8yNUdCQVNFLUxSIFNGUDI4 +IE1vZHVsZeKAguKAguKAguKAguKAgiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg +Jm5ic3A7ICZuYnNwOyDigILigILigILigILigIIyPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i +TXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPlRo +YW5rczxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Q2hyaXM8bzpwPjwvbzpw +PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh +c3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8dGFibGUgY2xhc3M9Ik1zb05v +cm1hbFRhYmxlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lk +dGg9IjEyNDgiIHN0eWxlPSJ3aWR0aDo5MzYuMHB0O21hcmdpbi1sZWZ0Oi40cHQ7Ym9yZGVyLWNv +bGxhcHNlOmNvbGxhcHNlIj4NCjx0Ym9keT4NCjx0cj4NCjx0ZCB2YWxpZ249InRvcCIgc3R5bGU9 +InBhZGRpbmc6MGNtIDUuNHB0IDBjbSA1LjRwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48 +c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90 +OyxzYW5zLXNlcmlmO2NvbG9yOmJsYWNrO21zby1saWdhdHVyZXM6bm9uZTttc28tZmFyZWFzdC1s +YW5ndWFnZTpFTi1BVSI+Q2hyaXMgRGF3c29uPC9zcGFuPjwvYj48bzpwPjwvbzpwPjwvcD4NCjxw +IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0O2ZvbnQtZmFt +aWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2s7bXNvLWxpZ2F0dXJl +czpub25lO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj4mbmJzcDs8L3NwYW4+PG86cD48L286 +cD48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0icGFkZGluZzo1LjBwdCA1LjBw +dCA1LjBwdCA1LjBwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1m +YW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1saWdhdHVyZXM6bm9uZTtt +c28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0K +PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJwYWRkaW5nOjBjbSA1 +LjRwdCAwY20gNS40cHQiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt +ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tbGlnYXR1cmVzOm5vbmU7 +bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMTk4IiBo +ZWlnaHQ9IjU1IiBzdHlsZT0id2lkdGg6Mi4wNjI1aW47aGVpZ2h0Oi41NzYzaW4iIGlkPSJQaWN0 +dXJlX3gwMDIwXzEiIHNyYz0iY2lkOmltYWdlMDA1LnBuZ0AwMUREMDMzMi42Q0U5NzQzMCI+PC9z +cGFuPjxvOnA+PC9vOnA+PC9wPg0KPC90ZD4NCjx0ZCB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRp +bmc6NS4wcHQgNS4wcHQgNS4wcHQgNS4wcHQiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g +c3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tbGln +YXR1cmVzOm5vbmU7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPiZuYnNwOzwvc3Bhbj48bzpw +PjwvbzpwPjwvcD4NCjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0i +cGFkZGluZzowY20gNS40cHQgMGNtIDUuNHB0Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu +IHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fu +cy1zZXJpZjtjb2xvcjpibGFjazttc28tbGlnYXR1cmVzOm5vbmU7bXNvLWZhcmVhc3QtbGFuZ3Vh +Z2U6RU4tQVUiPk1vYmlsZSAmbmJzcDsmbmJzcDsgKzYxICgwKTQxNCA2MTYgODM1PC9zcGFuPjxv +OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 +ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOmJs +YWNrO21zby1saWdhdHVyZXM6bm9uZTttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+RGlyZWN0 +ICZuYnNwOyZuYnNwOyZuYnNwOyAxMzAwIDAyMCAzNDc8L3NwYW4+PG86cD48L286cD48L3A+DQo8 +cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy +aSZxdW90OyxzYW5zLXNlcmlmO21zby1saWdhdHVyZXM6bm9uZTttc28tZmFyZWFzdC1sYW5ndWFn +ZTpFTi1BVSI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h +bCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJp +Zjttc28tbGlnYXR1cmVzOm5vbmU7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPlVuaXQgMiwg +MjgxIFBhY2lmaWMgSGlnaHdheTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O +b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJp +YWwmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjazttc28tbGlnYXR1cmVzOm5vbmU7bXNvLWZh +cmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPk5vcnRoIFN5ZG5leSwgTlNXIDIwNjA8L3NwYW4+PG86cD48 +L286cD48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0icGFkZGluZzo1LjBwdCA1 +LjBwdCA1LjBwdCA1LjBwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u +dC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1saWdhdHVyZXM6bm9u +ZTttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1BVSI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9w +Pg0KPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJwYWRkaW5nOjBj +bSA1LjRwdCAwY20gNS40cHQiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv +bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tbGlnYXR1cmVzOm5v +bmU7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPjxhIGhyZWY9Im1haWx0bzpjaHJpcy5kYXdz +b25AYWdpbGVkYXRhc2VydmljZXMuY29tLmF1IiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9 +ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDssc2Fucy1zZXJp +Zjtjb2xvcjpibGFjayI+Y2hyaXMuZGF3c29uQGFnaWxlZGF0YXNlcnZpY2VzLmNvbS5hdTwvc3Bh +bj48L2E+PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g +c3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tbGln +YXR1cmVzOm5vbmU7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPjxhIGhyZWY9Imh0dHBzOi8v +d3d3LmFnaWxlZGF0YXNlcnZpY2VzLmNvbS5hdS8iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHls +ZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNl +cmlmO2NvbG9yOmJsYWNrIj5hZ2lsZWRhdGFzZXJ2aWNlcy5jb20uYXU8L3NwYW4+PC9hPjwvc3Bh +bj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28t +bGlnYXR1cmVzOm5vbmU7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tQVUiPiZuYnNwOzwvc3Bhbj48 +bzpwPjwvbzpwPjwvcD4NCjxkaXYgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249ImNlbnRlciIgc3R5 +bGU9InRleHQtYWxpZ246Y2VudGVyIj48c3BhbiBzdHlsZT0ibXNvLWxpZ2F0dXJlczpub25lO21z +by1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj4NCjxociBzaXplPSIxIiB3aWR0aD0iMTAwJSIgYWxp +Z249ImNlbnRlciI+DQo8L3NwYW4+PC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz +dHlsZT0ibXNvLWxpZ2F0dXJlczpub25lO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj4mbmJz +cDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8L3RkPg0KPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0i +cGFkZGluZzo1LjBwdCA1LjBwdCA1LjBwdCA1LjBwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBh +bGlnbj0iY2VudGVyIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0eWxlPSJmb250 +LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7bXNvLWxpZ2F0dXJlczpub25l +O21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ +DQo8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRpbmc6MGNt +IDUuNHB0IDBjbSA1LjRwdCI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u +dC1zaXplOjcuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWY7Y29s +b3I6YmxhY2s7bXNvLWxpZ2F0dXJlczpub25lO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj5Q +UklWQVRFIEFORCBDT05GSURFTlRJQUw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i +TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjcuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 +O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2s7bXNvLWxpZ2F0dXJlczpub25lO21z +by1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj5UaGlzIGVtYWlsIChpbmNsdWRpbmcgYW55IGF0dGFj +aG1lbnRzKSBtYXkgY29udGFpbiBwcml2aWxlZ2VkIG9yIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlv +biB3aGljaCBpcyBpbnRlbmRlZCBmb3IgdGhlIHVzZQ0KIG9mIHRoZSBhZGRyZXNzZWUgb25seS4g +QW55IHVuYXV0aG9yaXNlZCB1c2Ugb3IgZGlzY2xvc3VyZSBpcyBwcm9oaWJpdGVkLiBJZiB5b3Ug +aGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9yLCBwbGVhc2UgaW5mb3JtIHRoZSBzZW5k +ZXIgYnkgZW1haWwgaW1tZWRpYXRlbHkgYW5kIGRlbGV0ZSB0aGUgZW1haWwgaW1tZWRpYXRlbHku +IFRoYW5rIHlvdSBmb3IgeW91ciBjby1vcGVyYXRpb24uPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0K +PC90ZD4NCjx0ZCB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRpbmc6NS4wcHQgNS4wcHQgNS4wcHQg +NS4wcHQiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx +dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tbGlnYXR1cmVzOm5vbmU7bXNvLWZhcmVh +c3QtbGFuZ3VhZ2U6RU4tQVUiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvdGQ+DQo8 +L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHls +ZT0ibXNvLWxpZ2F0dXJlczpub25lO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLUFVIj4mbmJzcDs8 +L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwv +bzpwPjwvcD4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K + +--_000_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_-- + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: image/png; name="image001.png" +Content-Description: image001.png +Content-Disposition: inline; filename="image001.png"; size=16430; + creation-date="Tue, 23 Jun 2026 07:05:01 GMT"; + modification-date="Tue, 23 Jun 2026 07:05:01 GMT" +Content-ID: +Content-Transfer-Encoding: base64 + +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 +AfcAAAAASUVORK5CYII= + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: image/png; name="image002.png" +Content-Description: image002.png +Content-Disposition: inline; filename="image002.png"; size=16115; + creation-date="Tue, 23 Jun 2026 07:05:01 GMT"; + modification-date="Tue, 23 Jun 2026 07:05:01 GMT" +Content-ID: +Content-Transfer-Encoding: base64 + +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 + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: image/jpeg; name="image003.jpg" +Content-Description: image003.jpg +Content-Disposition: inline; filename="image003.jpg"; size=8800; + creation-date="Tue, 23 Jun 2026 07:05:01 GMT"; + modification-date="Tue, 23 Jun 2026 07:05:01 GMT" +Content-ID: +Content-Transfer-Encoding: base64 + +/9j/4AAQSkZJRgABAQAAAQABAAD/7AARRHVja3kAAQAEAAAARgAA/+EDb2h0dHA6Ly9ucy5hZG9i +ZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6 +TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0i +QWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAg +ICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt +cmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBN +TT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9u +cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDov +L25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlk +Ojg1RDkzMTBFMTQ1OUUxMTFCOTQyRTczMEJENDdBMDg5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAu +ZGlkOjJEMEQ5NEVEQjQ0QTExRUFCRjE2RkM2REJFOTAxOEE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4 +bXAuaWlkOjJEMEQ5NEVDQjQ0QTExRUFCRjE2RkM2REJFOTAxOEE3IiB4bXA6Q3JlYXRvclRvb2w9 +IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVm +Omluc3RhbmNlSUQ9InhtcC5paWQ6QjE2RDA5OEM0OEI0RUExMTgzNThEMEJFMEU1MkM4NUUiIHN0 +UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODFEOTMxMEUxNDU5RTExMUI5NDJFNzMwQkQ0N0EwODki +Lz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBl +bmQ9InIiPz7/2wBDAAMCAgMCAgMDAgMDAwMDBAcFBAQEBAkGBwUHCgkLCwoJCgoMDREODAwQDAoK +DhQPEBESExMTCw4UFhQSFhESExL/2wBDAQMDAwQEBAgFBQgSDAoMEhISEhISEhISEhISEhISEhIS +EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhL/wAARCAA9AMgDAREAAhEBAxEB/8QAHQAA +AQQDAQEAAAAAAAAAAAAAAAUGBwgDBAkCAf/EAEYQAAEDAwMDAgQDBAUHDQAAAAECAwQFBhEABxII +EyExQRQiUWEJFXEWMkJSIzOBkaEXGDlDYnWxGTZTcnN0grKztcHR8f/EABwBAAEEAwEAAAAAAAAA +AAAAAAADBAUGAQIHCP/EAEgRAAAFAgIGBgYFCQcFAAAAAAABAgMEBRESIQYTMUFRcQcUIjJhgRWR +ocHR8AgjQrHhFjM2UmJykrLCJDVGgqLS8SU0Q1Oz/9oADAMBAAIRAxEAPwDqnoADQAYnXkMpy6pK +R9Tps9IZYTicUREMklStgZSN2KFNrsqkUVcuqy6eAZrkNgqYin2St0kI5n+RJKvqMahntJ6e39oz +5fiJxWjk5uKmQ9ZBK2XPM+SdtvE7F4jBWN5aNQ8mow6slsfvOJYQoD9QFZ/w0ijSuEo+6ovV8QtF +0ZlSfzak35n8AsWfuNbd+sOrtOrRZ644HfYSSl1nP87agFJ/tGrBGlsyE4mlXDCqUOoUw09bZNN9 +h7j5HsDp04EWDQAGgANAAaAA0ABoADQAGgANAAaAA0ABoADQAGgANAAaAA0ABoADQAINyXMzb7KU ++HZT39U19fuftqraUaTR6JF1is1nsL3n4CQgU5yUr9ktpiPlvTL7MxhioOMQmv6OVLa8layPLTfo +MD3x/wDvGIjlW0mcflOPKSw33lJyPZfAi+88i+/xsjqmaUls8BG4rukf8xjcp1Gj2tR2adTI/bYa +B9EjK1fxKVgeSffVMmVGpQXMTzeFG7fbwuE9auS5rXl4jDQvBhMmM4Fo8EH1Tq2UitplJEzCxIV2 +RTjdWbVturmYuOz50qlVKE5luSwricH1SfZST7pPg++r7TJjjasSVDu2i6Y9VhqgzmycbVuP59ou +l0tdSELf61HUzwxCumkBKanEQcJcB8B9sHzwUfBH8KvH0J6RTKgmW34kOCdIugb2jE5OruqO53T4 +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 +ANAAaAA0ABoADQAGgANAAaAA0AH/2Q== + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: image/jpeg; name="image004.jpg" +Content-Description: image004.jpg +Content-Disposition: inline; filename="image004.jpg"; size=32264; + creation-date="Tue, 23 Jun 2026 07:05:01 GMT"; + modification-date="Tue, 23 Jun 2026 07:05:02 GMT" +Content-ID: +Content-Transfer-Encoding: base64 + +/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABGAAD/4QMraHR0cDov +L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl +aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 +OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6 +NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5 +OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht +bG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6 +Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUu +Y29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBo +b3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIwOTgzNTJD +MEQxNTExRUM4MEI1RTk1RDc3RDVCNDY1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIwOTgz +NTJEMEQxNTExRUM4MEI1RTk1RDc3RDVCNDY1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmlu +c3RhbmNlSUQ9InhtcC5paWQ6QjA5ODM1MkEwRDE1MTFFQzgwQjVFOTVENzdENUI0NjUiIHN0UmVm +OmRvY3VtZW50SUQ9InhtcC5kaWQ6QjA5ODM1MkIwRDE1MTFFQzgwQjVFOTVENzdENUI0NjUiLz4g +PC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9 +InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAEAwMDAwMEAwMEBgQDBAYHBQQEBQcIBgYHBgYICggJ +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 +/9k= + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_ +Content-Type: image/png; name="image005.png" +Content-Description: image005.png +Content-Disposition: inline; filename="image005.png"; size=16190; + creation-date="Tue, 23 Jun 2026 07:05:02 GMT"; + modification-date="Tue, 23 Jun 2026 07:05:02 GMT" +Content-ID: +Content-Transfer-Encoding: base64 + +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 +YII= + +--_008_SYCPR01MB4414F2D359763C2BFED4201ABAEE2SYCPR01MB4414ausp_-- diff --git a/example/1.md b/example/1.md new file mode 100644 index 0000000..bb68aff --- /dev/null +++ b/example/1.md @@ -0,0 +1,10546 @@ +# 100x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272806 + +*Thread: 1 message(s), 2026-05-29 17:35 → 2026-05-29 17:35* + +## Message 1 — 2026-05-29 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 100x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272806 + +100x C9120AXE-B with mounting blank +20x *no more mounting blank +FJC270918FN +FJC27041K7D +FJC270918HB +FJC2428184B +FJC242612Y8 +FJC25331KK9 +FJC242612YA +FJC242612Y9 +FJC27111BBT +FJC234916D2 +FJC242916WL +FJC24401SKH +FJC250618K5 +FJC24381E9Q +FJC28081EXK +FJC250618KB +FJC24401SL0 +FJC25331M5V +FJC242916VZ +FJC24381DWC +FYI: *no more mounting blank + +Best Regards, + +Joe. + +--- + +# 1x C9300-24P-E to Network Craze (BTV) - PO-P30531 + +*Thread: 1 message(s), 2026-05-29 17:35 → 2026-05-29 17:35* + +## Message 1 — 2026-05-29 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300-24P-E to Network Craze (BTV) - PO-P30531 + +t#1ZJW78500211632137 +1x C9300-24P-E USED with single PSU PWR-C1-715WAC +C9300-24P-E V03 +FOC2427U033 +PWR-C1-715WAC V03 +LIT24223GHD +FAN-T2 V01 +NID2425W1DA4 +NID2421W0MS6 +NID2410W0EUZ + +Best Regards, + +Joe. + +--- + +# 1x C9200CX-12P-2X2G-E to Summit 360 - PO-75588 + +*Thread: 1 message(s), 2026-05-29 17:35 → 2026-05-29 17:35* + +## Message 1 — 2026-05-29 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9200CX-12P-2X2G-E to Summit 360 - PO-75588 + +t#1ZJW78500335076497 +1x C9200CX-12P-2X2G-E USED +C9200CX-12P-2X2G-E V01 +FJC28281TSH + +Best Regards, + +Joe. + +--- + +# 6x MA-MNT-MR-16 to OSI Global - PO-25740 + +*Thread: 1 message(s), 2026-05-29 17:35 → 2026-05-29 17:35* + +## Message 1 — 2026-05-29 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 6x MA-MNT-MR-16 to OSI Global - PO-25740 + +t#1ZJW78500318099129 +6x MA-MNT-MR-16 +BCAA0004946 +BCAA0004888 +BCAA0004880 +BCAA0004892 +BCAA0004968 +BCAA0004878 + +Best Regards, + +Joe. + +--- + +# 15x PWR-C1-715WAC-P to Curvature LLC - PO-1360562-I + +*Thread: 1 message(s), 2026-05-29 17:35 → 2026-05-29 17:35* + +## Message 1 — 2026-05-29 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x PWR-C1-715WAC-P to Curvature LLC - PO-1360562-I + +t#381683654045 +15x PWR-C1-715WAC-P USED +PWR-C1-715WAC-P V01 +ART2217P09A +DCC2304C1DA +DCC2805C48Y +DCC2823C1YN +ART2302P9CR +ART2302P9Y1 +ART2302P9T4 +ART2250P7JZ +DCC2530C4XE +DCC2541CJUN +DCC2541CGZK +DCC2541CJYF +DCC2541CJY7 +ART2350P4N2 +ART2302P9PF + +Best Regards, + +Joe. + +--- + +# 2x CS-N540-RCKMT-19 Blind ship for Procurri LLC - PO-AT 109692 + +*Thread: 1 message(s), 2026-05-29 17:35 → 2026-05-29 17:35* + +## Message 1 — 2026-05-29 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x CS-N540-RCKMT-19 Blind ship for Procurri LLC - PO-AT 109692 + +t#872413464140 +2x N540-RCKMT-19 USED Pls ship N3K-C3064-rack *Non rail kit.* + +Best Regards, + +Joe. + +--- + +# 40x GLC-BX-D, 40x GLC-BX-U to DHD, LP - PO-72125 + +*Thread: 1 message(s), 2026-05-29 17:36 → 2026-05-29 17:36* + +## Message 1 — 2026-05-29 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 40x GLC-BX-D, 40x GLC-BX-U to DHD, LP - PO-72125 + +t#1ZJW78500335530889 +40x GLC-BX-D NIB +40x GLC-BX-D NIB +ACW2853072T +ACW285306VG +ACW28530746 +ACW2853074J +ACW2853074F +ACW285306V2 +ACW285306XH +ACW28530757 +ACW28530753 +ACW2853074B +ACW2853073W +ACW285306XE +ACW285306WU +ACW2853073N +ACW2853072B +ACW28530755 +ACW2853072V +ACW285306WW +ACW2853074K +ACW28530747 +ACW285306XQ +ACW28530750 +ACW2853072M +ACW2853073Q +ACW285306X0 +ACW285306WZ +ACW285306X9 +ACW285306WN +ACW2853075D +ACW2853074S +ACW28530749 +ACW285306VQ +ACW2853075F +ACW2853075E +ACW285306V1 +ACW28530751 +ACW285306XJ +ACW285306WH +ACW28530754 +ACW28530743 +Upto 40x GLC-BX-U NIB +NDG21190929 +NDG21364652 +NDG21190449 + +Best Regards, + +Joe. + +--- + +# 15x C9300-NM-8X to Curvature LLC - PO-1360736-I + +*Thread: 1 message(s), 2026-05-29 17:36 → 2026-05-29 17:36* + +## Message 1 — 2026-05-29 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x C9300-NM-8X to Curvature LLC - PO-1360736-I + +t#391683375950 +15x C9300-NM-8X USED +FJZ27177878 +FOC250718RD +FJZ23141KYB +FOC21351WND +FJZ243504TU +FJZ23090CJC +FJZ24131BYC +FOC2243931X +FJZ23141MB3 +FJZ23300DKJ +FOC221047UU +FJZ264676Q6 +FJZ2436096X +FOC22442R41 +FOC2243539R + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 1 message(s), 2026-05-31 20:18 → 2026-05-31 20:18* + +## Message 1 — 2026-05-31 20:18 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay | IPSupply +- **Subject:** Re: Import Australia UPS +- **Attachments:** PdAWvmaWfp4m2tJ6.png + +Yes, I did. + +Best regards, + +Joe + +--- + +# QFX5200-FAN-AFO + +*Thread: 1 message(s), 2026-06-01 09:32 → 2026-06-01 09:32* + +## Message 1 — 2026-06-01 09:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: QFX5200-FAN-AFO + +5 units here + +Best Regards, + +Joe. + +--- + +# Help connect C9300-24P-E + +*Thread: 1 message(s), 2026-06-01 09:32 → 2026-06-01 09:32* + +## Message 1 — 2026-06-01 09:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect C9300-24P-E + +*done. + +Best Regards, + +Joe. + +--- + +# SFP-10G-LRM + +*Thread: 1 message(s), 2026-06-01 09:34 → 2026-06-01 09:34* + +## Message 1 — 2026-06-01 09:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: SFP-10G-LRM + +Will do! + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 4 message(s), 2026-06-01 09:39 → 2026-06-01 17:11* + +## Message 1 — 2026-06-01 09:39 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +*Plz check:* +line 8: Please send SN of SUP32 and the daughtercard MSFC2A/PFC3 +SUP32 +SAL10436BN1 +WS-F6K-PFC3B V01 +SAL10436B4P +MSFC2A +SAL104257JW + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-01 10:34 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +all connected port 1-24 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-01 16:03 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +*done. + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-01 17:11 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +all connected port 1-24 + +Best Regards, + +Joe. + +--- + +# AIR-AP-BRACKET-2 + +*Thread: 2 message(s), 2026-06-01 09:40 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 09:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: AIR-AP-BRACKET-2 + +yes, we still have all those recently arrived from AUS and many here too. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: AIR-AP-BRACKET-2 and AIR-AP-BRACKET-1 + +plz check the details below: +AIR-AP-BRACKET-2 +65 units avail. + AIR-AP-BRACKET-1 +25 units avail. + +Best Regards, + +Joe. + +--- + +# C9200-STACK like New STACK-T4-50CM + +*Thread: 1 message(s), 2026-06-01 09:46 → 2026-06-01 09:46* + +## Message 1 — 2026-06-01 09:46 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: C9200-STACK like New STACK-T4-50CM + +Plz check total units like New +a. qty C9200-STACK like New +28 +b. qty STACK-T4-50CM like New +10 units + +and keep aside, will ship AUS + +Best Regards, + +Joe. + +--- + +# LINE 15 + +*Thread: 1 message(s), 2026-06-01 09:46 → 2026-06-01 09:46* + +## Message 1 — 2026-06-01 09:46 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 15 + +*done. + +Best Regards, + +Joe. + +--- + +# SYD 875099 Shipment Pickup Request – FedEx Tracking Number: 872479468286 + +*Thread: 1 message(s), 2026-06-01 14:06 → 2026-06-01 14:06* + +## Message 1 — 2026-06-01 14:06 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: SYD 875099 Shipment Pickup Request – FedEx Tracking Number: 872479468286 + +Got it, + +Best Regards, + +Joe. + +--- + +# 1x C892FSP-K9 to DHD + +*Thread: 2 message(s), 2026-06-01 14:20 → 2026-06-05 15:23* + +## Message 1 — 2026-06-01 14:20 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 1x C892FSP-K9 to DHD + +TS18 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-05 15:23 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 1x C892FSP-K9 to DHD + +TS12 + +Best Regards, + +Joe. + +--- + +# 5x JNP-FAN-1RU to Terabit Systems LLC - PO-2631 + +*Thread: 3 message(s), 2026-06-01 14:55 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 14:55 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x JNP-FAN-1RU to Terabit Systems LLC - PO-2631 + +no s/n for those FANs? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-01 15:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: 5x JNP-FAN-1RU to Terabit Systems LLC - PO-2631 +- **Attachments:** Image_260601_154231.jpeg, Image_260601_154244.jpeg, Image_260601_154259.jpeg, Image_260601_154314.jpeg + +pictures attached. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x JNP-FAN-1RU to Terabit Systems LLC - PO-2631 + +t#872509139509 + +5x JNP-FAN-1RU Please use the JNP-FAN-1RU label from the printer and +swap it onto the 5x QFX5200-FAN-AFO +JNP-FAN-1RU +SBCFX3650 +SBCFX3630 +SBCFX3659 +SBCFX3654 +SBCGB5835 + +Old s/n +WF0216430251 +WF0216430522 +WF0216430139 +WF0216430127 +JNV23455010 + +Best Regards, + +Joe. + +--- + +# TNT Import Economy + +*Thread: 2 message(s), 2026-06-01 15:30 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 15:30 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT Import Economy + +sorry, i don't have time more items + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT Import Economy + +t#872479468286 + +1st box +2x Laptop (1 dell, 1 apple, we will not ship Vietnam anymore) +2x + +2x PWR-C49E-300AC-F like new +QCS18391UD9 +PAC18385DBZ + +14x C9120AXI like New (Note AXI, emailed few days ago) +FJC25432C6Y +FJC25432C5G +FJC25432C9T +FJC25432CA1 +FJC25432C7Q +FJC26361XQC +FJC25432C7T +FJC25432C5D +FJC25432C3D +FJC25432CAK +FJC25432C4F +FJC25432CBA +FJC25432C73 +FJC25432C74 + +2x LOT OF 10 CISCO QSFP-40G-SR-BD 10-2945-02 40GbE Transceiver 198366787037 +381590855918 Thursday 28th * -> total 8 units only, the rest keep in US* +*not here yet. + +C9200L-48P-4X-E | JAE263024R0 | Location: US-JV.7.7.D NIB + +C9200L-48P-4X-E | JAE263023SP | Location: US-JV.7.7.D NIB + +Best Regards, + +Joe. + +--- + +# LINE 11 + +*Thread: 1 message(s), 2026-06-01 16:19 → 2026-06-01 16:19* + +## Message 1 — 2026-06-01 16:19 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 11 + +*done. + +Best Regards, + +Joe. + +--- + +# FYI: Done units + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Re: FYI: Done units + +more connected port 1-24 + +Best Regards, + +Joe. + +--- + +# 10x AIR-ACC1530-PMK1 to Curvature LLC - PO-1360802-I + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 10x AIR-ACC1530-PMK1 to Curvature LLC - PO-1360802-I + +t#381737217720 +10x AIR-ACC1530-PMK1 *full kit* +*JNV23453768* +*JNV23453766* +*JNV23453765* +*JNV23453767* +*JNV23453769* +*JNV23453771* +*JNV23453773* +*JNV23453779* +*JNV23453775* +*JNV23453777* + +Best Regards, + +Joe. + +--- + +# 7x GLC-BX-U to DHD, LP - PO-72125 + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 7x GLC-BX-U to DHD, LP - PO-72125 + +t#1ZJW78500326506931 +7x GLC-BX-U NIB +SNDG19490387 +SNDG19490597 +SNDG19490604 +SNDG19490723 +SNDG19490316 +SNDG19490724 +SNDG19491086 + +Best Regards, + +Joe. + +--- + +# 100x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272806 + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 100x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272806 + +t#872507852844 +100x C9120AXE-B with AIR-AP-BRACKET-2 +28x +FJC27081CA2 +FJC24381DM7 +FJC24381E8W +FJC24311C2L +FJC24381DV4 +FJC24401SHB +FJC250618AX +FJC24331ATB +FJC242916V0 +FJC24381DV2 +FJC250618KG +FJC2428180H +FJC24381DV9 +FJC27102DKZ +FJC24511LK7 +FJC24381DUJ +FJC27081CAY +FJC27081CA0 +FJC27081CAX +FJC27081CA1 +FJC25331KQW +FJC24401SKB +FJC242916W2 +FJC242612Y5 +FJC242817ZG +FJC270918G9 +FJC27043K60 +FJC271823UE + +28x AIR-AP-BRACKET-2 + +Best Regards, + +Joe. + +--- + +# 1x C892FSP-K9 to DHD, LP - PO-72258 + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 1x C892FSP-K9 to DHD, LP - PO-72258 + +t#1ZJW78500336414128 +1x C892FSP-K9 Includes: 1x PWR-60W-AC-V2 +line 18: PID: C892FSP-K9 , VID: V02, SN: FGL1741211R +psu +DTH2022D4TT + +Best Regards, + +Joe. + +--- + +# 2x FAN-T2 USED Blind ship for NetworkTigers, Inc. - PO-260601-5 + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x FAN-T2 USED Blind ship for NetworkTigers, Inc. - PO-260601-5 + +2x FAN-T2 USED +ACI232100KY +ACI232104V7 + +Best Regards, + +Joe. + +--- + +# 4x MA-MNT-MR-16 to OSI Global - PO-25782 + +*Thread: 1 message(s), 2026-06-01 17:36 → 2026-06-01 17:36* + +## Message 1 — 2026-06-01 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x MA-MNT-MR-16 to OSI Global - PO-25782 + +t#1ZJW78500312990541 +4x MA-MNT-MR-16 +1PMA-MNT-MR-16 +BCAA0004882 +BCAA0004886 +BCAA0004685 +BCAA0004681 + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x PWR-115W-AC 17-14693-01192 + +*Thread: 1 message(s), 2026-06-01 17:37 → 2026-06-01 17:37* + +## Message 1 — 2026-06-01 17:37 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x PWR-115W-AC 17-14693-01192 + +*done. +Please help to ship +1x PWR-115W-AC (NIB): among DAB264260LD + +Best Regards, + +Joe. + +--- + +# 12x GLC-FE-100FX-RGD to Curvature LLC - PO-1360771-C + +*Thread: 1 message(s), 2026-06-01 17:37 → 2026-06-01 17:37* + +## Message 1 — 2026-06-01 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 12x GLC-FE-100FX-RGD to Curvature LLC - PO-1360771-C + +t#381735687048 +12x GLC-FE-100FX-RGD USED +ACW25411AVL +ACW25411AVT +ACW25411AVU +ACW25411AVW +ACW25411AVM +ACW29350R80 +ACW26092B5L +ACW25401EX5 +ACW25401EWT +ACW25401EWS +ACW29350R5B +ACW29350R61 + +Best Regards, + +Joe. + +--- + +# Vacation + +*Thread: 3 message(s), 2026-06-01 17:37 → 2026-06-02 09:20* + +## Message 1 — 2026-06-01 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Vacation + +hi Boss, + +Can we take vacation from Jul 10 to July 17? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-01 18:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Vacation + +Ah sorry Boss, Vân already booked the package + +Best regards, + +Joe + +--- +## Message 3 — 2026-06-02 09:20 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Vacation + +Sorry Boss, Van booked because of the kids school schedule and events. + +I should have asked you first. + +Best Regards, + +Joe. + +--- + +# LABEL + +*Thread: 7 message(s), 2026-06-02 09:18 → 2026-06-09 16:27* + +## Message 1 — 2026-06-02 09:18 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +ok roi + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-02 09:30 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +I need new labels for the s/n below: +FJC24381DWD +FJC24381DUC +FJC242916V4 +FJC26291GP3 +FJC2629225Y + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-02 12:00 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +I need new labels for the s/n below: +FJC26261DF0 +FJC2629226K +FJC253813N5 +FJC26261MLJ +FJC24381E5G +FJC253813PF +FJC262921KW +FJC262921J0 +FJC271823UD +FJC242916WK +FJC26291G8Q +FJC25101JJW + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-02 13:59 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +ok roi + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-02 14:11 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +ok roi + +Best Regards, + +Joe. + +--- +## Message 6 — 2026-06-09 15:58 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +i need new labels for the unit below: +PID: C9120AXE-B , VID: V08 , SN: FJC27081CEG MAC: 6C:8D:77:94:CA:0C + +Best Regards, + +Joe. + +--- +## Message 7 — 2026-06-09 16:27 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +ok roi + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 3 message(s), 2026-06-02 09:27 → 2026-06-02 16:29* + +## Message 1 — 2026-06-02 09:27 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +new connection port 1-4, 8, 11-14 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-02 15:44 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Done and help connect + +*done. + +*line 2: khong boot duoc : BOOT FAIL W BOOT FAIL W BOOT FAIL W BOOT FAIL +W* + +*line 11, 12, 13 : khong co console, A check lai giup e* + +*line 14 co pass, A giu reset giup e voi a* + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-02 16:29 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Done and help connect + +*line 2 van bi loi : A cho e xin PID, SN* +*C9300-24P-A V02* +*FCW2303DHNT* + +*line 12, 13 van khong co console a, A chuyen sang line khac giup e xem sao +a* +**done.* + +Best Regards, + +Joe. + +--- + +# Help connect DS-C9132T-K9 + +*Thread: 1 message(s), 2026-06-02 13:59 → 2026-06-02 13:59* + +## Message 1 — 2026-06-02 13:59 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect DS-C9132T-K9 + +TS15 + +Best Regards, + +Joe. + +--- + +# 2x CISCO2511 + +*Thread: 1 message(s), 2026-06-02 14:11 → 2026-06-02 14:11* + +## Message 1 — 2026-06-02 14:11 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 2x CISCO2511 + +TS16,17 + +Best Regards, + +Joe. + +--- + +# 2x C9300-24P-A to PIVIT GLOBAL - PO-256093 and 255979 + +*Thread: 2 message(s), 2026-06-02 14:28 → 2026-06-02 17:39* + +## Message 1 — 2026-06-02 14:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-24P-A to PIVIT GLOBAL - PO-256093 and 255979 + +the s/n above were C9300-24P-E version + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-02 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-24P-A to PIVIT GLOBAL - PO-256093 and 255979 + +t#872564644148 +2x C9300-24P-A * PWR-C1-715WAC and rack ear * +C9300-24P-A V03 +FCW2426D13K +FOC2432L240 +PWR-C1-715WAC V03 +LIT23172YE6 +LIT241822YE +FAN-T2 V01 +NID2425W1DUR +NID2425W1DA9 +NID2325W096X +NID2425W1D7F +NID2425W1D7G +NID2410W0EUY + +Best Regards, + +Joe. + +--- + +# (network-equipment) WTB: 2x AIR-ACC1530-PMK1, CISCO, REF + +*Thread: 2 message(s), 2026-06-02 15:04 → 2026-06-02 15:11* + +## Message 1 — 2026-06-02 15:04 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: (network-equipment) WTB: 2x AIR-ACC1530-PMK1, CISCO, REF +- **Attachments:** image003.png, image004.png, image005.jpg, image006.jpg + +FYI: 10x AIR-ACC1530-PMK1 already shipped yesterday + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-02 15:11 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: (network-equipment) WTB: 2x AIR-ACC1530-PMK1, CISCO, REF +- **Attachments:** image003.png, image004.png, image005.jpg, image006.jpg, Image_260602_151145.jpeg + +no, they mixup up with different vendors. We don't even have those NEW +BATTERY. +We shipped 10x new like on one in the picture attached. + +Best Regards, + +Joe. + +--- + +# PID: DS-C9132T-K9 , VID: V01 , SN: JPG2303002Z + +*Thread: 1 message(s), 2026-06-02 15:40 → 2026-06-02 15:40* + +## Message 1 — 2026-06-02 15:40 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: PID: DS-C9132T-K9 , VID: V01 , SN: JPG2303002Z + +TS18 + +Best Regards, + +Joe. + +--- + +# 2x C9120AXE-B + +*Thread: 2 message(s), 2026-06-02 15:50 → 2026-06-03 09:00* + +## Message 1 — 2026-06-02 15:50 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 2x C9120AXE-B + +Before you go home +Plz help to reconnect again so we can recover them +C9120AXE-B , VID: V07 , SN: FJC27041KKE **TS24 +C9120AXE-B | FJC28081EXK *already shipped to CMS last wk. + +all connected ts1-24 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-03 09:00 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 2x C9120AXE-B FJC27041KKE + +Will do + +Best regards, + +Joe + +--- + +# 2x C9200L-48P-4X-E to OSI Global - PO-25828 + +*Thread: 1 message(s), 2026-06-02 17:39 → 2026-06-02 17:39* + +## Message 1 — 2026-06-02 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9200L-48P-4X-E to OSI Global - PO-25828 + +t#1ZJW78500338590210 + +2x C9200L-48P-4X-E USED with single PSU PWR-C5-1KWAC + +SNs among: + +JAE254300DF +JAE254300C2 + +PWR-C5-1KWAC V02 + +DCI25251CV2 + +ART2526D03V + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 1 message(s), 2026-06-02 17:39 → 2026-06-02 17:39* + +## Message 1 — 2026-06-02 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS + +t#1ZJW78500439236591 +All Mail +3x + +All Memory from eBay arriving recently (after removing packing) +*many + +all SFP-10G-LRM like new (as emailed) +FNS22050YND +FNS23051B30 +FNS23051B32 +FNS230514Q4 +FNS23051B20 +OPM23170H22 + +a. qty C9200-STACK like New 28 +JAE234004PC +JAE234004T3 +JAE25360Z1S +JAE25360ZXV +JAE25360ZXW +JAE25360WQ5 +JAE25210K5G +JAE25360U84 +JAE25360U7W +JAE26440B4B +JAE26402RM2 +FDO24260JB2 +JAE2610039Z +JAE25210GZQ +FDO19321P8C +JAE25360VU0 +FDO20120G3J +JAE23051476 +JAE230601NH +FVH27510R69 +JAE25161CTG +FDO24250TUS +FDO24250T0B +FDO24260G32 + +b. qty STACK-T4-50CM like New 10 units (plz add 2 more GradeB if any) +LCC2428GA36 +LCC2618GGEJ +MOP2732A3H9 +LCC2246GX01 +LCC2625GFEE +MOC261800C4 +MOC261801GT +MOC261700NW +MOP2732A3EX +LCC2320GCQW + +Arrived yesterday +AIR-AP1562E-B-K9 Cisco 1/1 NOB FJC263610EP no label on the +box + +Arrived yesterday +EX-SFP-10GE-SR Juniper 4/4 NIB + SCJ19YP0M8,SCJ19YP0V4,SCJ19YP02N,SAZH1TSH + +if this one arrive +4x NEW Juniper JNP-SFP-25G-SR 25GBASE-SR SFP-25G-SR-C 740-068639 100m MMF +LC Duplex 277757661245 381641730798 5/29/26 1:59 PM KENNESAW, GA Departed +FedEx location +*not here yet + +Best Regards, + +Joe. + +--- + +# 3x C9200CX-12P-2X2G-E to OSI Global - PO-25601 + +*Thread: 1 message(s), 2026-06-02 17:39 → 2026-06-02 17:39* + +## Message 1 — 2026-06-02 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x C9200CX-12P-2X2G-E to OSI Global - PO-25601 + +t#1ZJW78500323402987 + 3x C9200CX-12P-2X2G-E USED +FJC28311W43 +FJC29281QU8 +FJC28281TVG + +Best Regards, + +Joe. + +--- + +# 2x C9500X-ACCKIT-19I to Curvature LLC - PO-1360186-I + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9500X-ACCKIT-19I to Curvature LLC - PO-1360186-I + +t#381765230154 +2x C9500X-ACCKIT-19I for replacement. +JNV23455406 +JNV23455408 + +Best Regards, + +Joe. + +--- + +# 2x PWR-500-DC-F to DHD, LP - PO-72280 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x PWR-500-DC-F to DHD, LP - PO-72280 + +t#1ZJW78500333086177 + +2x PWR-500-DC-F USED + +Pls ship with SNs below: + +L101QR002SANP, + +L375SL00J2AHP + +Best Regards, + +Joe. + +--- + +# 1x C9500X-ACCKIT-19I to Network Craze (BTV) - PO-P30393 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9500X-ACCKIT-19I to Network Craze (BTV) - PO-P30393 + +t#1ZJW78500126302164 +1x C9500X-ACCKIT-19I +JNV23455398 + +Best Regards, + +Joe. + +--- + +# 72x ---> upto 48x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272591 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 72x ---> upto 48x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272591 +- **Attachments:** BcszcdfInMdficzg.png + +t#872563690107 +up to 48x C9120AXE-B *with *mounting blank +16x +FJC24381E2G +FJC2420116U +FJC25111HC6 +FJC25101JED +FJC271823UB +FJC271823UC +FJC242916W1 +FJC270918G7 +FJC24381DU8 +FJC242916UX +FJC27081CAU +FJC262921GQ +FJC24401SL1 +FJC242916V3 +FJC262922NZ +FJC26261DEM +16xmounting blank + +C9120AXE-B | FJC28081EXK **sorry, we already ship to CMS last wk. +Best Regards, + +Joe. + +--- + +# Please help to return 1x C9300-24P-A 10-14642-61136 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Please help to return 1x C9300-24P-A 10-14642-61136 + +*done. +*1x C9300-24P-A * +FJC2340S02R + +w/ *C9300-NM-8X *FJZ23370ZN8 +*PWR-C1-715WAC* LIT23272YEP +*PWR-C1-350WAC *ART2327D11J +*FAN-T2* NID2233W0GF0 +NID2233W0GEZ +NID2233W0GCP + +Best Regards, + +Joe. + +--- + +# 5x AIR-ACC1530-PMK1 to Curvature LLC - PO-1360813-I + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x AIR-ACC1530-PMK1 to Curvature LLC - PO-1360813-I + +t#381764510886 +5x AIR-ACC1530-PMK1 *full kit* +*JNV23453780* +*JNV23453782* +*JNV23453784* +*JNV23453786* +*JNV23453788* + +Best Regards, + +Joe. + +--- + +# 3x MA-MNT-MR-17 to PIVIT GLOBAL - PO-256336 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x MA-MNT-MR-17 to PIVIT GLOBAL - PO-256336 + +t#1ZJW78501322986956 +3x MA-MNT-MR-17 USED +Bracket +JNV23455338 +JNV23455340 +JNV23455342 +screw-kit +JNV23455022 +JNV23455014 +JNV23455024 + +Best Regards, + +Joe. + +--- + +# 10x SFP-10/25G-LR-S Blind ship for Summit 360 - PO-75910 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 10x SFP-10/25G-LR-S Blind ship for Summit 360 - PO-75910 + +t#1ZJW78500335396543 +10x SFP-10/25G-LR-S NIB +SINL2926020T +SINL292605CM +SINL292602ZQ +SINL292605JM +SINL2926035S +SINL292604R8 +SINL292602KR +SINL29260305 +SINL292605K0 +SINL292605J9 + +Best Regards, + +Joe. + +--- + +# 4x NXA-PAC-1100W-PE2 USED to ChannelWorks - Relutech - PO-14846 + +*Thread: 1 message(s), 2026-06-02 17:40 → 2026-06-02 17:40* + +## Message 1 — 2026-06-02 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x NXA-PAC-1100W-PE2 USED to ChannelWorks - Relutech - PO-14846 + +t#872562736621 +4x NXA-PAC-1100W-PE2 USED -PE2 version +NXA-PAC-1100W-PE2 V03 +ART2432F5YX +ART2432F5XJ +ART2336F4BH +ART2432F5TX + +Best Regards, + +Joe. + +--- + +# 4x C3650-STACK-BLANK + +*Thread: 1 message(s), 2026-06-03 09:31 → 2026-06-03 09:31* + +## Message 1 — 2026-06-03 09:31 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x C3650-STACK-BLANK + +yes, we do have them here + +Best Regards, + +Joe. + +--- + +# Help connect 2x ISR4431 + +*Thread: 1 message(s), 2026-06-03 12:10 → 2026-06-03 12:10* + +## Message 1 — 2026-06-03 12:10 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 2x ISR4431 + +TS1,2 + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-03 12:57 → 2026-06-03 12:57* + +## Message 1 — 2026-06-03 12:57 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +*We are still working on:* +line 21: PID: C9120AXE-B , VID: V07 , SN: FJC27102CXZ *A Joe chuyen sang +line khac giup e voi a* + +**all connected port 1-8,11,18 + +Best Regards, + +Joe. + +--- + +# C9120AXE-E 1/0 USEB FGL2812LK6C + +*Thread: 1 message(s), 2026-06-03 14:44 → 2026-06-03 14:44* + +## Message 1 — 2026-06-03 14:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: C9120AXE-E 1/0 USEB FGL2812LK6C + +TS12 + +Best Regards, + +Joe. + +--- + +# LINE 8 + +*Thread: 1 message(s), 2026-06-03 14:45 → 2026-06-03 14:45* + +## Message 1 — 2026-06-03 14:45 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 8 + +*line 8: A Joe cho e xin PID, SN* *ca bo voi a:* bi loi -Traceback= +42A2B3B4 42A28EF4 426D920C 426D9238 425140A4 Error75 +SUP32 +SAL1338Z2TC +pfc2 +SAL1339ZJD8 +msfc2 +SAL1339ZGPX + +Best Regards, + +Joe. + +--- + +# WS-C3560CX-12TC-S + +*Thread: 1 message(s), 2026-06-03 14:48 → 2026-06-03 14:48* + +## Message 1 — 2026-06-03 14:48 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: WS-C3560CX-12TC-S + +TS13 + +Best Regards, + +Joe. + +--- + +# Switch in office C3560CG-8TC-S + +*Thread: 2 message(s), 2026-06-03 16:20 → 2026-06-03 17:26* + +## Message 1 — 2026-06-03 16:20 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** quitran@nivacloud.net +- **Subject:** Re: Switch in office C3560CG-8TC-S + +Details below: +GigabitEthernet0/5 unassigned YES unset down *open +GigabitEthernet0/6 unassigned YES unset down *open +GigabitEthernet0/7 unassigned YES unset up up **Raritan +GigabitEthernet0/8 unassigned YES unset up up ** +DiskTest server +GigabitEthernet0/9 unassigned YES unset up up **cisco1921 +GigabitEthernet0/10 unassigned YES unset up up ** APC3 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-03 17:26 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** quitran@nivacloud.net +- **Subject:** Re: Switch in office C3560CG-8TC-S + +Correction. +Details below: +GigabitEthernet0/5 unassigned YES unset down *open +GigabitEthernet0/6 unassigned YES unset down *open +GigabitEthernet0/7 unassigned YES unset up up **Raritan +GigabitEthernet0/8 unassigned YES unset up up ** +DiskTest server +GigabitEthernet0/9 unassigned YES unset up up **cisco1921 +GigabitEthernet0/10 unassigned YES unset up up ** from +C3560CX + +Plz recheck if there is any connection from 3560 + +*CX at the corner of the office (where all the NET cables from printers +are connected to) if it is connected to*a. cisco1921 (if so which port +of Cisco1921) NO +b. this C3560CG (if so which port of this C3560CG ) **Yes port 10 +C. C3560CX **port 4 to APC3 + +Best Regards, + +Joe. + +--- + +# LABEL + +*Thread: 1 message(s), 2026-06-03 17:12 → 2026-06-03 17:12* + +## Message 1 — 2026-06-03 17:12 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL + +Ok roi + +Best Regards, + +Joe. + +--- + +# 1x C9300-48P-E to OSI Global - PO-25874 + +*Thread: 1 message(s), 2026-06-03 17:33 → 2026-06-03 17:33* + +## Message 1 — 2026-06-03 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300-48P-E to OSI Global - PO-25874 + +t#1ZJW78500334596641 +1x C9300-48P-E single PSU 715WAC-P +C9300-48P-E V02 +FCW2411G0D2 +PWR-C1-715WAC-P V01 +DCC2352C5BZ +FAN-T2 +NID2403W0WGW +NID2403W0WGX +NID2403W0WGR + +Best Regards, + +Joe. + +--- + +# 1x C9K-PWR-930WDC-R,1x CAB-48DC-40A-8AWG, 0x FREIGHT Blind ship for ALLIANCE NETWORKING LLC - PO-13500 + +*Thread: 1 message(s), 2026-06-03 17:33 → 2026-06-03 17:33* + +## Message 1 — 2026-06-03 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9K-PWR-930WDC-R,1x CAB-48DC-40A-8AWG, 0x FREIGHT Blind ship for ALLIANCE NETWORKING LLC - PO-13500 + +T#872621854979 +1x C9K-PWR-930WDC-R USED +LIT23142VGU +1x CAB-48DC-40A-8AWG USED +JNV23455373 + +Best Regards, + +Joe. + +--- + +# 1x AIR-CT2504-50-K9-R to InTown Suites - PO-1511 + +*Thread: 1 message(s), 2026-06-03 17:33 → 2026-06-03 17:33* + +## Message 1 — 2026-06-03 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x AIR-CT2504-50-K9-R to InTown Suites - PO-1511 + +1x AIR-CT2504-50-K9 with PSU + +SN among: + +PSZ19311FL7 + +PSU + +dab192152nt + +Best Regards, + +Joe. + +--- + +# 1x AIR-CT2504-50-K9-R to InTown Suites - PO-1512 + +*Thread: 1 message(s), 2026-06-03 17:33 → 2026-06-03 17:33* + +## Message 1 — 2026-06-03 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x AIR-CT2504-50-K9-R to InTown Suites - PO-1512 + +1x AIR-CT2504-50-K9 with PSU + +SN among: + +PSZ19311BTJ + +PSU + +DAB184550PZ + +Best Regards, + +Joe. + +--- + +# 1x MEM-4400-8G to Curvature LLC - PO-1360805-C + +*Thread: 1 message(s), 2026-06-03 17:33 → 2026-06-03 17:33* + +## Message 1 — 2026-06-03 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x MEM-4400-8G to Curvature LLC - PO-1360805-C + +t#381792604872 +1x MEM-4400-8G USED Pls ship any MEM-4300-8G or MEM-4400-8G (1600) for +ISR4400 or ISR4300 +MT18KSF1G72AZ-1G6E1 + +Best Regards, + +Joe. + +--- + +# 1x WS-C3560CX-8XPD-S to Network Craze (BTV) - PO-P30632 + +*Thread: 1 message(s), 2026-06-03 17:33 → 2026-06-03 17:33* + +## Message 1 — 2026-06-03 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x WS-C3560CX-8XPD-S to Network Craze (BTV) - PO-P30632 + +t#1ZJW78500234219032 +1x WS-C3560CX-8XPD-S USED SN: FOC1943W1GE + +Best Regards, + +Joe. + +--- + +# 9x MA-MNT-MR-17 to CXtec - PO-D1238993 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 9x MA-MNT-MR-17 to CXtec - PO-D1238993 + +t#1ZJW78501207890357 +9x MA-MNT-MR-17 USED +bracket +JNV23455339 +JNV23455341 +JNV23455343 +JNV23455345 +JNV23455347 +JNV23455301 +JNV23455303 +JNV23455302 +JNV23455304 +screw-kit +JNV23455230 +JNV23455403 +JNV23455401 +JNV23455399 +JNV23455397 +JNV23455409 +JNV23455411 +JNV23455407 +JNV23455405 + +Best Regards, + +Joe. + +--- + +# 4x MA-MNT-MR-17 to Network Craze (BTV) - PO-P30602 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x MA-MNT-MR-17 to Network Craze (BTV) - PO-P30602 + +t#1ZJW78500234078220 +4x MA-MNT-MR-17 USED +Bracket +JNV23455344 +JNV23455346 +JNV23455348 +JNV23455337 +screw-kit +JNV23455243 +JNV23455241 +JNV23455245 +JNV23455247 + +Best Regards, + +Joe. + +--- + +# 1x C3KX-PWR-440WDC to Tri Tower Telecom - PO46160 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C3KX-PWR-440WDC to Tri Tower Telecom - PO46160 + +t#872619441290 +1x C3KX-PWR-440WDC USED with DC covers +C3KX-PWR-440WDC V02 +ART1851F57V + +Best Regards, + +Joe. + +--- + +# 1x NXA-FAN-160CFM-PE to ChannelWorks - Relutech - PO-14860 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x NXA-FAN-160CFM-PE to ChannelWorks - Relutech - PO-14860 + +t#872619260338 +1x NXA-FAN-160CFM-PE USED -PE version. +NXA-FAN-160CFM-PE V01 +ACI2302029Q + +Best Regards, + +Joe. + +--- + +# 14x MEM-C8200L-8GB Blind ship for - PO-23836 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 14x MEM-C8200L-8GB Blind ship for - PO-23836 + +*done., + +Pack AUS has just arrived today. 1ZW5715F0492097333/UPS +14x MEM-C8200L-8GB USED +80AD011836824D7C05 +80AD01202343D248EC +80AD01174932A1F851 +80AD011836824D7BFA +80AD011836824D7D98 +80AD011836824D7D9C +80AD01202343D2493A +80AD01202343D248C4 +80AD01202343D2492F +80AD01202343D248BD +80AD011836824D7D9E +80AD011836824D7C27 +80AD011836824D7C03 +80AD011836824D7C0F + +Best Regards, + +Joe. + +--- + +# 1x CISCO2511-DC to STRATEGIC TELECOM SUPPLY & SOLUTIONS - PO-5602 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x CISCO2511-DC to STRATEGIC TELECOM SUPPLY & SOLUTIONS - PO-5602 + +t#872615359982 +1x CISCO2511-DC + +line 16: PID: CISCO2511 , SN: 16203226 (SN on chassis might be different) +*+ rack ears* +*Chassis s/n 251100148 + +Plz take DC PSU from this one +CISCO2511-DC | 251362180 | Location: US- + +Best Regards, + +Joe. + +--- + +# 1x DS-C9132T-K9 to PIVIT GLOBAL - PO-256275 + +*Thread: 1 message(s), 2026-06-03 17:34 → 2026-06-03 17:34* + +## Message 1 — 2026-06-03 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x DS-C9132T-K9 to PIVIT GLOBAL - PO-256275 + +t#872615037247 + +1x DS-C9132T-K9 with with Dual PSU DS-CAC-650W-E and FANs DS-C32T-FAN-E + +rack ear. + +PID: DS-C9132T-K9 , VID: V01 , SN: JPG2303002Z + +DS-CAC-650W-E V01 + +ART2311FQQ2 + +ART2311FQQ3 + +DS-C32S-FAN-E V01 + +DCH2309RBW6 + +DCH2309RBU1 + +DCH2309RBWC + +DCH2309RBUK + +Best Regards, + +Joe. + +--- + +# CISCO2511-DC | 251362180 + +*Thread: 2 message(s), 2026-06-04 09:19 → 2026-06-04 13:53* + +## Message 1 — 2026-06-04 09:19 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: CISCO2511-DC | 251362180 + +TS14 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-04 13:53 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: CISCO2511-DC | 251362180 + +*Done + +Best Regards, + +Joe. + +--- + +# 2x CS-ISR4431/K9 to Procurri AT 110114 - PO-AT 110114 + +*Thread: 2 message(s), 2026-06-04 13:43 → 2026-06-04 17:42* + +## Message 1 — 2026-06-04 13:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x CS-ISR4431/K9 to Procurri AT 110114 - PO-AT 110114 + +do you want to ship 1 AC or Dual AC? +FYI: we don't have any more PSU-BLANK + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-04 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x CS-ISR4431/K9 to Procurri AT 110114 - PO-AT 110114 + +t#872670021815 + +2x ISR4431/K9 with PSU and rack ear. + +PID: ISR4431/K9 , VID: V04 , SN: FJC2216A0RJ **Line 1* + +PID: ISR4431/K9 , VID: V04 , SN: FJC2216A0NW LIne 2 + +PSU + +LIT220636NW + +LIT220636LD + +FYI: we don't have any more PSU-BLANK +Best Regards, + +Joe. + +--- + +# C1111-8PLTEEAWB and C1111-8PLTEEAWB help connect + +*Thread: 3 message(s), 2026-06-04 14:28 → 2026-06-04 15:03* + +## Message 1 — 2026-06-04 14:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: C1111-8PLTEEAWB and C1111-8PLTEEAWB help connect + +TS16,17 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-04 14:44 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: C1111-8PLTEEAWB and C1111-8PLTEEAWB help connect + +I restarted but still don't get any console + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-04 15:03 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: C1111-8PLTEEAWB and C1111-8PLTEEAWB help connect + +*done. +and install to another: C1111-8PLTEEAWB * -> to line 16 + NET* + +Best Regards, + +Joe. + +--- + +# Hep connect 1x ISR4431 with PVDM4-64 + +*Thread: 2 message(s), 2026-06-04 15:12 → 2026-06-04 16:18* + +## Message 1 — 2026-06-04 15:12 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Hep connect 1x ISR4431 with PVDM4-64 + +TS14 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-04 16:18 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Hep connect 1x ISR4431 with PVDM4-64 + +different unit connected to TS14 + +Best Regards, + +Joe. + +--- + +# 3x C9500-40X-A help connect + +*Thread: 1 message(s), 2026-06-04 15:23 → 2026-06-04 15:23* + +## Message 1 — 2026-06-04 15:23 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 3x C9500-40X-A help connect + +are you done with the ones on the TS? + +Best Regards, + +Joe. + +--- + +# Help connect WS-C3850-24XU-L and WS-C3850-24XU-S + +*Thread: 3 message(s), 2026-06-04 15:24 → 2026-06-04 16:19* + +## Message 1 — 2026-06-04 15:24 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect WS-C3850-24XU-L and WS-C3850-24XU-S + +are you done with the ones on the TS? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-04 15:49 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect WS-C3850-24XU-L and WS-C3850-24XU-S + +all connected port 1-6, 11-18 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-04 16:19 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Help connect WS-C3850-24XU-L and WS-C3850-24XU-S + +*WS-C3850-24XU-L : con nay hien tai A dang cam o line nao vay a* +*TS2* + +Best Regards, + +Joe. + +--- + +# LINE 3 + +*Thread: 1 message(s), 2026-06-04 16:49 → 2026-06-04 16:49* + +## Message 1 — 2026-06-04 16:49 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 3 + +*done + +Best Regards, + +Joe. + +--- + +# 1x WS-C3850-24XU-E to Curvature LLC - PO-1360972-I + +*Thread: 2 message(s), 2026-06-04 16:50 → 2026-06-05 17:39* + +## Message 1 — 2026-06-04 16:50 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x WS-C3850-24XU-E to Curvature LLC - PO-1360972-I + +Will do! + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x WS-C3850-24XU-E to Curvature LLC - PO-1360972-I + +t#381820077820 +2x WS-C3850-24XU-E with single PSU PWR-C1-1100WAC + +WS-C3850-24XU-E , VID: V03 , SN: FCW2049D07B + +WS-C3850-24XU-E , VID: V02 , SN: FOC2022X1EY + +PID: PWR-C1-1100WAC + +LIT1928181A + +LIT193501E6 + +Best Regards, + +Joe. + +--- + +# MR86-HW arrived from Ethod + +*Thread: 2 message(s), 2026-06-04 17:01 → 2026-06-04 17:04* + +## Message 1 — 2026-06-04 17:01 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: MR86-HW arrived from Ethod + +pictures attached. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-04 17:04 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: MR86-HW arrived from Ethod +- **Attachments:** Image_260604_170419.jpeg, Image_260604_170301.jpeg, Image_260604_170311.jpeg, Image_260604_170349.jpeg + +pictures attached. + +Best Regards, + +Joe. + +--- + +# C9500-40X + +*Thread: 2 message(s), 2026-06-04 17:28 → 2026-06-05 09:10* + +## Message 1 — 2026-06-04 17:28 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: C9500-40X + +*done. + +line 5: port 30 khong co SFP, A swap giup e +*done. + +line 12: Port 18 , 29 den 40 khong co SFP. A swap giup e +*done + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-05 09:10 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: C9500-40X + +Done + +Best regards, + +Joe + +--- + +# 2x ONS-SI-GE-EX to OSI Global - PO-25799 + +*Thread: 1 message(s), 2026-06-04 17:42 → 2026-06-04 17:42* + +## Message 1 — 2026-06-04 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x ONS-SI-GE-EX to OSI Global - PO-25799 + +t#1ZJW78500319978178 +2x ONS-SI-GE-EX USED +OPC14490579 +OPC14490266 + +Best Regards, + +Joe. + +--- + +# 1x FACE-C9200L-48P-4X to P3 Systems Inc. - PO-16605 + +*Thread: 1 message(s), 2026-06-04 17:43 → 2026-06-04 17:43* + +## Message 1 — 2026-06-04 17:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x FACE-C9200L-48P-4X to P3 Systems Inc. - PO-16605 + +t#872669917879 +1x FACE-C9200L-48P-4X **Faceplate only** +jnv23455079 + +Best Regards, + +Joe. + +--- + +# 10x CP-840-BUN-K9 to Curvature LLC - PO-1359761-C + +*Thread: 1 message(s), 2026-06-04 17:43 → 2026-06-04 17:43* + +## Message 1 — 2026-06-04 17:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 10x CP-840-BUN-K9 to Curvature LLC - PO-1359761-C + +t#381809072478 + +10x CP-840-BUN-K9 NOB , with 10x CP-840-BAT + TCL283100SH, +TCL283101CD, +TCL283100SB, +TCL283100W4, +TCL283101KW, +TCL28310148, +TCL2831014A, +TCL283101D7, +TCL2831015E, + +TCL283101EK + +10x CP-840-BAT + +VK24061166691, +VK24061166724, +VK24061161095, +VK24061166799, +VK24061167605, +VK24061167630, +VK24061166466, +VK24061166507, +VK24061166679, +VK24061160412 + +Best Regards, + +Joe. + +--- + +# 1x ISR1100-4G Blind ship for CUADRANT - PO-20029 + +*Thread: 1 message(s), 2026-06-04 17:43 → 2026-06-04 17:43* + +## Message 1 — 2026-06-04 17:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x ISR1100-4G Blind ship for CUADRANT - PO-20029 + +1x ISR1100-4G USED with PSU +ISR1100-4G V01 +FCH2324L000 +psu +DAB2630Y34N + +Best Regards, + +Joe. + +--- + +# 5x MA-MNT-MR-16 to OSI Global - PO-25913 + +*Thread: 1 message(s), 2026-06-04 17:43 → 2026-06-04 17:43* + +## Message 1 — 2026-06-04 17:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x MA-MNT-MR-16 to OSI Global - PO-25913 + +#1ZJW78500308687566 +5x MA-MNT-MR-16 +BCAA0004684 +BCAA0004696 +BCAA0004690 +BCAA0004686 +BCAA0004697 + +Best Regards, + +Joe. + +--- + +# label cat san rieng cho 9136I + +*Thread: 4 message(s), 2026-06-05 09:09 → 2026-06-05 14:11* + +## Message 1 — 2026-06-05 09:09 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: label cat san rieng cho 9136I + +Done + +Best regards, + +Joe + +--- +## Message 2 — 2026-06-05 11:58 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: label cat san rieng cho 9136I + +I need new labels for the ones below: +6C8D7795CB78 +6C8D77952344 +6C8D77F02BDC + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-05 13:52 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: label cat san rieng cho 9136I + +ok roi + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-05 14:11 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: label cat san rieng cho 9136I +- **Attachments:** Image_260605_135532.jpeg + +ok roi + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-05 11:34 → 2026-06-05 11:34* + +## Message 1 — 2026-06-05 11:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +all connected port 1-7 and 11-13 + +Best Regards, + +Joe. + +--- + +# FedEx Label | TNT booking number SYD 920717 + +*Thread: 1 message(s), 2026-06-05 12:00 → 2026-06-05 12:00* + +## Message 1 — 2026-06-05 12:00 +- **From:** Joe Bui +- **Cc:** "buy@ipsupply.com.au" , "ship@ipsupply.com.au" +- **Subject:** Re: FedEx Label | TNT booking number SYD 920717 + +hi Boss + +Plz send me the list for the TNT orders. I need time to prepare them. + +Best Regards, + +Joe. + +On Fri, Jun 5, 2026 at 8:42 AM US TNT-Direct Shipper < +direct.shipper.na@fedex.com> wrote: + +--- + +# Wednesday June 10 + +*Thread: 2 message(s), 2026-06-05 12:04 → 2026-06-09 17:40* + +## Message 1 — 2026-06-05 12:04 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Wednesday June 10 + +Sorry Boss, correction. + +Can we close early on Wednesday June 10 around 2pm due to Joanne's +graduation? + +Best Regards, + +Joe. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-09 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Wednesday June 10 + +hi Boss, + +Reminder, we will close early tomorrow. plz send all the orders as early as +you can. + +Best Regards, + +Joe. + +--- + +# N9K-C93180YC-EX | FDO2252023P | Location: US- + +*Thread: 1 message(s), 2026-06-05 14:31 → 2026-06-05 14:31* + +## Message 1 — 2026-06-05 14:31 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: N9K-C93180YC-EX | FDO2252023P | Location: US- + +already connected to TS13 + +Best Regards, + +Joe. + +--- + +# TNT / Fedex + +*Thread: 5 message(s), 2026-06-05 15:22 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 15:22 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +monday sir. I think enough boxes and pounds per box already. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-05 15:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +will pack about 40-45 per box. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-05 16:22 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +All 3 units below ports are good. +*C9200L-48P-4X-E | JAE254300TZ* +*C9200L-48P-4X-E | JAE254301PG * +*C9200L-48P-4X-E= | FOC2608054S* + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-05 16:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +We already shipped 4 boxes today. + +Let me know the list you want to ship so I can get an estimate for you. + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +T#872703092879 +1 x C9300-48T-A bare +FJC251918BF + +line 4: PID: C9500-40X , VID: V01 , SN: FOC2508L29J with dual PSU full Fans + PID: PWR-C4-950WAC-R , VID: 000 , SN: DCI2450M0UL + PID: PWR-C4-950WAC-R , VID: 000 , SN: DCI2450M0GT + +line 5: PID: C9500-40X , VID: V02 , SN: FJC25421YX8 with dual PSU full Fans + PID: PWR-C4-950WAC-R , VID: V01 , SN: DCI2450M0DY + PID: PWR-C4-950WAC-R , VID: V01 , SN: DCI2536M3TX + + line 12: PID: C9500-40X , VID: V02 , SN: FJC254224Z6 +with dual PSU full Fans +DCI2536M45U +DCI2450M0D9 +FAN +DCH2526Y404 +DCH2526Y41W +DCH2526Y515 +DCH2530Y5V3 +DCH2526Y1YQ +ACI24480UGJ +ACI24480TEJ +ACI24480UA3 +ACI24480UNM +ACI24480UY6 +DCH2526Y3Z1 +DCH2526Y3Z6 +DCH2526Y3YS +DCH2526Y3Z0 +DCH2526Y49A + +NIB +C9200L-48P-4X-E | JAE2632055T | Location: US-JV.5.1.E + +Any of these unit with ports like New (ugly chassis OK) , BARE +Note: ports like New (ugly chassis OK) +C9200L-48P-4X-E | JAE254301LU | Location: US- + +PID: WS-F6K-MSFC2A , VID: , SN: SAL1203D2M3 +(on : WS-SUP32-GE-3B SN: SAL1203D948 ) +PID: WS-F6K-PFC3B , VID: V01, SN: SAL1203D2SC + +Best Regards, + +Joe. + +--- + +# LINE 16: PID: C1111-8PLTEEAWB , VID: V02 , SN: FGL2342L00F + +*Thread: 2 message(s), 2026-06-05 15:40 → 2026-06-08 09:20* + +## Message 1 — 2026-06-05 15:40 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 16: PID: C1111-8PLTEEAWB , VID: V02 , SN: FGL2342L00F + +*done, same TS +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-08 09:20 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: LINE 16: PID: C1111-8PLTEEAWB , VID: V02 , SN: FGL2342L00F + +Will do! + +Best Regards, + +Joe. + +--- + +# NCS-5501 FOC2240R0AT + +*Thread: 4 message(s), 2026-06-05 16:33 → 2026-06-05 17:30* + +## Message 1 — 2026-06-05 16:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: NCS-5501 FOC2240R0AT + +the SSD inside the chassis? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-05 16:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: NCS-5501 FOC2240R0AT +- **Attachments:** Image_260605_164222.jpeg, Image_260605_164241.jpeg + +pictures attached. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-05 16:57 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: NCS-5501 FOC2240R0AT +- **Attachments:** Image_260605_164222.jpeg, Image_260605_164241.jpeg + +Ts12, Plz + +also insert USB16G5 + +*done. + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-05 17:30 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: NCS-5501 FOC2240R0AT +- **Attachments:** Image_260605_164222.jpeg, Image_260605_164241.jpeg + +*done. + +Best Regards, + +Joe. + +--- + +# 9500 40-Port 10G Network Switch C9500-40X-A 406955857237 381751525179 Friday 05th + +*Thread: 1 message(s), 2026-06-05 17:29 → 2026-06-05 17:29* + +## Message 1 — 2026-06-05 17:29 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 9500 40-Port 10G Network Switch C9500-40X-A 406955857237 381751525179 Friday 05th + +TS11 + +Best Regards, + +Joe. + +--- + +# 1x C9200CX-12P-2X2G-E to Summit 360 - PO-75588 + +*Thread: 1 message(s), 2026-06-05 17:39 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9200CX-12P-2X2G-E to Summit 360 - PO-75588 + +t#1ZJW78500306899233 +1x C9200CX-12P-2X2G-E USED For replacement. +C9200CX-12P-2X2G-E V01 +FJC28311W9J + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 1 message(s), 2026-06-05 17:39 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS + +t#1ZJW78500415223596 +2x + +All Memory from eBay arriving recently (after removing packing) +*many + +UCSX-TPM-002C | FCH270476WX | Location: US- +UCSX-TPM-002C | FCH26177EG0 | Location: US- +UCSX-TPM-002C | FCH270476HD | Location: US- +UCSX-TPM-002C | FCH251572R7 | Location: US- + +4x PAN-SFP-PLUS-SR +MU90S5H +MU60V2X +MU20TFU +MU211ZP + +5 x NIM-2GE-CU-SFP +FOC250624L6 +FOC250624QT +FOC24400EXW +FOC21452FDH +FOC263359EC + +1x NIB +JNP-SFP-25G-SR | S1A1M31A751BAB | Location: US- +JNP-SFP-25G-SR | S1A1M31A7517WR | Location: US- +JNP-SFP-25G-SR | S1A1M31A751BVZ | Location: US- +JNP-SFP-25G-SR | S1A1M31A751BFQ | Location: US- + +----------Note: this package is very important to be included +3x UCSX-210C-M7 from Rhino (no need to add to ERP) +https://www.ups.com/track?track=yes&trackNums=1ZX161F2P290740581 + +2x Micron 7450 Pro 3.84TB SAS SSD U.3 2.5 PCIe NVME MTFDKCC3T8TFR-1BC1ZABYY +100% 168314981745 381517404020 Thursday 28th + NVME-SSD-3.84GB 2/2 USEB 22293A26BAF6,22293A447730 + +1x Shokz OpenRun Pro 2 Mini Bluetooth Sports Headphones - Black - UD READ - +5/22 127879123161 1Z9V01F5YN90731043 Tuesday 02th +SHOKZ-HEADPHONE 1/1 USEB JNV23455443 +*1x + +2x NIM-ES2-8 NOB, then NIB (non-P version) +SFOC194350CH +SFOC24484UR9 + +Best Regards, + +Joe. + +--- + +# 1x C892FSP-K9 to DHD, LP - PO-72333 + +*Thread: 1 message(s), 2026-06-05 17:39 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C892FSP-K9 to DHD, LP - PO-72333 + +t#1ZJW78500319994614 +line 12: PID: C892FSP-K9 , VID: V02, SN: FGL173922DM +with 60W-AC-V2 +psu +DTH2022D4KZ + +Best Regards, + +Joe. + +--- + +# 1x SFP-10/25G-LR-S to Network Craze (BTV) - PO-P30665 + +*Thread: 1 message(s), 2026-06-05 17:39 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x SFP-10/25G-LR-S to Network Craze (BTV) - PO-P30665 + +t#1ZJW78500208198186 +1x SFP-10/25G-LR-S NIB +INL2926049T + +Best Regards, + +Joe. + +--- + +# 100x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272806 + +*Thread: 1 message(s), 2026-06-05 17:39 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 100x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272806 + +t#872714085922 +100x C9120AXE-B with AIR-AP-BRACKET-2 +21x +FJC27102CXY +FJC27102CSS +FJC27041KKE +FJC27081CAW +FJC27041K9U +FJC27041K89 +FJC25081ALQ +FJC27081CA3 +FJC25101JGZ +FJC25061LWW + +FJC24381DUC +FJC26291GP3 +FJC242916V4 +FJC24381DWD +FJC250618B7 +FJC25101JJW +FJC24381E5G +FJC25101JJV +FJC27102CXZ +FJC24441S1F +FJC27141WFH + +21xAIR-AP-BRACKET-2 + +Best Regards, + +Joe. + +--- + +# 1x ISR4431-VSEC/K9 to OSI Global - PO-25916 + +*Thread: 1 message(s), 2026-06-05 17:39 → 2026-06-05 17:39* + +## Message 1 — 2026-06-05 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x ISR4431-VSEC/K9 to OSI Global - PO-25916 + +t#1ZJW78500338315053 + +1x ISR4431-VSEC/K9 USED with Dual PSU + rack ear. + +PID: ISR4431/K9 , VID: V01, SN: FJC1938D0HL + +PID: PVDM4-64 , VID: V02, SN: FOC20325TWL + +PWR-4430-AC V01 + +LIT192606KN + +LIT192606UZ + +Best Regards, + +Joe. + +--- + +# 72x ---> upto 32x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272591 + +*Thread: 3 message(s), 2026-06-08 09:23 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 09:23 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 72x ---> upto 32x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272591 +- **Attachments:** BcszcdfInMdficzg.png + +hi Boss, + +the s/n below already shipped to CMS 2wks ago. +C9120AXE-B | FJC28081EXK *-> plz connect to TS if you find this* + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-08 16:01 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 72x ---> upto 32x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272591 +- **Attachments:** BcszcdfInMdficzg.png + +fedex ground just picked up already. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 72x ---> upto 32x C9120AXE-B-REF to CMS COMMUNICATIONS, INC. - PO-0272591 +- **Attachments:** BcszcdfInMdficzg.png + +t#872795599363 +up to 32x C9120AXE-B *with *mounting blank. * ship so so condition only* +14x +FJC2629226K +FJC26261MLJ +FJC271823UD +FGL2812LK6C +FJC253813PF +FJC253813N5 +FJC242817ZV +FJC242916WK +FJC270918FR +FJC262921HB +FJC26291G8Q +FJC262921KW +FJC24511N52 +FJC26261DF0 +14xmounting blank + +Best Regards, + +Joe. + +--- + +# C9120AXE Most ugly + +*Thread: 1 message(s), 2026-06-08 09:25 → 2026-06-08 09:25* + +## Message 1 — 2026-06-08 09:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Ronaldo + IP Supply +- **Subject:** Re: C9120AXE Most ugly + +FJC27141WMG + +Best Regards, + +Joe. + +--- + +# pack26061-2 + +*Thread: 1 message(s), 2026-06-08 13:25 → 2026-06-08 13:25* + +## Message 1 — 2026-06-08 13:25 +- **From:** Joe Bui +- **To:** Daniel Vu , Victor LE +- **Subject:** pack26061-2 + +plz send me the list for the package above. + +Best Regards, + +Joe. + +--- + +# 2x C9300-STACK-BLANK USED to Elevate Global IT - PO-6093 + +*Thread: 1 message(s), 2026-06-08 15:49 → 2026-06-08 15:49* + +## Message 1 — 2026-06-08 15:49 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-STACK-BLANK USED to Elevate Global IT - PO-6093 +- **Attachments:** Image_260608_154821.jpeg, Image_260608_154841.jpeg, Image_260608_154923.jpeg + +Those blanks do not fit into the c9300-48p-e. I told you before. +check out the picture attached. + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x MR36-HW 14-14726-39035 + +*Thread: 3 message(s), 2026-06-08 16:11 → 2026-06-09 17:39* + +## Message 1 — 2026-06-08 16:11 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 1x MR36-HW 14-14726-39035 + +plz check Q3AJ-49HS-7EJT + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-08 17:01 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 1x MR36-HW 14-14726-39035 +- **Attachments:** sSugikEQ0XjMgN11.png + +Noted + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x MR36-HW 14-14726-39035 + +*done. + +1x MR36-HW used condition from over 100+ MR36-HW just arrived last wk. + +Q3AJ-49HS-7EJT + +1x MA-MNT-MR-17-MR36 + +bracket + +JNV23455306 + +screw-kit + +JNV23455232 + +Best Regards, + +Joe. + +--- + +# APC2 + +*Thread: 2 message(s), 2026-06-08 16:46 → 2026-06-08 16:58* + +## Message 1 — 2026-06-08 16:46 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: APC2 + +power surged at that circuit. Are you finished with any unit on APC. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-08 16:58 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: APC2 + +Just reset, I removed the unit on TS13 + +Best Regards, + +Joe. + +--- + +# 2x PWR-C1-440WDC to OSI Global - PO-26035 + +*Thread: 1 message(s), 2026-06-08 17:32 → 2026-06-08 17:32* + +## Message 1 — 2026-06-08 17:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x PWR-C1-440WDC to OSI Global - PO-26035 + +t#1ZJW78500310136665 +2x PWR-C1-440WDC USE with DC covers. +PWR-C1-440WDC V01 +ART2210FCD6 +ART2045F6AN + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x IPO-500-EXP-MOD-DGTL-STA-30 04-14738-90912 + +*Thread: 1 message(s), 2026-06-08 17:33 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x IPO-500-EXP-MOD-DGTL-STA-30 04-14738-90912 + +*done. + +Please help to ship + +1x IPO-500-EXP-MOD-DGTL-STA-30 from JV pack just arrived +09FC19500851 + +Best Regards, + +Joe. + +--- + +# 4x C9K-PWR-930WDC-R USED Blind ship for ALLIANCE NETWORKING LLC - PO-13501 + +*Thread: 1 message(s), 2026-06-08 17:33 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x C9K-PWR-930WDC-R USED Blind ship for ALLIANCE NETWORKING LLC - PO-13501 + +t#872814251278 +4x C9K-PWR-930WDC-R USED +C9K-PWR-930WDC-R V01 +LIT23292H6V +LIT23142UVQ +LIT23142VEP +LIT23292GZ5 +4x CAB-48DC-40A-8AWG USED +JNV23455327 +JNV23455376 +JNV23455375 +JNV23455374 + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 1 message(s), 2026-06-08 17:33 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS + +t# + +All Mail +1x + +All Memory from eBay arriving recently (after removing packing) +*many + +Curvature 1ZJ22B630336122141 ; no need to add ERP (3x UCSX-ML-V5Q50G +) +FCH272977RT +FCH272270UZ +FCH272978JZ + +Micron MTFDDAV240TDS-1AW1ZABYY 240GB M.2 SATA 6Gbps 5300 PRO SSD - +168252082114 + rhinotechnology 27-14612-29455-P01 - Received + MTFDDAV240TDS 3/3 USEB 213931914B8A,213931914A5B,214131CE6FB9 + +All M.2 SSD that look like the 3 above (any capacity/size) -> next +shipment OK +*none + +PID: EM7455/EM7430 , VID: 1.0 , SN: 355813079879315 (from line 16) -> +next shipment OK + +Best Regards, + +Joe. + +--- + +# 8x ASR1001-X-PWR-DC to Whaley Communications, Inc. - PO-11876 + +*Thread: 1 message(s), 2026-06-08 17:33 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 8x ASR1001-X-PWR-DC to Whaley Communications, Inc. - PO-11876 + +t#1ZJW78500312491643 +8x ASR1001-X-PWR-DC USED DC Version. +DTN1826W0B4 +DTN2423W00N +DTN1826W0A8 +DTN2423W02W +DTN2423W03U +DTN1826W0BK +DTN2423W00R +DTN1826W08S + +Best Regards, + +Joe. + +--- + +# 1x C9200L-48P-4X-E to PIVIT GLOBAL - PO-256499 + +*Thread: 1 message(s), 2026-06-08 17:33 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9200L-48P-4X-E to PIVIT GLOBAL - PO-256499 + +t#872810044838 + +1x C9200L-48P-4X-E USED with single PSU PWR-C5-1KWAC + +full blank + rack ear. + +C9200L-48P-4X-E + +JAE254300TZ + +PWR-C5-1KWAC V02 + +ART2518D02V + +Best Regards, + +Joe. + +--- + +# Please help to ship 2x CP-840 18-14713-58108 + +*Thread: 1 message(s), 2026-06-08 17:33 → 2026-06-08 17:33* + +## Message 1 — 2026-06-08 17:33 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 2x CP-840 18-14713-58108 + +*done. + +Please help to ship +2x CP-840 with battery +TCL251100KM +TCL2511007X + +2x CP-840-BAT +VK20111200194 +VK21010862870 + +Best Regards, + +Joe. + +--- + +# Help pickup tomorrow N5K-C5596UP + +*Thread: 3 message(s), 2026-06-08 17:34 → 2026-06-09 14:31* + +## Message 1 — 2026-06-08 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Help pickup tomorrow N5K-C5596UP +- **Attachments:** 3ce1sn7F1vfez2Ti.png + +will do. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-09 14:20 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Help pickup tomorrow N5K-C5596UP +- **Attachments:** 3ce1sn7F1vfez2Ti.png + +TS17 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-09 14:31 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Help pickup tomorrow N5K-C5596UP +- **Attachments:** 3ce1sn7F1vfez2Ti.png + +The PSU are on, FAN ON, LED ok but I don't get any console either. + +Best Regards, + +Joe. + +--- + +# Help connect 5x CW9166I + +*Thread: 1 message(s), 2026-06-09 09:43 → 2026-06-09 09:43* + +## Message 1 — 2026-06-09 09:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 5x CW9166I + +TS11-16 + +Best Regards, + +Joe. + +--- + +# USB16G5 + +*Thread: 2 message(s), 2026-06-09 09:44 → 2026-06-09 13:42* + +## Message 1 — 2026-06-09 09:44 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: USB16G5 + +*done. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-09 13:42 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: USB16G5 + +*done. + +Best Regards, + +Joe. + +--- + +# LINE 12 + +*Thread: 3 message(s), 2026-06-09 09:44 → 2026-06-09 15:08* + +## Message 1 — 2026-06-09 09:44 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 12 + +*done. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-09 14:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: LINE 12 + +*done + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-09 15:08 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: LINE 12 + +*done. + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-09 10:53 → 2026-06-09 10:53* + +## Message 1 — 2026-06-09 10:53 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +*TS 1,2 C3850-NM-4-10G USEB FOC18523884,FOC185237T1 +*TS3 connected CW9162I-MR V01 +Q5AA-JNPC-SYDC +*all connected TS1-4 and TS11-16 + +Best Regards, + +Joe. + +--- + +# Help connect 1x N5K-C5596UP + +*Thread: 1 message(s), 2026-06-09 14:32 → 2026-06-09 14:32* + +## Message 1 — 2026-06-09 14:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 1x N5K-C5596UP + +connected to TS17. + +The PSU are on, FAN ON, LED ok but I don't get any console + +Best Regards, + +Joe. + +--- + +# Help connect 2x C9300-24P + +*Thread: 1 message(s), 2026-06-09 14:51 → 2026-06-09 14:51* + +## Message 1 — 2026-06-09 14:51 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 2x C9300-24P + +TS6,7 + +Best Regards, + +Joe. + +--- + +# UPS tracking 1ZC600616808095096 + +*Thread: 1 message(s), 2026-06-09 15:32 → 2026-06-09 15:32* + +## Message 1 — 2026-06-09 15:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** UPS tracking 1ZC600616808095096 + +Hi Boss + +The package above we need to pay for the COD. + +Best Regards, + +Joe. + +--- + +# all C9120AXE + +*Thread: 3 message(s), 2026-06-09 16:05 → 2026-06-09 17:07* + +## Message 1 — 2026-06-09 16:05 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Ronaldo + IP Supply +- **Subject:** Re: all C9120AXE + +Plz check the details below: +C9120AXE-B | FJC27081CEH | Location: US- Old SN: FGL2813L5U2 *already +shipped to OSI + +C9120AXE-B | FJC27141WLU | Location: US- Old SN: FJC27311GZK ** connected +to TS7 + +C9120AXE-B | FJC27081CEG | Location: US- Old SN: FJC26291ZV3 * done, just +need new labels. +C9120AXE-B | FJC2629225Y |*done, and ready to ship. +C9120AXE-B | FJC262921J0 | *done, and ready to ship. +C9120AXE-B | FJC26261DFS | *done, and ready to ship. + +or any other C9120AXE +**Do you want to connect the NOB too? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-09 16:12 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Ronaldo + IP Supply +- **Subject:** Re: all C9120AXE + +no, PO-24571 that PO. was couple months ago. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-09 17:07 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: all C9120AXE + +I don't see it here + +Best Regards, + +Joe. + +--- + +# CP-840-BAT NOB/used + +*Thread: 2 message(s), 2026-06-09 17:09 → 2026-06-09 17:38* + +## Message 1 — 2026-06-09 17:09 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: CP-840-BAT NOB/used + +We don't have any here + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-09 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: CP-840-BAT NOB/used CP-800-USBCH +- **Attachments:** Image_260609_171751.jpeg, Image_260609_171732.jpeg + +picture attached. + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x MA-MNT-MR-17-MR36 02-14762-32221 + +*Thread: 1 message(s), 2026-06-09 17:38 → 2026-06-09 17:38* + +## Message 1 — 2026-06-09 17:38 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x MA-MNT-MR-17-MR36 02-14762-32221 + +*done. + +Please help to ship + +1x MA-MNT-MR-17-MR36* (NIB)* + +*CCA45679958* + +Best Regards, + +Joe. + +--- + +# 2x C9300-24P-E Blind ship for Techills LLC - PO-36836 + +*Thread: 1 message(s), 2026-06-09 17:38 → 2026-06-09 17:38* + +## Message 1 — 2026-06-09 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-24P-E Blind ship for Techills LLC - PO-36836 + +2x C9300-24P-E with single PSU PWR-C1-715WAC-P + +And NM blank , rack ear. + +*PID: C9300-24P , VID: V03 , SN: FOC2432L2Y7 Line 8* + +*PID: C9300-24P , VID: V02 , SN: FCW2303DHNT Line 7* + +*PWR-C1-715WAC-P V01* + +*DCC2322C9VN* + +*DCC2326C1G4* + +*FAN-T2 V01* + +*NID2410W0EUW* + +*NID2425W1DUP* + +*NID2325W096U* + +*NID2434W0FTX* + +*NID2410W0FJW* + +*DCH2614RD47* + +Best Regards, + +Joe. + +--- + +# 1x NCS-5501 to Alturna Networks NV - PO-3029066 + +*Thread: 1 message(s), 2026-06-09 17:38 → 2026-06-09 17:38* + +## Message 1 — 2026-06-09 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x NCS-5501 to Alturna Networks NV - PO-3029066 + +t#1ZJW78500421598260 +1x NCS-5501 +PID: NCS-5501 , VID: V01 , SN: FOC2240R0AT | RESULT: PASS +PID: NCS-1100W-ACFW , VID: V01 , SN: POG22138QA8 +PID: NCS-1100W-ACFW , VID: V01 , SN: POG22138Q4A +with fan + rack ears. +NCS-1RU-FAN-FW V01 +fox2240p4lk +fox2240p4ld + +Best Regards, + +Joe. + +--- + +# 2x CP-840-BUN-K9 to Curvature LLC - PO-1359761-C + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x CP-840-BUN-K9 to Curvature LLC - PO-1359761-C + +t#381920793553 + +2x CP-840-BUN-K9 NOB , with 2x CP-840-BAT + +TCL2831014P + +TCL2831013M + + CP-840-BAT + +VK24061167091 + +VK24061167651 + +2x CP-800-USBCH NOB + +BCAA0003455 + +BCAA0003454 + +Best Regards, + +Joe. + +--- + +# 2x C9300-NM-2Y to PICS Telecom International Corp - POUS021998 + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-NM-2Y to PICS Telecom International Corp - POUS021998 + +t#1ZJW78501219294694 +2x C9300-NM-2Y +FVH27311HXT +FVH271412E4 + +Best Regards, + +Joe. + +--- + +# 12x MA-MNT-MR-17 to Network Craze (BTV) - PO-P30763 + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 12x MA-MNT-MR-17 to Network Craze (BTV) - PO-P30763 + +t#1ZJW78500212235289 +12x MA-MNT-MR-17 USED +bracket +JNV23455305 +JNV23455307 +JNV23455309 +JNV23455311 +JNV23455313 +JNV23455315 +JNV23455317 +JNV23455319 +JNV23455321 +JNV23455323 +JNV23455308 +JNV23455310 +screw-kit +JNV23455248 +JNV23455242 +JNV23455246 +JNV23455238 +JNV23455244 +JNV23455231 +JNV23455229 +JNV23455240 +JNV23455235 +JNV23455033 +JNV23455006 +JNV23455004 + +Best Regards, + +Joe. + +--- + +# 17x GLC-BX-U to DHD, LP - PO-72125 + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 17x GLC-BX-U to DHD, LP - PO-72125 + +t#1ZJW78500303941272 + +22x GLC-BX-U NIB + +ACW260317J1 +ACW253814ZC +ACW22420VHX +ACW22360JX5 +ACW22280L75 +ACW25300BBS +ACW260317HU +ACW25300BC6 +ACW260317HP +ACW25300BBL +ACW260317HR +ACW254116WP +ACW260317HL +ACW253814Z8 +ACW260317HM +ACW253814ZK +ACW260317HK +* SACW223704XE* +*SACW222004N6* +*SACW22320433* +*SNDG21330838* +*SNDG21316271* + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x C9136I-ROW 17-14713-99371 + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x C9136I-ROW 17-14713-99371 + +*done. + +1x C9136I-ROW: FGL2702LXZV + +Using attached label + +Best Regards, + +Joe. + +--- + +# 1x C9K-T1-FANTRAY Blind ship for CentricsIT, LLC - PO-PPO161840 + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9K-T1-FANTRAY Blind ship for CentricsIT, LLC - PO-PPO161840 + +t#872868140028 +1x C9K-T1-FANTRAY USED +C9K-T1-FANTRAY V01 +ACI240502AL + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x VIC3-4FXS/DID 05-14746-55384 + +*Thread: 1 message(s), 2026-06-09 17:39 → 2026-06-09 17:39* + +## Message 1 — 2026-06-09 17:39 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x VIC3-4FXS/DID 05-14746-55384 + +*done. + +Please help to ship + +1x VIC3-4FXS/DID + +Using attached label + +FOC14317P5Z + +Best Regards, + +Joe. + +--- + +# LABEL + +*Thread: 2 message(s), 2026-06-10 09:31 → 2026-06-10 13:39* + +## Message 1 — 2026-06-10 09:31 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL +- **Attachments:** Image_260610_093103.jpeg, Image_260610_093118.jpeg, Image_260610_093131.jpeg + +labels are off. check out the pictures attached. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-10 13:39 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL +- **Attachments:** Image_260610_093103.jpeg, Image_260610_093118.jpeg, Image_260610_093131.jpeg + +yes, those labels need to move to the left just a little. + +Best Regards, + +Joe. + +--- + +# IPU + +*Thread: 1 message(s), 2026-06-10 10:44 → 2026-06-10 10:44* + +## Message 1 — 2026-06-10 10:44 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: IPU + +Details below: + +TS1 +C3850-NM-4-10G USEB FOC18523884,FOC185237T1 +TS2 +C3850-NM-4-10G USEB FOC18523884,FOC185237T1 +line 3: + Meraki : A Joe cho e PID, SN voi a +CW9162I-MR V01 Q5AA-JNPC-SYDC +TS4 +C9200CX-12P-2X2G +TS5 +iE-3300-8T2S-E USEB FCW2538YNGA +TS6 +N9K-C93180YC-EX USEB FDO21482ECD + +TS11, +ISR4331 to test 2x NIM-2GE-CU. *I think the modules were bad. +TS12 +N9K-C93180YC-EX FDO2252023P +TS13 +EX3400-24P NW3619150623 +TS14 +EX3400-24P NW0221080057 + +Best Regards, + +Joe. + +--- + +# LABEL CW9166I-MR + +*Thread: 3 message(s), 2026-06-11 09:17 → 2026-06-11 13:43* + +## Message 1 — 2026-06-11 09:17 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL CW9166I-MR +- **Attachments:** Image_260611_091727.jpeg + +still little off. check out the picture attached. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-11 13:12 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL CW9166I-MR +- **Attachments:** Image_260611_091727.jpeg + +ok roi. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-11 13:43 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL CW9166I-MR +- **Attachments:** Image_260611_091727.jpeg + +only 2 labels below are good and ready to use. I need labels for other s/n +WNH27181CK9 +WNH272727QY + +Best Regards, + +Joe. + +--- + +# N5K-C5596UP + +*Thread: 5 message(s), 2026-06-11 09:19 → 2026-06-12 15:25* + +## Message 1 — 2026-06-11 09:19 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: N5K-C5596UP + +will do. +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-12 13:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: N5K-C5596UP + +will do + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-12 14:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: N5K-C5596UP + +1 unit just arrived connected to TS18 + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-12 15:06 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: N5K-C5596UP + +The units on APC kept caused the power to turn off + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-12 15:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: N5K-C5596UP + +2 units already connected to TS12,22 + +Best Regards, + +Joe. + +--- + +# Help connect 2x ISR4321 + +*Thread: 1 message(s), 2026-06-11 09:19 → 2026-06-11 09:19* + +## Message 1 — 2026-06-11 09:19 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** ronaldo@ipsupply.com.au +- **Subject:** Re: Help connect 2x ISR4321 + +TS11,12 + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 2 message(s), 2026-06-11 11:18 → 2026-06-11 17:09* + +## Message 1 — 2026-06-11 11:18 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Daniel Vu , Victor LE +- **Subject:** Re: Done and help connect + +Details below: + +TS 1, C3850-NM-4-10G USEB FOC18523884 + +TS2x, C9200CX-12P-2X2G USEB FJC28311W14 + +TS3, C8300-1N1S-4T2X + +TS4, C8300-1N1S-4T2X + +TS5, C8300-1N1S-4T2X USEC FLM290610K4 + +line 6: PID: N9K-C93180YC-EX , VID: V02 , SN: FDO21482ECD DPEL 47x SFP OK + +6 QSFP OK, port 37 khong co SFP, A Joe swap giup e + +TS11, ISR4321 + +Ts12, ISR4321 + +TS13, ISR4331 to test 2x NIM-2GE-CU. *I think the modules were bad. + +TS14, C9500-40X-A USEB FJC254223DA + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-11 17:09 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Done and help connect + +*done. + +Best Regards, + +Joe. + +--- + +# 3x CW9166I-MR to OSI Global - PO-26130 + +*Thread: 2 message(s), 2026-06-11 15:11 → 2026-06-11 17:38* + +## Message 1 — 2026-06-11 15:11 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x CW9166I-MR to OSI Global - PO-26130 +- **Attachments:** Image_260611_151046.jpeg, Image_260611_151108.jpeg, Image_260611_151039.jpeg, Image_260611_151027.jpeg, Image_260611_151053.jpeg + +pictures attached.\ +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-11 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x CW9166I-MR to OSI Global - PO-26130 + +t#1ZJW78500339659109 +3x CW9166I-MR USED +CW9166I-MR V04 +WNH27251NKD +WNH27132J0E +WNH272727QY + +Best Regards, + +Joe. + +--- + +# MEM-2900-512MB + +*Thread: 4 message(s), 2026-06-11 16:42 → 2026-06-11 17:37* + +## Message 1 — 2026-06-11 16:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: MEM-2900-512MB + +Ok, I will check. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-11 17:11 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: MEM-2900-512MB + +details below: +CISCO2901/K9 | FGL193321G2 | Location: US-JV.7.3.A +*no DRAM inside + +CISCO2951-SEC/K9 | FGL174311KP | Location: US-JV.7.7.A +*no DRAM inside + +CISCO2951-V/K9 | FHK1447F0LF | Location: US-JV.6.2.B +*2x 512MB inside + +C2951-CME-SRST/K9 | FHK1441F35K | Location: US-JV.6.1.A +*2x 2GB inside + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-11 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: MEM-2900-512MB + +TS12 + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-11 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: MEM-2900-512MB + +will do. + +Best Regards, + +Joe. + +--- + +# 5x FAN-T2 to P3 Systems Inc. - PO-16613 + +*Thread: 5 message(s), 2026-06-11 17:37 → 2026-06-19 17:44* + +## Message 1 — 2026-06-11 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x FAN-T2 to P3 Systems Inc. - PO-16613 + +t#872972336758 +5x FAN-T2 USED +DCZ26421AV1 +NID2547W0G8T +DCZ26450DDB +NID2325W096X +DCZ2803075E + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-17 17:13 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x FAN-T2 to P3 Systems Inc. - PO-16613 + +hi Boss, + +I don't see any box left here. I don't know what happened with the fedex +tracking + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-18 17:18 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x FAN-T2 to P3 Systems Inc. - PO-16613 + +too late to ship today + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-18 17:29 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x FAN-T2 to P3 Systems Inc. - PO-16613 + +t#873284420010 *pick up tomorrow. + +5x FAN-T2 USED +NID2322W0YG1 +NID2322W0X6Z +NID2322W0X70 +NID2321W0J16 +NID2322W0X6V + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x FAN-T2 to P3 Systems Inc. - PO-16613 + +updated 1 s/n + +t#873284420010 *pick up tomorrow. + +5x FAN-T2 USED +NID2322W0YG1 +NID2322W0X6Z +NID2321W0J16 +NID2322W0X6V + +NID2543W12ZR + +Best Regards, + +Joe. + +--- + +# 1x IE-3300-8T2S-E to LSI - PO189062 + +*Thread: 1 message(s), 2026-06-11 17:38 → 2026-06-11 17:38* + +## Message 1 — 2026-06-11 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x IE-3300-8T2S-E to LSI - PO189062 +- **Attachments:** Image_260611_152148.jpeg + +T#872974553634 +1x IE-3300-8T2S-E* with dual DC plug* +*plz select the best unit among:* +IE-3300-8T2S-E | FCW2538YNGA | Location: US- +picture attached. + +Best Regards, + +Joe. + +--- + +# 2x C9300-NM-8X to DHD, LP - PO-72397 + +*Thread: 1 message(s), 2026-06-11 17:38 → 2026-06-11 17:38* + +## Message 1 — 2026-06-11 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-NM-8X to DHD, LP - PO-72397 + +t#1ZJW78500305025320 +2x C9300-NM-8X USED +FOC21351W2T +FOC22311G6R + +Best Regards, + +Joe. + +--- + +# 1x ISR4321-AX/K9 to OSI Global - PO-26102 + +*Thread: 1 message(s), 2026-06-11 17:38 → 2026-06-11 17:38* + +## Message 1 — 2026-06-11 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x ISR4321-AX/K9 to OSI Global - PO-26102 + +t#1ZJW78500329476692 + +1x ISR4321-AX/K9 USED with PSU + +SN among: + +PID: ISR4321/K9 , VID: V04, SN: FLM2235W0XR + +Psu + +PST22398CLI + +Best Regards, + +Joe. + +--- + +# 12x C9300-NM-8X to OSI Global - PO-26122 + +*Thread: 1 message(s), 2026-06-11 17:39 → 2026-06-11 17:39* + +## Message 1 — 2026-06-11 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 12x C9300-NM-8X to OSI Global - PO-26122 + +t#1ZJW78500313613714 +12x C9300-NM-8X USED +FOC241359GB +FJZ2519DM8M +FJZ25192EFE +FOC22363USG +FJZ262617SE +FOC25201VKC +FOC25201W04 +FOC25201VE1 +FOC23325Q9G +FOC25212688 +FOC233148RN +FOC2521268E + +Best Regards, + +Joe. + +--- + +# 2x C9200CX-12P-2X2G-E to CXtec - PO-D1239684 + +*Thread: 1 message(s), 2026-06-11 17:39 → 2026-06-11 17:39* + +## Message 1 — 2026-06-11 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9200CX-12P-2X2G-E to CXtec - PO-D1239684 + +t#1ZJW78501218435506 +2x C9200CX-12P-2X2G-E USED +FJC28311VYA +FJC28281TSG + +Best Regards, + +Joe. + +--- + +# 30x GLC-LH-SMD to Curvature LLC - PO-1361175-I + +*Thread: 1 message(s), 2026-06-11 17:39 → 2026-06-11 17:39* + +## Message 1 — 2026-06-11 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 30x GLC-LH-SMD to Curvature LLC - PO-1361175-I + +t#381970115329 +30x GLC-LH-SMD NIB +SAVJ205030ZH +SAVJ205030G6 +SAVJ205030J5 +SAVJ205030ZF +SAVJ205030JC +SAVJ205030JB +SAVJ205030S2 +SAVJ205030ZZ +SAVJ205030S6 +SAVJ19523TYX + +SAVJ205030HN +SAVJ205030ZX +SAVJ205030Z5 +SAVJ205237CE +SAVJ21093372 +SAVJ19523187 +SAVJ1952318U +SAVJ1952319G +SAVJ19523W6F +SAVJ2018345P + +SAVJ1952325Z +SAVJ1952317W +SAVJ19523174 +SAVJ212830YC +SAVJ205030G1 +SAVJ205030H6 +SAVJ205030LX +SFNS17290RWE +SFNS17290RVC +SFNS17290KG0 + +Best Regards, + +Joe. + +--- + +# 20x PWR-C1-715WAC-P to Curvature LLC - PO-1360734-I + +*Thread: 1 message(s), 2026-06-11 17:39 → 2026-06-11 17:39* + +## Message 1 — 2026-06-11 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 20x PWR-C1-715WAC-P to Curvature LLC - PO-1360734-I + +t#381939491149 +20x PWR-C1-715WAC-P USED +LIT2732C7SJ +LIT2724CTA3 +LIT2724CT2Q +LIT2724CTDQ +LIT2724CTMN +LIT2736A692 +LIT2736A6LG +LIT2724CTSH +LIT2736A69F +LIT2736A6WK +DCC2503CGS5 +DCC2322CA43 +DCC2322CA2N +ART2250P7J0 +DCC2322C9VT +ART2302P40J +DCC2709C15T +DCC2326C947 +DCC2326C1G2 +ART2252PEMA + +Best Regards, + +Joe. + +--- + +# 2x N540-PWR400-A to Choice IT Global LLC - PO-9963 + +*Thread: 1 message(s), 2026-06-11 17:39 → 2026-06-11 17:39* + +## Message 1 — 2026-06-11 17:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x N540-PWR400-A to Choice IT Global LLC - PO-9963 + +t#872971860863 +2x N540-PWR400-A +N540-PWR400-A V02 +LIT2833A9PW +LIT2633A3FW + +Best Regards, + +Joe. + +--- + +# 9x N540-PWR400-A + +*Thread: 2 message(s), 2026-06-11 17:41 → 2026-06-12 17:27* + +## Message 1 — 2026-06-11 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor +- **Subject:** Re: 9x N540-PWR400-A + +Will do + +Best regards, + +Joe + +--- +## Message 2 — 2026-06-12 17:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor +- **Subject:** Re: 9x N540-PWR400-A + +*done. + +Best Regards, + +Joe. + +--- + +# Help connect 2x DS-C9132T-K9 + +*Thread: 2 message(s), 2026-06-12 09:18 → 2026-06-12 14:08* + +## Message 1 — 2026-06-12 09:18 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 2x DS-C9132T-K9 + +Connected TS11-17 + +2x DS-C9132T-K9 + +JPG242700E5 +JPG2504003L + +5x CW9166I-B + +Best regards, + +Joe + +--- +## Message 2 — 2026-06-12 14:08 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Help connect 2x DS-C9132T-K9 + +Ts11,12 + +Best Regards, + +Joe. + +--- + +# Faulty + +*Thread: 1 message(s), 2026-06-12 10:17 → 2026-06-12 10:17* + +## Message 1 — 2026-06-12 10:17 +- **From:** Joe Bui +- **To:** Daniel Vu , Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Faulty + +The units below were bad. +NIM-2GE-CU-SFP V03 +FOC23503PHV +FOC24331W30 + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-12 10:44 → 2026-06-12 10:44* + +## Message 1 — 2026-06-12 10:44 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Victor LE , Daniel Vu +- **Subject:** Re: Done and help connect + +The units below connected. +*TS1-4 +C8300-1N1S-6T + +*TS11 +DS-C9132T-K9 +TS12 +DS-C9132T-K9 + +*TS13-TS17 + 5x CW9166I-B + +*TS21 +C8300-1N1S-6T + +*TS22 +C8300-1N1S-6T + +Best Regards, + +Joe. + +--- + +# IPS + +*Thread: 1 message(s), 2026-06-12 13:00 → 2026-06-12 13:00* + +## Message 1 — 2026-06-12 13:00 +- **From:** Joe Bui +- **To:** Daniel Vu , Frank IP Supply +- **Subject:** Re: IPS + +Hi Boss, + +Can you double check the IPS system? When I try to enter the new items into +the system it pops up another window then I have to click back to the +incoming packages window and click add manually for each s/n. I sent the +video to the TEAM. Plz check it out and let me know. + +Best Regards, + +Joe. + +--- + +# IPU + +*Thread: 1 message(s), 2026-06-12 13:26 → 2026-06-12 13:26* + +## Message 1 — 2026-06-12 13:26 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Victor LE , Kay +- **Subject:** Re: IPU + +2 units connected to TS1,2 + +Best Regards, + +Joe. + +--- + +# MS120-8LP-HW + +*Thread: 1 message(s), 2026-06-12 14:08 → 2026-06-12 14:08* + +## Message 1 — 2026-06-12 14:08 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: MS120-8LP-HW + +yes, just updated + +Best Regards, + +Joe. + +--- + +# 1x CW9162I-MR, 1x AIR-AP-BRACKET-1, 1x AIR-AP-T-RAIL-R to OSI Global - PO-26157 + +*Thread: 2 message(s), 2026-06-12 14:47 → 2026-06-12 17:25* + +## Message 1 — 2026-06-12 14:47 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x CW9162I-MR, 1x AIR-AP-BRACKET-1, 1x AIR-AP-T-RAIL-R to OSI Global - PO-26157 + +i don't see that s/n here 1x CW9162I-MR SN: Q5AA-THTJ-XV6Y + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-12 17:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x CW9162I-MR, 1x AIR-AP-BRACKET-1, 1x AIR-AP-T-RAIL-R to OSI Global - PO-26157 + +T#1ZJW78500329611133 +1x CW9162I-MR SN: Q5AA-JNPC-SYDC + +1x AIR-AP-BRACKET-1 + +1x AIR-AP-T-RAIL-R + +Best Regards, + +Joe. + +--- + +# 11x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 + +*Thread: 3 message(s), 2026-06-12 15:26 → 2026-06-12 17:25* + +## Message 1 — 2026-06-12 15:26 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 11x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 + +I just changed the correct printer paper. plz reprint all the labels. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-12 16:03 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: 11x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 +- **Attachments:** Image_260612_160256.jpeg, Image_260612_160318.jpeg, Image_260612_160340.jpeg + +pictures attached. let me know ASAP + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-12 17:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 11x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 + +t#873024723380 +11x JNP-FAN-1RU USED +SBCFX3636 +SBCFX3638 +SBCFX3629 +SBCFX3637 +SBCFX3631 +SBCFX3633 +SBCFX3626 +SBCFX3630 +SBCFX3628 +SBCFX3627 +SBCFX3639 + +old s/n +WF0219192142 +WF0219411210 +WF0219411202 +WF0219192246 +WF0219411131 +WF0219191495 +WF0219191180 +WF0219192181 +WF0219191485 +WF0219340423 +WF0219040964 + +Best Regards, + +Joe. + +--- + +# APC2 + +*Thread: 1 message(s), 2026-06-12 16:07 → 2026-06-12 16:07* + +## Message 1 — 2026-06-12 16:07 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: APC2 + +*Done + +Best Regards, + +Joe. + +--- + +# Testing: SSD-SATA-960G + +*Thread: 1 message(s), 2026-06-12 16:09 → 2026-06-12 16:09* + +## Message 1 — 2026-06-12 16:09 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Testing: SSD-SATA-960G + +ah sorry Boss, +They were already on the shipment ship to AUS already. + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x AIR-ACC1530-PMK1 23-14741-66101 + +*Thread: 4 message(s), 2026-06-12 16:25 → 2026-06-15 17:42* + +## Message 1 — 2026-06-12 16:25 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x AIR-ACC1530-PMK1 23-14741-66101 + +ship to whom? too late to drop off fedex express. do you want to ship UPS? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-12 16:50 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor | IPS +- **Subject:** Re: Please help to ship 1x AIR-ACC1530-PMK1 23-14741-66101 + +Ok, + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-15 15:58 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor | IPS +- **Subject:** Re: Please help to ship 1x AIR-ACC1530-PMK1 23-14741-66101 + +Will do. +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x AIR-ACC1530-PMK1 23-14741-66101 + +t#873093646356 + +Please help to ship + +1x AIR-ACC1530-PMK1 among : JNV23453733 + +Best Regards, + +Joe. + +--- + +# LINE 22 + +*Thread: 1 message(s), 2026-06-12 17:23 → 2026-06-12 17:23* + +## Message 1 — 2026-06-12 17:23 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 22 + +*done. + +Best Regards, + +Joe. + +--- + +# 2x 9300L-48P-4G to Optimum Data, Inc. - PO148044 + +*Thread: 1 message(s), 2026-06-12 17:25 → 2026-06-12 17:25* + +## Message 1 — 2026-06-12 17:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x 9300L-48P-4G to Optimum Data, Inc. - PO148044 + +T#873023423180 +2x C9300L-48P-4G faceplate only +jnv23454010 +jnv23454014 + +Best Regards, + +Joe. + +--- + +# 2x PAN-SFP-PLUS-SR to Curvature LLC - PO-1361282-C + +*Thread: 1 message(s), 2026-06-12 17:25 → 2026-06-12 17:25* + +## Message 1 — 2026-06-12 17:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x PAN-SFP-PLUS-SR to Curvature LLC - PO-1361282-C + +t#381995817390 +2x PAN-SFP-PLUS-SR +AS21M9F +MUJ1XLG +Best Regards, + +Joe. + +--- + +# 1x DS-C9132T-K9 to PIVIT GLOBAL - PO-256275 + +*Thread: 1 message(s), 2026-06-12 17:26 → 2026-06-12 17:26* + +## Message 1 — 2026-06-12 17:26 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x DS-C9132T-K9 to PIVIT GLOBAL - PO-256275 +- **Attachments:** l0o0ig8QnMCGO0f4.png + +t#873022693197 + +1x DS-C9132T-K9 with with Dual PSU DS-CAC-650W-E and FANs DS-C32T-FAN-E + +rack ear. + + PID: DS-C9132T-K9 , VID: V01 , SN: JPG242700E5 + +DS-CAC-650W-E V02 + +ART2343F4DR + +ART2428F2FS + +DS-C32S-FAN-E V01 + +DCH2450R9W5 + +DCH2450R9VX + +DCH2425RWR8 + +DCH2425RWQ9 + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 1 message(s), 2026-06-12 17:27 → 2026-06-12 17:27* + +## Message 1 — 2026-06-12 17:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS + +t#1ZJW78500423326317 +All Mail +4x + +All Memory from eBay arriving recently (after removing packing) +*many + +2x PWR-80W-AC +DAB192754P8 +DAB194450WP + +1x Cisco CMPCT-DIN-MNT Mounting Kit Cisco 3560CX 2960CX Compact Switch ( +BR) 236100720567 9405508106244219565181 Friday 12 +JNV23455437 + +1x Cisco Meraki MS120-8LP 8-Port PoE GbE Switch Power Cord/Brick Included +Unclaimed 298326592495 9434608106244203522205 Friday 12 +Q2BX-YLYW-556A +psu +HSQD76M73B1 + +1x Cisco STACK-T4-50CM (1.5ft) Stacking Cable for 9200 Switches NEW + 116304181632 9400108106245247493979 Thursday 11th + STACK-T4-50CM 1/1 USEB LCC2920G58F + +1x Micron 5300 Boot 240GB M.2 SATA SSD Enterprise Server Drive +MTFDDAV240TDU IBM 257436088222 9400136106196443745429 Thursday 11th + SATA-SSD-240GB 1/1 USEB 11S00VN646Y0M127A83181 + +1x Intel Xeon Gold 6342 24-Core 2.80 GHz CPU / SRKXA (PS-129) 389980380718 +381818037069 Thursday 11th +2x Intel Xeon Gold 6342 SRKXA 2.80GHz 24-Core 36MB LGA4189 230W CPU +Processor 168410785207 381841800256 Monday 08th +XEON-6342 | 2A2109BF5F0F8383RKXA | Location: US- +XEON-6342 | 2A2134BF51728CD8RKXA | Location: US- +XEON-6342 | 2A226ABF4F28BBEARKXA | Location: US- +XEON-6342 | 2A2076BC995F5353RKXA | Location: US- +XEON-6342 | 3A4819C0FC3F792ARKXA | Location: US- +XEON-6342 | 3A481A1EB9C113CFRKXA | Location: US- + +line 14: PID: C9500-40X , VID: V02 , SN: FJC254223DA DPEL 40x SFP OK + PID: PWR-C4-950WAC-R , VID: V01 , SN: DCI2504M35A + PID: PWR-C4-950WAC-R , VID: V01 , SN: DCI2536M3VC +fan +DCH2526Y0LH +DCH2526Y0LM +DCH2526Y0LN +DCH2526Y0LK +DCH2526Y0LR + +Best Regards, + +Joe. + +--- + +# 4x C892FSP-K9 to DHD, LP - PO-72376 + +*Thread: 1 message(s), 2026-06-12 17:27 → 2026-06-12 17:27* + +## Message 1 — 2026-06-12 17:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x C892FSP-K9 to DHD, LP - PO-72376 + +t#1ZJW78500318706338 +4x C892FSP-K9 with 60W-AC-V2 +FGL17392360 +FGL1740222S +FGL1740224X +FGL1740224E +PWR-60W-AC-V2 +DTH2022D4L2 +DTH2022D4QA +DTH2022D4SH +DTH2022D4M3 + +Best Regards, + +Joe. + +--- + +# 2x C8300-1N1S-6T USEC + +*Thread: 2 message(s), 2026-06-15 09:08 → 2026-06-15 10:53* + +## Message 1 — 2026-06-15 09:08 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C8300-1N1S-6T USEC + +Ok, I will check it out and let you know. + +Best regards, + +Joe + +--- +## Message 2 — 2026-06-15 10:53 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C8300-1N1S-6T USEC + +hi Boss, + +Plz check the details below: + +C8300-1N1S-6T | FLM290910DT +*I fixed the chassis and unbend corner. but the RFID module was broken, and +can't be fix. + +C8300-1N1S-6T | FLM280510M6 +* I can't fix it. will not look good even after I fix it. The RFID module +was broken, and can't be fix. + +Best Regards, + +Joe. + +--- + +# **Update** US Receiving | retail_outlet_direct | EBAY: 12-14747-30779 | 13/06/2026 | partially received + +*Thread: 1 message(s), 2026-06-15 09:38 → 2026-06-15 09:38* + +## Message 1 — 2026-06-15 09:38 +- **From:** Joe Bui +- **To:** QC | IPS +- **Cc:** Daniel Vu , Kay , Ronaldo + IP Supply +- **Subject:** Re: **Update** US Receiving | retail_outlet_direct | EBAY: 12-14747-30779 | 13/06/2026 | partially received + +TS23,24 + +Best Regards, + +Joe. + +--- + +# 5x C8300-1N1S-6T to PICS Telecom International Ltd. - POUK014158 +PO14198 + +*Thread: 4 message(s), 2026-06-15 10:16 → 2026-06-16 17:41* + +## Message 1 — 2026-06-15 10:16 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x C8300-1N1S-6T to PICS Telecom International Ltd. - POUK014158 +PO14198 + +hi Boss, + +Are you done with the ones on the TS? plz let me know so i can connect more +c8300 to test. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-15 15:23 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x C8300-1N1S-6T to PICS Telecom International Ltd. - POUK014158 +PO14198 + +They will go out tomorrow. too late to book for the pick up. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-15 15:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x C8300-1N1S-6T to PICS Telecom International Ltd. - POUK014158 +PO14198 + +2 more units connected to TS21,22 + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 5x C8300-1N1S-6T to PICS Telecom International Ltd. - POUK014158 +PO14198 + +t#6557395235 +5x C8300-1N1S-6T USED with Dual PSU* PWR-CC1-250WAC * and full blank + +rack ear. +FLM27161325 +FLM280411TT +FLM2508115B +FLM26031027 +FLM284510NN +PWR-CC1-250WAC V01 +LIT2627AYQP +LIT2537AWA5 +LIT2633A4Z9 +LIT2633A5CK +LIT24303K7W +LIT2633A4J9 +LIT2541CP77 +LIT2541CQPG +LIT2633A9WZ +LIT24303KP9 + +Best Regards, + +Joe. + +--- + +# Help connect 1x C9124AXI + +*Thread: 1 message(s), 2026-06-15 12:31 → 2026-06-15 12:31* + +## Message 1 — 2026-06-15 12:31 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 1x C9124AXI + +i don't see any here. I think the unit show in the system was shipped to +Curvature PO1351383-C . + +FJC280616XD mixed with the FJC28 (4) 616XD + +Best Regards, + +Joe. + +--- + +# Prepare Upto 40x WS-C3750X-48P-S + +*Thread: 5 message(s), 2026-06-15 12:32 → 2026-06-15 15:45* + +## Message 1 — 2026-06-15 12:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Prepare Upto 40x WS-C3750X-48P-S + +What model of the PSU? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-15 13:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Prepare Upto 40x WS-C3750X-48P-S + +hi Boss, + +Who are you selling those switches to? Because most of them were bad. I can +wrap out some faceplates but we only have some spare parts left. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-15 15:05 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Prepare Upto 40x WS-C3750X-48P-S + +I can get wrap parts and get about 15 units ok to ship. FYI most of them +have many scratches on top. + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-15 15:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Prepare Upto 40x WS-C3750X-48P-S + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-15 15:45 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Prepare Upto 40x WS-C3750X-48P-S + +We will ship them in boxes. 2 per box. 24x24x8 42 lbs per box. + +Best Regards, + +Joe. + +--- + +# LABEL C9130AXI-K + +*Thread: 2 message(s), 2026-06-15 14:21 → 2026-06-15 14:25* + +## Message 1 — 2026-06-15 14:21 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL C9130AXI-K +- **Attachments:** Image_260615_142109.jpeg + +you need to move the font down just a little. check out the picture +attached. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-15 14:25 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL C9130AXI-K +- **Attachments:** Image_260615_142109.jpeg + +ok roi + +Best Regards, + +Joe. + +--- + +# Plz advise PID/SN of units connected + +*Thread: 1 message(s), 2026-06-15 15:46 → 2026-06-15 15:46* + +## Message 1 — 2026-06-15 15:46 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Plz advise PID/SN of units connected + +those lines were empty + +Best Regards, + +Joe. + +--- + +# PID: DS-C9132T-K9 , VID: V01 , SN: JPG2504003L + +*Thread: 1 message(s), 2026-06-15 15:47 → 2026-06-15 15:47* + +## Message 1 — 2026-06-15 15:47 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: PID: DS-C9132T-K9 , VID: V01 , SN: JPG2504003L + +TS11 + +Best Regards, + +Joe. + +--- + +# Please help to ship 2x C9130AXI-K (NIB) PP Invoice 151709 + +*Thread: 4 message(s), 2026-06-15 15:58 → 2026-06-17 17:38* + +## Message 1 — 2026-06-15 15:58 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay , Ronaldo + IP Supply , Victor | IPS +- **Subject:** Re: Please help to ship 2x C9130AXI-K (NIB) PP Invoice 151709 + +I got it. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 2x C9130AXI-K (NIB) PP Invoice 151709 + +*done. + +Please help to ship + +2x C9130AXI-K (*NIB*): + +line 23: PID: C9130AXI-K , VID: V02 , SN: KWC25280F99 MAC: +84:F1:47:92:2F:88 | RESULT: PASS with WLC Old SN: FJC263315NE + +line 24: PID: C9130AXI-K , VID: V02 , SN: KWC25280F98 MAC: +F0:1D:2D:4C:31:F8 | RESULT: PASS with WLC Old SN: FJC26261PFN + +Label ready on printer + +Using attached label + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-16 09:35 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 2x C9130AXI-K (NIB) PP Invoice 151709 + +hi Boss, + +Sorry Boss, yesterday we shipped them in used condition. + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 2x C9130AXI-K (NIB) PP Invoice 151709 + +*done. + +Please help to ship + +2x C9130AXI-K (NIB): + +line 11: PID: C9130AXI-K , VID: V03 , SN: KWC25280FO6 MAC: +B8:11:4B:F0:1A:B4 | RESULT: PASS with WLC Old SN: FJC264210N0 + +line 12: PID: C9130AXI-K , VID: V03 , SN: KWC25280FIZ MAC: +00:DF:1D:A0:62:A4 | RESULT: PASS with WLC Old SN: FJC27051ALP + +Best Regards, + +Joe. + +On Tue, Jun 16, 2026 at 10:46 PM Victor | IPS +wrote: + +--- + +# Help connect 1x C9300-24P + +*Thread: 4 message(s), 2026-06-15 16:03 → 2026-06-16 09:17* + +## Message 1 — 2026-06-15 16:03 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 1x C9300-24P + +TS5 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-15 16:52 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Help connect 1x C9300-24P + +TS6 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-15 17:28 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Help connect 1x C9300-24P + +*line 5 bi loi, A cho e xin SN voi a* +*C9300-24P-E V02* +*FCW2238S0BA* + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-16 09:17 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 1x C9300-24P + +Will do + +Best regards, + +Joe + +--- + +# LINE 21 + +*Thread: 1 message(s), 2026-06-15 16:04 → 2026-06-15 16:04* + +## Message 1 — 2026-06-15 16:04 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 21 + +*done + +Best Regards, + +Joe. + +--- + +# 2x ASR1001-X-PWR-DC with SN + +*Thread: 1 message(s), 2026-06-15 16:16 → 2026-06-15 16:16* + +## Message 1 — 2026-06-15 16:16 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x ASR1001-X-PWR-DC with SN + +I don't see them here + +Best Regards, + +Joe. + +--- + +# 4x C9300-NM-2Y to Network Craze (BTV) - PO-P30694 + +*Thread: 1 message(s), 2026-06-15 17:42 → 2026-06-15 17:42* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x C9300-NM-2Y to Network Craze (BTV) - PO-P30694 + +t#1ZJW78500210812382 +4x C9300-NM-2Y NIB +SFVH30060WU5 +SFVH30060X35 +SFVH30060WS4 +SFVH30060X1N + +Best Regards, + +Joe. + +--- + +# 1x MA-MNT-MR-16 to Network Craze (BTV) - PO-P30630 + +*Thread: 1 message(s), 2026-06-15 17:42 → 2026-06-15 17:42* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x MA-MNT-MR-16 to Network Craze (BTV) - PO-P30630 + +t#1ZJW78500231876748 +1x MA-MNT-MR-16 USED +BCAA0004691 + +Best Regards, + +Joe. + +--- + +# 5x PWR-C5-125WAC to Curvature LLC - PO-1361370-I + +*Thread: 1 message(s), 2026-06-15 17:42 → 2026-06-15 17:42* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x PWR-C5-125WAC to Curvature LLC - PO-1361370-I + +t#382045593645 +5x PWR-C5-125WAC USED C5 version. +PWR-C5-125WACV01 +LIT224646LA +LIT25132RKW +LIT252022AP +LIT25132Q3X +ART2515DD6L + +Best Regards, + +Joe. + +--- + +# 2x MA-MNT-MR-16 to OSI Global - PO-25945 + +*Thread: 1 message(s), 2026-06-15 17:42 → 2026-06-15 17:42* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x MA-MNT-MR-16 to OSI Global - PO-25945 + +t#1ZJW78500314925760 +2x MA-MNT-MR-16 USED +BCAA0004693 +BCAA0004692 + +Best Regards, + +Joe. + +--- + +# Help return: 02-14656-21410 + +*Thread: 1 message(s), 2026-06-15 17:42 → 2026-06-15 17:42* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor , Kay | IPSupply +- **Subject:** Re: Help return: 02-14656-21410 + +*done. + +Plz help to return using the attached label. +*Note: must ship today* + +pboy888 02-14656-21410-P01 + +- +Received WS-SUP32-GE-3B +1/1 PART SAL09402986 damaged power connector JV 2026 May 23 +WS-F6K-PFC3B Cisco 1/1 USEB SAL09402B2Q +WS-F6K-MSFC2 Cisco 1/1 USEB SAL094027D8 + +--- + +# 1x SFP-10/25G-LR-S to Network Craze (BTV) - PO-P30877 + +*Thread: 1 message(s), 2026-06-15 17:42 → 2026-06-15 17:42* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x SFP-10/25G-LR-S to Network Craze (BTV) - PO-P30877 + +t#1ZJW78500114844379 +1x SFP-10/25G-LR-S NIB +INL292605CE + +Best Regards, + +Joe. + +--- + +# Please help to ship 2x PVDM2-64 05-14777-19977 + +*Thread: 4 message(s), 2026-06-15 17:42 → 2026-06-16 17:41* + +## Message 1 — 2026-06-15 17:42 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 2x PVDM2-64 05-14777-19977 + +*done. +Please help to ship + +2x PVDM2-64 +PVDM2-64 +FOC123546Z2 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-16 09:29 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor | IPS +- **Subject:** Re: Please help to ship 2x PVDM2-64 05-14777-19977 + +ah, sorry, we shipped only 1 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-16 15:18 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 2x PVDM2-64 05-14777-19977 + +Will do, thanks! +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 2x PVDM2-64 05-14777-19977 + +*done. + +Please help to ship one more PVDM2-64 + +Using attached label + +PVDM2-64 + +FOC12372KLW + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x GLC-ZX-SM-RGD 03-14766-07874 + +*Thread: 1 message(s), 2026-06-15 17:43 → 2026-06-15 17:43* + +## Message 1 — 2026-06-15 17:43 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x GLC-ZX-SM-RGD 03-14766-07874 + +*done. + +Please help to ship + +1x GLC-ZX-SM-RGD: SPC1432030T + +Best Regards, + +Joe. + +--- + +# Help prepare WS-C3750X-24P-S WS-C3750X-48P-S + +*Thread: 4 message(s), 2026-06-16 09:25 → 2026-06-17 10:22* + +## Message 1 — 2026-06-16 09:25 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Help prepare WS-C3750X-24P-S WS-C3750X-48P-S + +Let me try to get them together and let you know what is available and what +is missing. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-16 11:09 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Help prepare WS-C3750X-24P-S WS-C3750X-48P-S + +hi Boss, + +We only have enough good FANs and PSU-BLANK for 17 units total. + +Let me know how many of the WS-C3750X-48P-S and WS-C3750X-24P-S do you +want. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-16 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Help prepare WS-C3750X-24P-S WS-C3750X-48P-S + +Yes, I have a pallet available + +Best regards, + +Joe + +--- +## Message 4 — 2026-06-17 10:22 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Help prepare WS-C3750X-24P-S WS-C3750X-48P-S + +total 20 units. 16x WS-C3750X-48P-S and 4x WS-C3750X-24P-S + +1 pallet, 48x39x26 est. weight 450 lbs. + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-16 12:03 → 2026-06-16 12:03* + +## Message 1 — 2026-06-16 12:03 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Re: Done and help connect + +plz check the detials below: +all connected port 1-25 +TS1 * C9300-NM-8X +TS2 * C9300-NM-8X +TS3 * C9K-C9180YC-EX +TS4 * C8300-IN1S-6T +TS5 * MR86-HW +TS6 * MR86-HW +TS7 * MR86-HW +TS8 * WS-SUP32-GE-3B +TS11 * C9K-C9180YC-EX +TS12 * C9300-24P + C9300-NM-8X +TS13 * C9300-24P + C9300-NM-8X +TS14 * C9300-24P + C9300-NM-8X +TS15 * MR86-HW +TS16* CW9166I-B +TS17* CW9166I-B +TS18 * MR86-HW +TS21 * N5K-C5596UP +TS22 * MR86-HW +TS23 * MR86-HW +TS24 * MR86-HW +TS25 * MR86-HW + +Best Regards, + +Joe. + +--- + +# WS-SUP32-GE-3B USEC SAL12330S7D to line 8 + +*Thread: 1 message(s), 2026-06-16 12:03 → 2026-06-16 12:03* + +## Message 1 — 2026-06-16 12:03 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Re: WS-SUP32-GE-3B USEC SAL12330S7D to line 8 + +*done. + +Best Regards, + +Joe. + +--- + +# Help connect 2x C9130AXI-B + +*Thread: 1 message(s), 2026-06-16 15:49 → 2026-06-16 15:49* + +## Message 1 — 2026-06-16 15:49 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Re: Help connect 2x C9130AXI-B + +Plz help to connect these +C9130AXI-B | FJC264210N0 | Location: US- +NIB C9130AXI-B | FJC27051ALP | Location: US- + +**TS11,12 + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 2 message(s), 2026-06-16 16:22 → 2026-06-16 17:41* + +## Message 1 — 2026-06-16 16:22 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay | IPSupply +- **Subject:** Re: Import Australia UPS +- **Attachments:** C7inPftQe9pOM0Si.svg + +UPS already picked up + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS +- **Attachments:** C7inPftQe9pOM0Si.svg + +t#1ZJW78500431774363 + +All Mail +6x + +All Memory from eBay arriving recently (after removing packing) +*many + +GLC-BX-D | S080322BD001 | Location: US-8.1.OS2.C.B005 +GLC-BX-D= | 080322BD001 | Location: US-JV.OF.1.E +*only 1 unit here. I think the same unit with both s/n above. + +NEX-PLAYGROUND 1/0 NIB NPG02C100668500 + +N9K-C93180YC-EX , VID: V03 , SN: FDO2252023P with FAN, but no PSU , no +need rails +N9K-C93180YC-EX , VID: V02 , SN: FDO21482ECD with FAN, but no PSU , no need +rails +NXA-FAN-30CFM-F V01 +NID2146H5I7 +NID2146H5I8 +NID2146H5I9 +NID2146H5I4 +NID2250H1B1 +NID2250H1B7 +NID2250H197 +NID2250H19B + +Plz add this one incoming today +FedEx Logo +FedEx Tracking Number: +492393997277 +Nex - Playground Travel Case - Gray +Nex - Playground Travel Case - + Gray +Model: +NPA-TC2-GRN-US +SKU: +6596956 +Quantity: +1 +Item Total: +$27.17 +Product Price: +$24.99 +Sales Tax, Fees & Surcharges: +$2.18 + +Plz add: +line 11: PID: N9K-C93180YC-EX , VID: V01 , SN: FDO21111F2A with FAN *(no +PSU)* +NXA-FAN-30CFM-F V01 +NCV2520R0QG +NCV2520R0GW +NCV2520R073 +NCV2520R0DN + +Plz include 1x WS-F6K-PFC3B + PID: WS-F6K-PFC3B , VID: , SN: +SAD092705FY + +Best Regards, + +Joe. + +--- + +# Please help to return 2x C9120AXE-B 18-14577-09030 + +*Thread: 7 message(s), 2026-06-16 16:46 → 2026-06-17 18:20* + +## Message 1 — 2026-06-16 16:46 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay , Victor +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +plz confirm that you want to return 2 units with the s/n below right? +FGL2812LPJG +FJC27151F4C + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-16 16:54 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay , Victor +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +I only received 1 label below +C9120AXE-B , VID: V07 , SN: FJC27141WFH MAC: 5C:64:F1:7F:98:54 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-16 17:02 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +i need the label for the unit below: +C9120AXE-B , VID: V02 , SN: FJC24441S1F MAC: 68:7D:B4:DC:09:8C + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-16 17:12 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +you already printed that label. + +I need the label for the unit below: +C9120AXE-B , VID: V02 , SN: FJC24441S1F MAC: 68:7D:B4:DC:09:8C + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-16 17:26 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +ok roi. + +Best Regards, + +Joe. + +--- +## Message 6 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +*done. +Please help to return + +Plz use these label ready *printed 2-3 days ago* +C9120AXE-B , VID: V07 , SN: FJC27141WFH MAC: 5C:64:F1:7F:98:54 +C9120AXE-B , VID: V02 , SN: FJC24441S1F MAC: 68:7D:B4:DC:09:8C + +*Affix to these 2 units * +1 unit without top cover from AUS SN FGL2812LPJG, *plz take the cover that +we kept aside before* +C9120AXE-B | FJC27151F4C | Location: US-JV.OF.9.C + +Best Regards, + +Joe. + +--- +## Message 7 — 2026-06-17 18:20 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Kay +- **Subject:** Re: Please help to return 2x C9120AXE-B 18-14577-09030 + +Yes, Van dropped off already + +Best regards, + +Joe + +--- + +# 1x C9300-24P-E Blind ship for ACE IT Technologies, Inc - PO-21047 + +*Thread: 2 message(s), 2026-06-16 17:40 → 2026-06-16 17:42* + +## Message 1 — 2026-06-16 17:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300-24P-E Blind ship for ACE IT Technologies, Inc - PO-21047 + +*done. + +*Pls swap label C9300-24P-E* + +1x C9300-24P-E single PSU PWR-C1-715WAC-P + +PID: C9300-24P , VID: V03 , SN: FOC2432L2T3 * **Line 6*** + +PID: PWR-C1-715WAC-P , VID: V01 , SN: LIT2724CTPM + +FAN-T2 + +DCH2340R5US + +NID2325W09CK + +NID2421W0MS7 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-16 17:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300-24P-E Blind ship for ACE IT Technologies, Inc - PO-21047 + +*Pls swap label C9300-24P-E* + +1x C9300-24P-E single PSU PWR-C1-715WAC-P + +PID: C9300-24P , VID: V03 , SN: FOC2432L2T3 * **Line 6*** + +PID: PWR-C1-715WAC-P , VID: V01 , SN: LIT2724CTPM + +Best regards, + +Joe + +--- + +# 10x MA-ANT-27 to Curvature LLC - PO-1361163-C + +*Thread: 1 message(s), 2026-06-16 17:41 → 2026-06-16 17:41* + +## Message 1 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 10x MA-ANT-27 to Curvature LLC - PO-1361163-C + +t#382071721362 +10x MA-ANT-27 USED +9x +JNV23455500 +JNV23455498 +JNV23455502 +JNV23455504 +JNV23455506 +JNV23455508 +JNV23455510 +IPSNSN00406 +IPSNSN00407 + +Best Regards, + +Joe. + +--- + +# 10x C9500-ACCKITH-19I to Curvature LLC - PO-1361430-I + +*Thread: 1 message(s), 2026-06-16 17:41 → 2026-06-16 17:41* + +## Message 1 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 10x C9500-ACCKITH-19I to Curvature LLC - PO-1361430-I + +t#1ZJW78500317898428 +10x C9500-ACCKITH-19I NOB or NIB +BCAA0001977 +BCAA0001825 +BCAA0001834 +BCAA0001832 +BCAA0001978 +BCAA0001830 +BCAA0001836 +BCAA0001987 +BCAA0001983 +BCAA0001833 + +Best Regards, + +Joe. + +--- + +# 1x PWR-C1-1100WAC, 1x C9300-48P-E to OSI Global - PO-26259 + +*Thread: 1 message(s), 2026-06-16 17:41 → 2026-06-16 17:41* + +## Message 1 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x PWR-C1-1100WAC, 1x C9300-48P-E to OSI Global - PO-26259 + +t#1ZJW78500334123151 +1x PWR-C1-1100WAC USED +PWR-C1-1100WAC V02 +DTN2045V211 + +1x C9300-48P-E USED with single PSU 715WAC-P +C9300-48P-E V04 +FOC2502L5ZA +FAN-T2 V01 +DCH2315RLG8 +ACI29021K92 +DCZ274108RR +PWR-C1-715WAC-P V01 +LIT2732C77P + +Best Regards, + +Joe. + +--- + +# 8x WS-C2960L-16TS-LL to Network Craze (BTV) - PO-P30928 + +*Thread: 1 message(s), 2026-06-16 17:41 → 2026-06-16 17:41* + +## Message 1 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 8x WS-C2960L-16TS-LL to Network Craze (BTV) - PO-P30928 + +t#1ZJW78500208572815 +8x WS-C2960L-16TS-LL USED TS-LL version +WS-C2960L-16TS-LL V02 +FCW2117A3H3 +FCW2222A3HU +FCW2204A60Q +FCW2212A3JN +FCW2212A3HN +FCW2121A5NT +FCW2204A60T +FCW2212A3MP + +Best Regards, + +Joe. + +--- + +# 2x EX3400-24P to OSI Global - PO-26193 + +*Thread: 1 message(s), 2026-06-16 17:41 → 2026-06-16 17:41* + +## Message 1 — 2026-06-16 17:41 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x EX3400-24P to OSI Global - PO-26193 + +t#1ZJW78500309505796 +Upto 2x EX3400-24P USED with PSU and rack ear. +NW3619150623 +NW0221080057 +JPSU-600-AC-AFO +1EDX933091Y +1EDX93308VC +1EDX8450CFG +1EDXA390HGS +FAN +VS0219111481 +VS0219111477 +VS0218393632 +VS0218393630 + +Best Regards, + +Joe. + +--- + +# Help connect all MR86-HW + +*Thread: 1 message(s), 2026-06-16 18:37 → 2026-06-16 18:37* + +## Message 1 — 2026-06-16 18:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect all MR86-HW + +Some units currently connected to the TS. All connected ts1-25 + +Best regards, + +Joe + +--- + +# Done and help connect + +*Thread: 2 message(s), 2026-06-17 11:06 → 2026-06-17 15:33* + +## Message 1 — 2026-06-17 11:06 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Daniel Vu , Victor LE +- **Subject:** Re: Done and help connect + +all connected port 1-7, 8 and 11-13, 21 +TS1 * C9300-NM-8X +TS2 * C9300-NM-8X +TS3 * C9300-48P-E +TS4 * C9300-48P-E +TS5 * WS-C3560CX- +TS6 * WS-C3560CX- +TS8 * WS-SUP32-GE-3B +TS11 * C9300-NM-8X +TS12 * C9300-NM-8X +TS13 * C9300-NM-8X +TS21 * N5K-C5596UP + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-17 15:33 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Done and help connect + +*APC2 : bi sap lien tuc, A check lai giup e* + +**done* + +*line 21: A cam SFP de e test voi a* + +**done.* +Best Regards, + +Joe. + +--- + +# UPS 1Z0TKN946709785898 + +*Thread: 1 message(s), 2026-06-17 12:32 → 2026-06-17 12:32* + +## Message 1 — 2026-06-17 12:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** UPS 1Z0TKN946709785898 + +The package above needs to pay for tax and duty. + +Best Regards, + +Joe. + +--- + +# returned dram + +*Thread: 1 message(s), 2026-06-17 13:00 → 2026-06-17 13:00* + +## Message 1 — 2026-06-17 13:00 +- **From:** Joe Bui +- **To:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** returned dram + +FYI: we just received a box back from Raul Dominguez Castanon (return to +sender) + +usps#420953119302010582100067787763 + +Best Regards, + +Joe. + +--- + +# 4 box from Curvature + +*Thread: 5 message(s), 2026-06-17 14:12 → 2026-06-18 10:12* + +## Message 1 — 2026-06-17 14:12 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4 box from Curvature + +They just shipped with cisco refurb box and black foam inside with no +accessory. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-17 14:22 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4 box from Curvature +- **Attachments:** Image_260617_142153.jpeg, Image_260617_142217.jpeg, Image_260617_142204.jpeg + +pictures attached. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-17 16:26 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4 box from Curvature + +yes + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-17 17:01 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4 box from Curvature + +Will do! + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-18 10:12 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4 box from Curvature + +hi Boss, + +Do you have the list for the TNT shipment today? + +Best Regards, + +Joe. + +--- + +# C3KX-PWR-715WAC , C3KX-PS-Blank , C3KX-FAN-23CFM + +*Thread: 1 message(s), 2026-06-17 15:27 → 2026-06-17 15:27* + +## Message 1 — 2026-06-17 15:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: C3KX-PWR-715WAC , C3KX-PS-Blank , C3KX-FAN-23CFM + +yes, we need the ones below +C3KX-PS-Blank +C3KX-FAN-23CFM + +Best Regards, + +Joe. + +--- + +# FPR-NM-8X10G | JAD23010ACR | Location: US-JV.OF.4.B + +*Thread: 1 message(s), 2026-06-17 15:29 → 2026-06-17 15:29* + +## Message 1 — 2026-06-17 15:29 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: FPR-NM-8X10G | JAD23010ACR | Location: US-JV.OF.4.B + +Yes, it is. + +Best Regards, + +Joe. + +--- + +# Connect 2x AIR-AP1562I-B-K9 + +*Thread: 1 message(s), 2026-06-17 15:32 → 2026-06-17 15:32* + +## Message 1 — 2026-06-17 15:32 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay , Ronaldo + IP Supply +- **Subject:** Re: Connect 2x AIR-AP1562I-B-K9 + +TS14,15 + +Best Regards, + +Joe. + +--- + +# 2x ASR1001-X-PWR-DC to DHD, LP - PO-72431 + +*Thread: 1 message(s), 2026-06-17 17:37 → 2026-06-17 17:37* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x ASR1001-X-PWR-DC to DHD, LP - PO-72431 + +t#1ZJW78500111913844 +2x ASR1001-X-PWR-DC with DC cover +ASR1001-X-PWR-DC V01 +DTN1826W0JX +DTN2617W05R + +Best Regards, + +Joe. + +--- + +# 15x MV32-HW to Curvature LLC - PO-1361001-C + +*Thread: 3 message(s), 2026-06-17 17:37 → 2026-06-22 16:10* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x MV32-HW to Curvature LLC - PO-1361001-C + +t#1ZJW78500129707203 +15x MV32-HW +10x +Q2PV-2885-9WH5 +Q2PV-599H-DNSD +Q2PV-C6EG-KB2J +Q2PV-A6NU-EQX8 +Q2PV-DL34-7UEG +Q2PV-WP5A-5HGM +Q2PV-KQL5-GFS3 +Q2PV-VPCA-HBCB +Q2PV-LQ7U-3RFS +Q2PV-GQMH-F5LJ + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x MV32-HW to Curvature LLC - PO-1361001-C + +t#382142640681 +Plz ship 5 more today, SN among: + Q2PV-5ZQ9-5DD8 +Q2PV-VW84-729Z +Q2PV-GFSK-KDPC +Q2PV-3X3G-2QU2 +Q2PV-EJ4U-9EG4 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-22 16:10 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x MV32-HW to Curvature LLC - PO-1361001-C +- **Attachments:** nKmeiJuaMI7rXD6o.png + +no sir + +Best Regards, + +Joe. + +--- + +# Please help to ship 2x PWR-C1-440WDC 08-14781-17608 + +*Thread: 1 message(s), 2026-06-17 17:37 → 2026-06-17 17:37* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor | IPS +- **Subject:** Re: Please help to ship 2x PWR-C1-440WDC 08-14781-17608 + +Plz still ship this one sir , 2 units with DC cover , ensure no screws +missing +PWR-C1-440WDC V01 +ART2210FCJL +ART2210FCDR + +Best Regards, + +Joe. + +--- + +# 20x GLC-LH-SM, 4x C9300L-STACK-KIT, 12x PWR-C1-1100WAC-P to Recurrent Technologies, Inc - PO-P54352 + +*Thread: 1 message(s), 2026-06-17 17:37 → 2026-06-17 17:37* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 20x GLC-LH-SM, 4x C9300L-STACK-KIT, 12x PWR-C1-1100WAC-P to Recurrent Technologies, Inc - PO-P54352 + +t#873227845989 +20x GLC-LH-SM USED +OPA13145127 +OPC11490602 +OPC13452818 +OPA12488354 +OPA12461629 +FNS1246118P +OPC12501727 +OPA15380628 +OPC12471538 +OPC11440385 +OPC10271313 +FNS12240PMS +FNS1227077E +OPC11241282 +AGC1131U7JP +AGC1346UBQH +OPA14370699 +FNS11300241 +OPA12486510 +OPC11241469 + +4x C9300L-STACK-KIT USED +* Note C9300L-STACK version * +*FOC26247L3T* +*FOC25340E9D* +*FOC26484MCW* +*FOC254126JM* +*FOC25412EY3* +*FOC26213ULK* +*FOC25331HE5* +*FOC26247F8J* + +*STACK-T3-50CM V01* +LCC2427PS6Q +LCC2427PR5P +LCC2427PJYI +LCC2427QZDW + +12x PWR-C1-1100WAC-P USED +ART2231FKAQ +DCC2241DAJ1 +QCS24053HRC +ART2231FKDK +DCC2511DY95 +DCC2412D6E2 +DCC2241DAE8 +QCS24083FK4 +ART2231FKDC +DCC2241DAGY +DCC2241DAG9 +DCC2241DAH2 + +Best Regards, + +Joe. + +--- + +# 15x MR86-HW to OSI Global - PO-25694 + +*Thread: 1 message(s), 2026-06-17 17:37 → 2026-06-17 17:37* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x MR86-HW to OSI Global - PO-25694 + +t#1ZJW78500303053437 + +Pls ship good units.6 More units here but when test those ones LED orange. + +Upto 15x MR86-HW with MA-MNT-MR-16 + +8X + +Q3AE-AY5R-YV22 + +JNV23455414 + +Q3AE-2MKJ-V78D + +Q3AE-3PRL-VL68 + +Q3AE-52NF-QY6E + +Q3AE-RNQP-HXGT + +Q3AE-9FKB-VBJ7 + +Q3AE-DDPF-UH9A + +MA-MNT-MR-16 + +cca45680063 + +cca45680065 + +cca45680073 + +cca45680151 + +cca45680165 + +cca45680163 + +cca45680149 + +cca45680157 + +FYI: Do not ship with SN: Q3AE-DMMG-D9KV + +Best Regards, + +Joe. + +--- + +# 1x ISR4321-AX/K9 to OSI Global - PO-26102 + +*Thread: 1 message(s), 2026-06-17 17:37 → 2026-06-17 17:37* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x ISR4321-AX/K9 to OSI Global - PO-26102 + +t#1ZJW78500329796793 + +1x ISR4321-AX/K9 USED with PSU + +PID: ISR4321/K9 , VID: V04 , SN: FLM2043W0ZU + +Plz ship without Rack/PSU/NIM-Blank as this is replacement +Best Regards, + +Joe. + +--- + +# 1x ACS-1900-RM-19 to Townsend Networks - PO-25552 + +*Thread: 1 message(s), 2026-06-17 17:37 → 2026-06-17 17:37* + +## Message 1 — 2026-06-17 17:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x ACS-1900-RM-19 to Townsend Networks - PO-25552 + +t#873227456345 +1x ACS-1900-RM-19 Cisco 1921 19-Inch Rack Mount Kit $45 , *full 8 screws* +*Plz check to ensure fit CISCO1921* + +Best Regards, + +Joe. + +--- + +# 13x PWR-C1-1100WAC-P to Curvature LLC - PO-1361500-C + +*Thread: 1 message(s), 2026-06-17 17:38 → 2026-06-17 17:38* + +## Message 1 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 13x PWR-C1-1100WAC-P to Curvature LLC - PO-1361500-C + +t#382097988184 +13x PWR-C1-1100WAC-P USED +DCC2412D6F5 +DCC2726D600 +DCC2511DUJY +ART2445P0ZL +DCC2731D677 +DCC2604DF8R +DCC2412D6GA +DCC2512D6P3 +DCC2452DLB1 +DCC2444D5UA +DCC2224D0D3 +QCS24083FF7 +DCC2509DLKS + +Best Regards, + +Joe. + +--- + +# 4x STACK-T4-1M USED (NSH) Blind ship for NetworkTigers, Inc. - PO-260617-9 + +*Thread: 1 message(s), 2026-06-17 17:38 → 2026-06-17 17:38* + +## Message 1 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x STACK-T4-1M USED (NSH) Blind ship for NetworkTigers, Inc. - PO-260617-9 + +4x STACK-T4-1M USED T4 version + +Pls ship NOB or NIB is OK + +LCC2250H0D6 + +LCC2249HJR3 + +LCC2250H0CT + +LCC2249HJR4 + +Best Regards, + +Joe. + +--- + +# 1x C9300-NM-2Y to Network Craze (BTV) - PO-P30954 + +*Thread: 1 message(s), 2026-06-17 17:38 → 2026-06-17 17:38* + +## Message 1 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300-NM-2Y to Network Craze (BTV) - PO-P30954 + +t#1ZJW78500230187182 +1x C9300-NM-2Y NIB +SFVH30060X33 + +Best Regards, + +Joe. + +--- + +# 1x C9124AXE-B to Curvature LLC - PO-1361442-C + +*Thread: 1 message(s), 2026-06-17 17:38 → 2026-06-17 17:38* + +## Message 1 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9124AXE-B to Curvature LLC - PO-1361442-C + +t#382097919736 +1x C9124AXE-B USED +FJC2718199M + +Best Regards, + +Joe. + +--- + +# 12x SFP-10/25G-LR-S to KNOWLEDGE COMPUTERS INC - PO-131683 + +*Thread: 1 message(s), 2026-06-17 17:38 → 2026-06-17 17:38* + +## Message 1 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 12x SFP-10/25G-LR-S to KNOWLEDGE COMPUTERS INC - PO-131683 + +t#873226458385 +12x SFP-10/25G-LR-S USED +MZH2823028E +MZH28230287 +MZH282301J2 +MZH282301J1 +MZH282301J0 +MZH282301J7 +MZH282301JG +MZH282301HH +MZH282301H3 +MZH282301H4 +MZH282301H5 +MZH282301H6 + +Best Regards, + +Joe. + +--- + +# 5x C8300-1N1S-6T to PICS Telecom International Corp - POUS022509 + +*Thread: 1 message(s), 2026-06-17 17:38 → 2026-06-17 17:38* + +## Message 1 — 2026-06-17 17:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x C8300-1N1S-6T to PICS Telecom International Corp - POUS022509 + +t#873226023861 +Upto 5x C8300-1N1S-6T USED with Dual PSU + rack ear. +4x +FLM283610SG +FLM2837104P +FLM251010SH +FLM290910DT +PWR-CC1-250WAC V01 +LIT2537AVZ7 +LIT2537AWF6 +LIT2627CLY6 +LIT2633A462 +LIT2627CP7W +LIT2627AYNU +LIT2537AWAE +LIT2633A4MX + +Best Regards, + +Joe. + +--- + +# 4x PVDM3-256 to Datacom Networks, Inc. - PO-8202 + +*Thread: 2 message(s), 2026-06-18 09:17 → 2026-06-18 17:36* + +## Message 1 — 2026-06-18 09:17 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x PVDM3-256 to Datacom Networks, Inc. - PO-8202 + +Will do, + +Best regards, + +Joe + +--- +## Message 2 — 2026-06-18 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x PVDM3-256 to Datacom Networks, Inc. - PO-8202 + +picked up. +4x PVDM3-256 +PVDM3-256 V01 +FOC15201M24 +FOC19496SRC +FOC16064Z1Z +FOC1542480P + +Best Regards, + +Joe. + +--- + +# DS500SDC-3 + +*Thread: 2 message(s), 2026-06-18 09:42 → 2026-06-18 11:55* + +## Message 1 — 2026-06-18 09:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: DS500SDC-3 +- **Attachments:** ziet2FgXlNX3aX0L.png + +yes, 2 units here + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-18 11:55 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: DS500SDC-3 +- **Attachments:** ziet2FgXlNX3aX0L.png, Image_260618_115449.jpeg, Image_260618_115458.jpeg, Image_260618_115507.jpeg, Image_260618_115522.jpeg + +pictures attached. + +Best Regards, + +Joe. + +--- + +# DS-C9148T-K9 JPG2603008A + +*Thread: 1 message(s), 2026-06-18 11:59 → 2026-06-18 11:59* + +## Message 1 — 2026-06-18 11:59 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: DS-C9148T-K9 JPG2603008A +- **Attachments:** w0fmr2Xk0jNwb17f.png + +yes, you can sell the OSI. I can't unbend the chassis and ports. + +Best Regards, + +Joe. + +--- + +# 1x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 + +*Thread: 2 message(s), 2026-06-18 11:59 → 2026-06-18 15:33* + +## Message 1 — 2026-06-18 11:59 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 + +i need more labels + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-18 15:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x JNP-FAN-1RU to Terabit Systems LLC - PO-2637 +- **Attachments:** Image_260618_153329.jpeg, Image_260618_153336.jpeg, Image_260618_153321.jpeg + +t#873282114550 +1x JNP-FAN-1RU USED ** for replacement ** +SBCFX3604 +old s/n +WF0219412892 + +Best Regards, + +Joe. + +--- + +# Help connect 2x DS-C9148T- + +*Thread: 1 message(s), 2026-06-18 12:18 → 2026-06-18 12:18* + +## Message 1 — 2026-06-18 12:18 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect 2x DS-C9148T- + +TS17,18 + +Best Regards, + +Joe. + +--- + +# TRI TOWER TELECOM PICKUP - PO46322 + +*Thread: 1 message(s), 2026-06-18 14:34 → 2026-06-18 14:34* + +## Message 1 — 2026-06-18 14:34 +- **From:** Joe Bui +- **To:** Todd Quetchenbach , Daniel Vu +- **Cc:** Jillian Nunziato , Debbie Smith +- **Subject:** Re: TRI TOWER TELECOM PICKUP - PO46322 +- **Attachments:** image001.png, image002.png, image003.png + +shipping labels received. + +Best Regards, + +Joe. + +On Thu, Jun 18, 2026 at 2:31 PM Todd Quetchenbach +wrote: + +--- + +# 3x N6K-C6001-FAN-B to Curvature LLC - PO-1361562-C + +*Thread: 4 message(s), 2026-06-18 15:00 → 2026-06-18 17:34* + +## Message 1 — 2026-06-18 15:00 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x N6K-C6001-FAN-B to Curvature LLC - PO-1361562-C + +we don't have any more here. I think you already use them to convert to +other part. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-18 15:11 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x N6K-C6001-FAN-B to Curvature LLC - PO-1361562-C + +those fan already shipped to AUS. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-18 15:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x N6K-C6001-FAN-B to Curvature LLC - PO-1361562-C + +found them + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-18 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x N6K-C6001-FAN-B to Curvature LLC - PO-1361562-C + +t#382123623753 +3x N6K-C6001-FAN-B USED +FOX2052PDHN +FOX2052PDE0 +FOX2052PDGZ + +Best Regards, + +Joe. + +--- + +# TNT / Fedex + +*Thread: 2 message(s), 2026-06-18 15:45 → 2026-06-18 17:36* + +## Message 1 — 2026-06-18 15:45 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +hi Boss + +The 5 NOB units below you want to ship them in 4 boxes? 1 of them will be +very big. let me know. + +4x C9300-24T-E-WS + +* -> Plz protect as we need to make them New in AUS *WS-C2960X-48TS-L | +FOC2111S08L | Location: US-JV.5.2.D * NOB* + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-18 17:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: TNT / Fedex + +T#873256774277 *pick up tomorrow +4x C9300-24T-E-WS -> Plz protect as we need to make them New in AUS +FOC2721YA6K +FOC2721Y72K +FOC2648YCCD +FOC2721YA6F +pwr-c1-350wac-p +DCC2647B46Z +DCC2721B0TT +DCC2721B0UH +DCC2721B0U3 + +WS-C2960X-48TS-L | FOC2111S08L | Location: US-JV.5.2.D NOB + +C9200L-48P-4X-E | JAE254300TZ *already ship to PIVIT +C9200L-48P-4X-E | JAE254301PG + +2x Intel Ethernet CNA XL710-QDA2 just arrived XL710-DQA2 2/2 USEB + 7981133843, 951013 + +2x UCSC-PSUV2-1050DC: LIT23223D4H, LIT23223AH7 + +up to 3-6x C9120AXI like New +FJC25432C7X +FJC25432CB7 +FJC25432CB7 +FJC25432CA2 +FJC25432C7S + +2x C3850-NM-4-10G Most ugly +foc23262kmy +fjz233020cu + +Best Regards, + +Joe. + +--- + +# LABEL LINE 14 + +*Thread: 1 message(s), 2026-06-18 16:18 → 2026-06-18 16:18* + +## Message 1 — 2026-06-18 16:18 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL LINE 14 + +ok roi + +Best Regards, + +Joe. + +--- + +# good day + +*Thread: 2 message(s), 2026-06-18 16:48 → 2026-06-19 17:18* + +## Message 1 — 2026-06-18 16:48 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: good day +- **Attachments:** logo1.jpg, Email_banner_2021_web.jpg + +Sure! + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-19 17:18 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: good day +- **Attachments:** logo1.jpg, Email_banner_2021_web.jpg + +hi Boss, + +That guy is still on schedule to come today? + +Best Regards, + +Joe. + +--- + +# connect 1x WS-C3560G-24PS-S: FOC1124Z45D + +*Thread: 1 message(s), 2026-06-18 17:27 → 2026-06-18 17:27* + +## Message 1 — 2026-06-18 17:27 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Kay +- **Subject:** Re: connect 1x WS-C3560G-24PS-S: FOC1124Z45D + +TS11 +FYI: I saw a note with no console and no faceplate + +Best Regards, + +Joe. + +--- + +# 2x DS-C9148T-48PETK9, 4x DS-CAC-650W-E, 8x DS-C32S-FAN-E, 2x DS-9148T-KIT-CSCO to OSI Global - PO-26316 + +*Thread: 1 message(s), 2026-06-18 17:30 → 2026-06-18 17:30* + +## Message 1 — 2026-06-18 17:30 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x DS-C9148T-48PETK9, 4x DS-CAC-650W-E, 8x DS-C32S-FAN-E, 2x DS-9148T-KIT-CSCO to OSI Global - PO-26316 + +t#1ZJW78500308687477 *pick up tomorrow. +2x DS-C9148T-48PETK9 pls ship with DS-CAC-650W-E and FAN +DS-C32S-FAN-E + +with full rail kit *DS-9148T-KIT-CSCO* + +*DS-C9148T-K9 V01* + +*JPG2603008A* + +*JPG27110023* + +*DS-CAC-650W-E V01* + +*ART2311FQQ1* + +*ART2311FQZW* + +*ART2350F0R3* + +*ART2451F407* + +*DS-C32S-FAN-E V01* + +*DCH2450R9UE* + +*DCH2425RWR5* + +*DCH21320U0Z* + +*DCH2450R9U6* + +*DCH2309RBTW* + +*DCH2309RBUD* + +*DCH2309RBTY* + +*DCH2309RBW9* + +with full rail kit *DS-9148T-KIT-CSCO* + +*JNV23455439* + +*JNV23455441* + +Best Regards, + +Joe. + +--- + +# 1x C9120AXE-B, to OSI Global - PO-26027 + +*Thread: 1 message(s), 2026-06-18 17:30 → 2026-06-18 17:30* + +## Message 1 — 2026-06-18 17:30 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9120AXE-B, to OSI Global - PO-26027 + +T#1ZJW78500319054862 *pick up tomorrow. +1x C9120AXE-B USED +FJC26261DFS +a. unit with our printed label (as other units we shipped them is with our +label) -> we can reprint +b. no rack + +Best Regards, + +Joe. + +--- + +# 3x C9300-24P-A, to Trifecta Networks, LLC - PO-309537 + +*Thread: 3 message(s), 2026-06-18 17:35 → 2026-06-19 17:44* + +## Message 1 — 2026-06-18 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x C9300-24P-A, to Trifecta Networks, LLC - PO-309537 + +t#873281900663 +3x C9300-24P-A with single PSU PWR-C1-715WAC-P + +2xC9300-24P-A V03 +FCW2426D13K +FJB2314B091 +PWR-C1-715WAC-P V01 +LIT2724CTLN +LIT2724CTED + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-19 15:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x C9300-24P-A, to Trifecta Networks, LLC - PO-309537 + +Your guy done testing the units on TS5 and TS6? I need to ship 1 more unit. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x C9300-24P-A, to Trifecta Networks, LLC - PO-309537 + +T#873324218515 + +1x C9300-24P-A with single PSU PWR-C1-715WAC-P + +PID: C9300-24P , VID: V02 , SN: FJC2322S0UF Line 6 DOne +PWR-C1-715WAC-P V01 +LIT2724CT36 +FAN-T2 V01 +DCH2302RED8 +DCH2302R76V +DCH2431REXC + +Best Regards, + +Joe. + +--- + +# 2x NXK-ACC-KIT-1RU to Procurri AT 111099 - PO-AT 111099 + +*Thread: 1 message(s), 2026-06-18 17:35 → 2026-06-18 17:35* + +## Message 1 — 2026-06-18 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x NXK-ACC-KIT-1RU to Procurri AT 111099 - PO-AT 111099 + +t#873281039577 + +2x NXK-ACC-KIT-1RU USED (or N2300-ACC-KIT) + +Full rail kit. + +JNV23454848 + +JNV23454854 + +Best Regards, + +Joe. + +--- + +# 1x PWR-500-DC-F to DHD, LP - PO-72280 + +*Thread: 1 message(s), 2026-06-18 17:35 → 2026-06-18 17:35* + +## Message 1 — 2026-06-18 17:35 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x PWR-500-DC-F to DHD, LP - PO-72280 + +t#1ZJW78500305395654 + +1x PWR-500-DC-F USED for replacement + * Pls ship DS500SDC-3* +*L101SL000QAPP* + +Best Regards, + +Joe. + +--- + +# WTB - IE-4010-16S12P ----> update PO: + +*Thread: 1 message(s), 2026-06-19 00:27 → 2026-06-19 00:27* + +## Message 1 — 2026-06-19 00:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: WTB - IE-4010-16S12P ----> update PO: +- **Attachments:** Email_banner_2021_web.jpg, logo1.jpg + +Plz tell them to ship it deliver those. I will have many things to do +tomorrow + +Best regards, + +Joe + +--- + +# Please help to return 1 x N5K-C5596UP 24-14738-31605 + +*Thread: 7 message(s), 2026-06-19 00:28 → 2026-06-25 15:34* + +## Message 1 — 2026-06-19 00:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +Do you have his shipping account? + +Best regards, + +Joe + +--- +## Message 2 — 2026-06-19 09:08 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +I don't think I have time today. Maybe next wk. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-23 10:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +hi Boss, + +I went to drop off the switch but the guy was not there. I was there at +10:00am. + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-24 17:34 +- **From:** Joe Bui +- **To:** QC | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +I will be there on Thursday around 10am. + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-25 10:37 +- **From:** Joe Bui +- **To:** QC | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +hi Boss, + +I went to drop off the switch again today but the guy was not there. I will +not go again. + +Best Regards, + +Joe. + +--- +## Message 6 — 2026-06-25 15:33 +- **From:** Joe Bui +- **To:** QC | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +Ok + +Best Regards, + +Joe. + +--- +## Message 7 — 2026-06-25 15:34 +- **From:** Joe Bui +- **To:** QC | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 1 x N5K-C5596UP 24-14738-31605 + +just tell him to come anytime from 9am to 5:30pm. + +My phone is still broken. + +Best Regards, + +Joe. + +--- + +# Help connect C9300-24P + +*Thread: 1 message(s), 2026-06-19 09:13 → 2026-06-19 09:13* + +## Message 1 — 2026-06-19 09:13 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect C9300-24P + +*done. + +Best Regards, + +Joe. + +--- + +# UPS tracking 1ZJ449670405267635 + +*Thread: 1 message(s), 2026-06-19 11:51 → 2026-06-19 11:51* + +## Message 1 — 2026-06-19 11:51 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** UPS tracking 1ZJ449670405267635 + +Hi Boss + +the ups package above need to pay for COD + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-19 12:14 → 2026-06-19 12:14* + +## Message 1 — 2026-06-19 12:14 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Daniel Vu , Victor LE +- **Subject:** Re: Done and help connect + +All connected port 1-18, and 21 +TS1-4 * c9300-24 + c9300-nm-8x +Ts5-18 CW9166I-B +TS 21 * n5k-c5596up + +Best Regards, + +Joe. + +--- + +# Faulty + +*Thread: 2 message(s), 2026-06-19 13:54 → 2026-06-22 09:50* + +## Message 1 — 2026-06-19 13:54 +- **From:** Joe Bui +- **To:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Faulty + +the units below failed test +MV86-HW +Q3AE-EGKE-B3X2 +Q3AE-SZD8-3PPD +Q3AE-6S3U-Y6N5 +Q3AE-VWFF-6MGG +Q3AE-8P53-P74T +Q3AE-SFXM-7CK2 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 09:50 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Kay +- **Subject:** Re: Faulty + +When I plugged the Ethernet cable to test the device boot but the LED stays +on orange. + +Best Regards, + +Joe. + +--- + +# 1x WS-SUP32-GE-3B + +*Thread: 2 message(s), 2026-06-19 14:39 → 2026-06-19 16:38* + +## Message 1 — 2026-06-19 14:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Re: 1x WS-SUP32-GE-3B + +WS-SUP32-GE-3B | SAL134111BZ +TS8 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-19 16:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply , Kay | IPSupply +- **Subject:** Re: 1x WS-SUP32-GE-3B + +*done. +Plz install this *full set + NET* +PID: WS-SUP32-GE-3B , VID: V01, SN: SAD091804AP + PID: WS-F6K-MSFC2A , VID: , SN: +SAD091804P7 + PID: WS-F6K-PFC3B , VID: , SN: +SAD09110CYW + +Best Regards, + +Joe. + +--- + +# ATnT package UPS Next Day Air 1Z1WE1712974662296 + +*Thread: 2 message(s), 2026-06-19 16:43 → 2026-06-23 13:39* + +## Message 1 — 2026-06-19 16:43 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: ATnT package UPS Next Day Air 1Z1WE1712974662296 +- **Attachments:** vr8SXBZ55uj4lzJI.png + +Will do. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-23 13:39 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: ATnT package UPS Next Day Air 1Z1WE1712974662296 +- **Attachments:** vr8SXBZ55uj4lzJI.png + +Hi Boss, + +The package is already on the way back to the sender. + +Best Regards, + +Joe. + +--- + +# good day + +*Thread: 1 message(s), 2026-06-19 17:29 → 2026-06-19 17:29* + +## Message 1 — 2026-06-19 17:29 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: good day + +I sent him an email but did not respond. I got my # If me late, at least he +called. + +Best Regards, + +Joe. + +--- + +# 50x SFP-10G-LR to Curvature LLC - PO-1361607-I + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 50x SFP-10G-LR to Curvature LLC - PO-1361607-I + +T#382142894893 +50x SFP-10G-LR with holo, and need *SN 26xx+* +*used first*, then like New, *plz keep rubber* +*acw260519b3* +*acw2605199k* +*acw2605199g* +*acw260519ak* +*acw2605199u* +*acw26091r0c* +*acw26091qyz* +*acw26091r01* +*acw26091qz5* +*acw26091qzu* + +*acw252937ad* +*acw252935bd* +*acw252934vc* +*acw252933w4* +*acw252933w0* +*acw26110xwb* +*acw26110xwj* +*acw26110xxe* +*acw26110xx2* +*acw26110xwr* + +*acw25291p6p* +*acw25291p75* +*acw25291p6s* +*acw25291p6a* +*acw25291p69* +*acw26110zdk* +*acw26110zet* +*acw26110zdl* +*acw26110zdb* +*acw26110zf1* + +*acw2615189s* +*acw261518an* +*acw261518ak* +*acw2620042v* +*acw26200423* +*acw26192t8x* +*acw26192t8z* +*acw26192t8l* +*acw26192t8j* +*acw26192t92* + +*acw26110yam* +*acw26110yap* +*acw26110ybw* +*acw26110yhe* +*acw26110yjb* +*acw26041w0q* +*acw26041w13* +*acw26041w1s* +*acw26041w1p* +*acw26041w0a* + +Best Regards, + +Joe. + +--- + +# Import Australia Fedex / TNT + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia Fedex / TNT + +t#873308530323 +All Mail +1x + +All Memory from eBay arriving recently (after removing packing) +*many + +12x NXA-FAN-30CFM-B +NID1922I1SG +NID1922I1SC +NID1922I1S0 +NID2135I0RK +NID1922I1SE +NID2106I25F +NID2108I38W +DCH2237R3N6 +NID2103I35Z +DCH21260BFD +DCH21281B4X +DCH21370ELG + +QSFP-40G-LR4 | SPC23020002 | Location: US-JV.OF.1.D +*can't find it here + +Plz test LED quickly +C9300-24T-A Cisco 2/2 USEC FJC2333S06H, FJC2333S05T bare + +6x C9200-STACK modules like New +plz increase up to 20 total +FVH29100T7W +FVH29100X6E +FVH2910151B +FVH29100XBB +FVH29100VEM +FVH29100TH7 +FVH29100VQ1 +FVH29100U1P +FVH29100TNL +JAE23180HMY +JAE25360VTV +FDO23290KA5 +FDO24260J5C +JAE241108B5 +FDO23290LAT +JAE26360XUR +JAE26382LDW +JAE25360VD8 +FDO22263HYZ +FDO22040VZ4 + +C9200L-48P-4X-E | JAE254301PG +*already inside otherTNT shipment + +C9200L-48P-4X-E= | FOC2608054S | Location: US-JV.5.3.C Bare + +both inside PID: WS-SUP32-GE-3B SN: SAL12330S7D +PID: WS-F6K-MSFC2A , VID: , SN: SAL12330JA2 +PID: WS-F6K-PFC3B , VID: V02, SN: SAL12330MGV + +Best Regards, + +Joe. + +--- + +# 6x C9300-NM-8X, 10x SFP-10G-SR to Tredent Data Systems - PO-25754 + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 6x C9300-NM-8X, 10x SFP-10G-SR to Tredent Data Systems - PO-25754 + +t#1ZJW78500321246427 +6x C9300-NM-8X USED +FJZ27411UR0 +FJZ2626149P +FJZ2626146T +FOC230984VG +FJZ26261486 +FJZ26251J9J + +10x SFP-10G-SR NIB +SAVD1926A3ME +SAVD1909A2R2 +SAVD1909A2P8 +SAVD1926A5ZS +SAVD1926A0BV +SAVD1919AKHX +SAVD1926A3D7 +SAVD1926A5ZG +SAVD1926A0NR +SAVD1926A0PJ + +Best Regards, + +Joe. + +--- + +# 1x C8200-1N-4T to DHD, LP - PO-72509 + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C8200-1N-4T to DHD, LP - PO-72509 + +t#1ZJW78500334942418 + +1x C8200-1N-4T USED with rack ear. + +FGL2703L7EF + +*no rack ear avail. + +Best Regards, + +Joe. + +--- + +# 1x MA-ANT-27 to Curvature LLC - PO-1361163-C + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x MA-ANT-27 to Curvature LLC - PO-1361163-C + +t#382139053391 +1x MA-ANT-27 USED +JNV23455420 + +Best Regards, + +Joe. + +--- + +# Please help to return 1x NIM-2GE-CU-SFP 22-14679-31676 + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor , Kay | IPSupply +- **Subject:** Re: Please help to return 1x NIM-2GE-CU-SFP 22-14679-31676 + +*done. +Please help to return + +1x NIM-2GE-CU-SFP: FOC24331W30 + +Best Regards, + +Joe. + +--- + +# Please help to return 1x NIM-2GE-CU-SFP 26-14668-35871 + +*Thread: 1 message(s), 2026-06-19 17:44 → 2026-06-19 17:44* + +## Message 1 — 2026-06-19 17:44 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor , Kay | IPSupply +- **Subject:** Re: Please help to return 1x NIM-2GE-CU-SFP 26-14668-35871 + +*done. +Please help to return + +1x NIM-2GE-CU-SFP: FOC23503PHV + +Best Regards, + +Joe. + +--- + +# Connect 2x WS-C3560G-24PS-S 382137196236/ Fedex + +*Thread: 3 message(s), 2026-06-22 09:08 → 2026-06-22 14:52* + +## Message 1 — 2026-06-22 09:08 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Kay +- **Subject:** Re: Connect 2x WS-C3560G-24PS-S 382137196236/ Fedex + +Will do. + +Best Regards, + +Joe. + +On Mon, Jun 22, 2026 at 12:04 AM Victor | IPS +wrote: + +--- +## Message 2 — 2026-06-22 13:56 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Kay +- **Subject:** Re: Connect 2x WS-C3560G-24PS-S 382137196236/ Fedex + +ts15,16 + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-22 14:52 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Connect 2x WS-C3560G-24PS-S 382137196236/ Fedex + +*done + +Best Regards, + +Joe. + +--- + +# LABEL: CW9166I-MR + +*Thread: 5 message(s), 2026-06-22 09:11 → 2026-06-23 14:43* + +## Message 1 — 2026-06-22 09:11 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL: CW9166I-MR +- **Attachments:** QiXIIRRtfqT7at7z.png + +I just changed the paper. plz print again. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 13:48 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL: CW9166I-MR +- **Attachments:** QiXIIRRtfqT7at7z.png + +you need to move the label down. I sent the picture via TEAM. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-22 13:58 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL: CW9166I-MR +- **Attachments:** QiXIIRRtfqT7at7z.png + +My phone was broken. asked your team mate + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-23 14:38 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL: CW9166I-MR +- **Attachments:** QiXIIRRtfqT7at7z.png + +still no good, need to move down more + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-23 14:43 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL: CW9166I-MR +- **Attachments:** QiXIIRRtfqT7at7z.png + +little bit more + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x EX-UM-4SFPP-MR 17-14781-37655 + +*Thread: 2 message(s), 2026-06-22 09:30 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 09:30 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x EX-UM-4SFPP-MR 17-14781-37655 + +hi Boss, + +I don't see that s/n here. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x EX-UM-4SFPP-MR 17-14781-37655 + +*done. +Please help to ship +1x EX-UM-4SFPP-MR +please help to ship XS0221420145 + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 2 message(s), 2026-06-22 11:55 → 2026-06-22 14:24* + +## Message 1 — 2026-06-22 11:55 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +All connected. + +TS1 * N5K-C5596UP +TS2 * C9300-24 +TS3 * C9300-24 +TS4 * c91661-mr +TS5 * c91661-mr + +TS8 * WS-SUP32 + +TS11 * C8300-1N1S-4T2X +TS12 * C9300-24P-E + C9300-NM-8X +TS13 * C9300-24P-E +TS14 * IE-3300-8T2S-E + +TS21 * N5K-C5596UP + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 14:24 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Done and help connect + +already shipped + +Best Regards, + +Joe. + +--- + +# C8300-1N1S-4T2X FLM290610K4 + +*Thread: 1 message(s), 2026-06-22 11:57 → 2026-06-22 11:57* + +## Message 1 — 2026-06-22 11:57 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: C8300-1N1S-4T2X FLM290610K4 + +*done. TS11 + +Please install the MEM * 32GB 2Rx4 PC4 2600 or 3200* into *C8300-1N1S *then +connect it to the port. + +Best Regards, + +Joe. + +--- + +# LINE 1 + +*Thread: 1 message(s), 2026-06-22 14:00 → 2026-06-22 14:00* + +## Message 1 — 2026-06-22 14:00 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 1 + +what do you mean? USB drive? + +Best Regards, + +Joe. + +--- + +# C9300-24T-A + +*Thread: 2 message(s), 2026-06-22 14:52 → 2026-06-22 15:04* + +## Message 1 — 2026-06-22 14:52 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: C9300-24T-A + +are you done with any of the unit on the Ts? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 15:04 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: C9300-24T-A + +C9300-24T-A +connected to TS8 + +Best Regards, + +Joe. + +--- + +# QSFP-40G-LR4 | SPC23020002 | Location: US-JV.OF.1.D + +*Thread: 1 message(s), 2026-06-22 15:04 → 2026-06-22 15:04* + +## Message 1 — 2026-06-22 15:04 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: QSFP-40G-LR4 | SPC23020002 | Location: US-JV.OF.1.D + +We will check again. + +Best Regards, + +Joe. + +--- + +# PWR-511-AC-BLUE EEXT2249117068 + +*Thread: 1 message(s), 2026-06-22 15:19 → 2026-06-22 15:19* + +## Message 1 — 2026-06-22 15:19 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: PWR-511-AC-BLUE EEXT2249117068 + +yes, 1 unit here + +Best Regards, + +Joe. + +--- + +# Import Australia UPS + +*Thread: 2 message(s), 2026-06-22 15:58 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 15:58 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS + +UPS already pick up. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia UPS + +t#1ZJW78500401856894 + +*All Mail*4x + +*All Memory from eBay arriving recently (after removing packing)**many + +C3850-NM-2-40G Cisco 1/1 USEB FOC192205F3 +*Just arrived* + +QSFP-40G-LR4 | SPC23020002 | Location: US-JV.OF.1.D * -> if you can find* +*can't find it + +C9300-24T-A , VID: V02 , SN: FOC2217Q02J* bare* + +Best Regards, + +Joe. + +--- + +# 15x Mounting plates with screw for MV32-HW to Curvature LLC - PO-1361001-C + +*Thread: 5 message(s), 2026-06-22 16:19 → 2026-06-25 16:32* + +## Message 1 — 2026-06-22 16:19 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x Mounting plates with screw for MV32-HW to Curvature LLC - PO-1361001-C + +We only have 5 plates here. and no screws. + +let me know. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 16:20 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x Mounting plates with screw for MV32-HW to Curvature LLC - PO-1361001-C + +The first 10 units we received didn't come with the plates. + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-25 16:07 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x Mounting plates with screw for MV32-HW to Curvature LLC - PO-1361001-C + +not yet. I didn't hear back from you. We just have 5 plates here, no screw + +Best Regards, + +Joe. + +--- +## Message 4 — 2026-06-25 16:09 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x Mounting plates with screw for MV32-HW to Curvature LLC - PO-1361001-C + +ok, i will ship out 5 plates today. + +Best Regards, + +Joe. + +--- +## Message 5 — 2026-06-25 16:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 15x Mounting plates with screw for MV32-HW to Curvature LLC - PO-1361001-C + +Will do. +Best Regards, + +Joe. + +--- + +# Help connect + +*Thread: 2 message(s), 2026-06-22 16:36 → 2026-06-22 17:03* + +## Message 1 — 2026-06-22 16:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Help connect + +Details below: +4x ISR4321 +*connected to TS 2,3, 12, 13 + +2x ISR4331 with PVDM4-32 +* 2 units here but the PSU were missing the power cab connect from PSU the +motherboard. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-22 17:03 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: Help connect + +*done + +Best Regards, + +Joe. + +--- + +# Check for CBL-NVME-240SFF + +*Thread: 1 message(s), 2026-06-22 17:16 → 2026-06-22 17:16* + +## Message 1 — 2026-06-22 17:16 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** kiet.phan@apactech.io +- **Subject:** Re: Check for CBL-NVME-240SFF + +I checked all 3 and don't see any cable connect to it + +Best Regards, + +Joe. + +--- + +# C9120AXE* + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: C9120AXE* + +Plz scan and send SN of C9120AXE* used and keep aside (will ship +tomorrow) +FJC27141WLU +FJC27081CEG +FJC262921J0 +FJC2629225Y + +Best Regards, + +Joe. + +--- + +# Please help to ship 2x WS-C3560G-24PS-E 14-14782-66558 + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 2x WS-C3560G-24PS-E 14-14782-66558 + +*done. +Please help to ship +2x WS-C3560G-24PS-E on line 15, 16 label ready on printer +2x rack ear +2x US power cord + +Best Regards, + +Joe. + +--- + +# 2x C9300-48P-E, 2x C9300-NM-8X, 2x PWR-C1-71 to Data Networks Int'l - PO-20158986 + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-48P-E, 2x C9300-NM-8X, 2x PWR-C1-71 to Data Networks Int'l - PO-20158986 + +t#873411659986 + +2x C9300-48P-E NIB + +SN: FOC2530LZV6 +FOC2720Y3K3 + +2x PWR-C1-715WAC-P NIB +SDCC2550C1TS +SLIT2842AJKX + +Best Regards, + +Joe. + +--- + +# 20x C9300-NM-8X to Curvature LLC - PO-1361627-I + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 20x C9300-NM-8X to Curvature LLC - PO-1361627-I + +T#1ZJW78500336683230 +20x C9300-NM-8X USED +FOC22447FB0 +FOC252520ZB +FJZ250407V3 +FOC25062DMY +FJZ23141JWL +FJZ2444179V +FOC26452WP0 +FOC222897W6 +FOC221049XD +FOC24145T67 + +FOC24151HA4 +FJZ2626139Z +FJZ26251ARU +FOC22442VA0 +FOC22273U5U +FOC23246NZY +FJZ23321MWY +FOC230984BC +FJZ23150JUP +FOC23285F2V + +faceplate +JNV23454926 +JNV23454924 +JNV23454922 +JNV23454920 +JNV23454917 +JNV23454919 + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x VIC3-4FXS/DID 18-14787-11692 + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x VIC3-4FXS/DID 18-14787-11692 + +*done +Please help to ship +1x VIC3-4FXS/DID +FOC18375W7G + +Using attached label + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x VIC3-4FXS/DID 16-14788-52149 + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x VIC3-4FXS/DID 16-14788-52149 + +*done. +Please help to ship +1x VIC3-4FXS/DID +FOC16036FFK + +Using attached label + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x PVDM2-64 21-14778-64209 + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship 1x PVDM2-64 21-14778-64209 + +*DONE. +Please help to ship +1x PVDM2-64 +FOC13313DX8 + +Using attached label + +Best Regards, + +Joe. + +--- + +# Please help to ship1x VIC3-4FXS/DID 14-14784-46115 + +*Thread: 1 message(s), 2026-06-22 17:28 → 2026-06-22 17:28* + +## Message 1 — 2026-06-22 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to ship1x VIC3-4FXS/DID 14-14784-46115 + +*done. +Please help to ship +1x VIC3-4FXS/DID + +FOC17361MNE + +Best Regards, + +Joe. + +--- + +# AIR-AP1562I-B-K9 1Z84WF710391365251/ UPS + +*Thread: 2 message(s), 2026-06-23 09:09 → 2026-06-23 13:56* + +## Message 1 — 2026-06-23 09:09 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Kay , Ronaldo + IP Supply , Daniel Vu +- **Subject:** Re: AIR-AP1562I-B-K9 1Z84WF710391365251/ UPS + +will do. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-23 13:56 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Kay , Ronaldo + IP Supply , Daniel Vu +- **Subject:** Re: AIR-AP1562I-B-K9 1Z84WF710391365251/ UPS + +TS5,6,7 + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-23 12:26 → 2026-06-23 12:26* + +## Message 1 — 2026-06-23 12:26 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Daniel Vu , Ronaldo + IP Supply , Victor LE +- **Subject:** Re: Done and help connect + +TS1 * WS-C1924-EN-DC + +TS2 *ISR4321/K9 + +TS3 *ISR4321/K9 + +TS4 * C9300X-24Y-A + +TS11 * CISCO2821- + +TS12 * ISR4321/K9 + +TS13 * ISR4321/K9 + +TS14 * C9200CX-12 + +Best Regards, + +Joe. + +--- + +# up to 4x CISCO2821* + NET + +*Thread: 3 message(s), 2026-06-23 12:27 → 2026-06-23 15:32* + +## Message 1 — 2026-06-23 12:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: up to 4x CISCO2821* + NET + +only 1 completed unit connected to TS11 + +2 more here, missing PSU and FAN +1 Missing PSU + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-23 14:42 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: up to 4x CISCO2821* + NET + +yes, i found only AC at that location + +Best Regards, + +Joe. + +--- +## Message 3 — 2026-06-23 15:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: up to 4x CISCO2821* + NET + +4 cisco2821 total. +1x FTX1336AHZ3 completed +1x FTX1134A22A missing FAN, PSU, FACEPLATE +1x FTX0950C0GD Missing PSU, FACEPLATE +1x FTX1418AKP2 missing PSU, FAN + +Best Regards, + +Joe. + +--- + +# 3x IE-4010-16S12P + +*Thread: 1 message(s), 2026-06-23 14:36 → 2026-06-23 14:36* + +## Message 1 — 2026-06-23 14:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x IE-4010-16S12P + +they are in ok condition + +Best Regards, + +Joe. + +--- + +# Help connect + NET + +*Thread: 1 message(s), 2026-06-23 15:38 → 2026-06-23 15:38* + +## Message 1 — 2026-06-23 15:38 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: Help connect + NET + +TS 2,3 + +Best Regards, + +Joe. + +--- + +# APC1 + +*Thread: 1 message(s), 2026-06-23 15:53 → 2026-06-23 15:53* + +## Message 1 — 2026-06-23 15:53 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: APC1 + +APC1 still on + +Best Regards, + +Joe. + +--- + +# Please connect more CW9166I-B + +*Thread: 2 message(s), 2026-06-23 15:54 → 2026-06-24 12:23* + +## Message 1 — 2026-06-23 15:54 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Please connect more CW9166I-B + +Pls connect more CW9166I-B +More connected TS12-25 + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-24 12:23 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Quyet +- **Subject:** Re: Please connect more CW9166I-B + +Pls connect more CW9166I-B +More connected TS12-22 + +Best Regards, + +Joe. + +--- + +# 3x IE-4010-16S12P with dual PSU + +*Thread: 2 message(s), 2026-06-23 16:12 → 2026-06-23 16:15* + +## Message 1 — 2026-06-23 16:12 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x IE-4010-16S12P with dual PSU + +too late for ground for today + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-23 16:15 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x IE-4010-16S12P with dual PSU + +too late to ship fedex, Maybe i can drop off UPS + +Best Regards, + +Joe. + +--- + +# 3x IE-4010-16S12P to LSI - PO 189133 - Shipping from CA + +*Thread: 1 message(s), 2026-06-23 17:27 → 2026-06-23 17:27* + +## Message 1 — 2026-06-23 17:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x IE-4010-16S12P to LSI - PO 189133 - Shipping from CA + +t#873471359207 +3x IE-4010-16S12P +dual PWR-RGD-AC-DC + rack ears +FDO2311J4UU +FDO2326J0U6 +FDO2233U0GV + +PWR-RGD-AC-DC +DTH2214024Q +DTH212901F7 +DTH1941006H +DTH2230002D +DTH2230002G +MP5B10700CB + +Best Regards, + +Joe. + +--- + +# 4x ISR4321-V/K9, 2x ISR4331-V/K9 to CXtec - PO-D1240982 + +*Thread: 1 message(s), 2026-06-23 17:27 → 2026-06-23 17:27* + +## Message 1 — 2026-06-23 17:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 4x ISR4321-V/K9, 2x ISR4331-V/K9 to CXtec - PO-D1240982 + +t#1ZJW78501211711523 + +4x ISR4321-V/K9 with PSU+ rack ear. + +PID: ISR4321/K9 , VID: V04 , SN: FLM2146V035 + +PID: ISR4321/K9 , VID: V04 , SN: FLM2137V0YL + +PID: ISR4321/K9 , VID: V04 , SN: FLM2221W0C8 + +PID: ISR4321/K9 , VID: V04 , SN: FLM2229V188 + +PSU + +JNV23452553 + +JNV23452555 + +JNV23452545 + +JNV23452547 + +JNV23452549 + +JNV23452551 + +Best Regards, + +Joe. + +--- + +# 2x GLC-T-RGD USED to Curvature LLC - PO-1361001-C + +*Thread: 1 message(s), 2026-06-23 17:27 → 2026-06-23 17:27* + +## Message 1 — 2026-06-23 17:27 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x GLC-T-RGD USED to Curvature LLC - PO-1361001-C + +t#873468937279 +2x GLC-T-RGD USED +ACW28350BNZ +ACW28350C51 + +Best Regards, + +Joe. + +--- + +# 5x SFP-10G-T-X USED to ChannelWorks - Relutech - PO-14948 + +*Thread: 1 message(s), 2026-06-23 17:28 → 2026-06-23 17:28* + +## Message 1 — 2026-06-23 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 5x SFP-10G-T-X USED to ChannelWorks - Relutech - PO-14948 + +t#873468898750 +5x SFP-10G-T-X USED +ACW29080WSJ +ACW29080J4D +ACW29021EB6 +ACW29081JY1 +ACW29080FQL + +Best Regards, + +Joe. + +--- + +# 10x GLC-LH-SM NIB Blind ship for GLOBALNET PRO INC - PO-16524 + +*Thread: 1 message(s), 2026-06-23 17:28 → 2026-06-23 17:28* + +## Message 1 — 2026-06-23 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 10x GLC-LH-SM NIB Blind ship for GLOBALNET PRO INC - PO-16524 + +10x GLC-LH-SM NIB +1PGLC-LH-SM= +SOPC15471170 +SOPC15471254 +SOPC15471186 +SOPC15471175 +SOPC15471394 +SOPC15471495 +SOPC15471241 +SOPC15471196 +SOPC15471373 +SOPC15471239 + +Best Regards, + +Joe. + +--- + +# 6x MR46-HW Blind ship for - PO-23854 + +*Thread: 1 message(s), 2026-06-23 17:28 → 2026-06-23 17:28* + +## Message 1 — 2026-06-23 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 6x MR46-HW Blind ship for - PO-23854 + +*done. + +6x MR46-HW NIB + +lz select 6 good box +Unclaimed SN OK to ship below + +Q3AC-EM2G-7YQB + +Q3AC-HR8D-SKQQ + +Q3AC-ZGGB-7KH8 + +Q3AC-FHVK-PUFD + +Q3AC-EC8J-J5L4 + +Q3AC-MUBP-Z6H6 + +Best Regards, + +Joe. + +--- + +# 1x C8200-RM-19 USED to DHD, LP - PO-72509 + +*Thread: 1 message(s), 2026-06-23 17:28 → 2026-06-23 17:28* + +## Message 1 — 2026-06-23 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C8200-RM-19 USED to DHD, LP - PO-72509 + +t#1ZJW78500300871915 +1x C8200-RM-19 USED Pls ship rack ear of ISR4331 + +Best Regards, + +Joe. + +--- + +# 2x MEM-C8300-32GB Blind ship for RetroHardware, Inc - PO-12770 + +*Thread: 1 message(s), 2026-06-23 17:28 → 2026-06-23 17:28* + +## Message 1 — 2026-06-23 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x MEM-C8300-32GB Blind ship for RetroHardware, Inc - PO-12770 + +t#1ZJW78500304585709 +2x MEM-C8300-32GB * Please take the MEM-C8300-32GB label and apply it to +the 32GB 2Rx4 PC4 2600 or 3200 memory module that you just installed in +the C8300-1N1S-4T2X.* + +*S802C0F21122DBA344A* +*S802C0F21122DBA3464* + +Best Regards, + +Joe. + +--- + +# Please help to ship 1x ASR-9902-2P-KIT 13-14800-40754 + +*Thread: 1 message(s), 2026-06-23 17:28 → 2026-06-23 17:28* + +## Message 1 — 2026-06-23 17:28 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay +- **Subject:** Re: Please help to ship 1x ASR-9902-2P-KIT 13-14800-40754 + +*done. +Please help to ship +1x ASR-9902-2P-KIT +Pls let take rack ear from N5K-C5596UP and ship with screws + +Best Regards, + +Joe. + +--- + +# LABEL CW9166I-MR + +*Thread: 1 message(s), 2026-06-24 09:03 → 2026-06-24 09:03* + +## Message 1 — 2026-06-24 09:03 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL CW9166I-MR + +yes, i received them. +FYI: there are 2 slots for the labels on 1 sheet of paper. + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 1 message(s), 2026-06-24 09:41 → 2026-06-24 09:41* + +## Message 1 — 2026-06-24 09:41 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Daniel Vu , Victor LE +- **Subject:** Re: Done and help connect + +*Plz check:Please check all Line TS1->8 there is no console output * +***i just reset all the power.* + +Best Regards, + +Joe. + +--- + +# DS-CAC-650W-E and DS-C32S-FAN-E + +*Thread: 2 message(s), 2026-06-24 11:16 → 2026-06-24 11:37* + +## Message 1 — 2026-06-24 11:16 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: DS-CAC-650W-E and DS-C32S-FAN-E + +will keep you update + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-24 11:37 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: DS-CAC-650W-E and DS-C32S-FAN-E + +Details below: + +DS-CAC-650W-E + +4x units, but 2 with broken handle + +DS-C32S-FAN-E + +4 units + +Best Regards, + +Joe. + +--- + +# FPR4K-RACK-MNT + +*Thread: 1 message(s), 2026-06-24 12:02 → 2026-06-24 12:02* + +## Message 1 — 2026-06-24 12:02 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: FPR4K-RACK-MNT + +yes, 5 units here + +Best Regards, + +Joe. + +--- + +# 11x CW9166I-MR to INTELECA LLC - PO-Purchase Order 20105 + +*Thread: 2 message(s), 2026-06-24 12:55 → 2026-06-24 17:34* + +## Message 1 — 2026-06-24 12:55 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 11x CW9166I-MR to INTELECA LLC - PO-Purchase Order 20105 + +hi Boss, + +pictures sent via TEAM. Plz check and let me know. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-24 17:34 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 11x CW9166I-MR to INTELECA LLC - PO-Purchase Order 20105 + +t#873509498579 +11x CW9166I-MR +KWC27180B7W +KWC28490GA9 +KWC270908BV +KWC2712060N +KWC27170EHK +KWC28490G6D +KWC27110UCV +KWC270908AP +KWC27110U5B +KWC27110UB0 +KWC27110UCX + +Best Regards, + +Joe. + +--- + +# 8x CS-DS-C32S-FAN-E, 4x CS-DS-CAC-650W-E Blind ship for Procurri LLC - PO-DS 111503 + +*Thread: 2 message(s), 2026-06-24 13:32 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 13:32 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 8x CS-DS-C32S-FAN-E, 4x CS-DS-CAC-650W-E Blind ship for Procurri LLC - PO-DS 111503 + +FYI: only 4 fans avail. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 8x CS-DS-C32S-FAN-E, 4x CS-DS-CAC-650W-E Blind ship for Procurri LLC - PO-DS 111503 + +t#873526593860 +8x CS-DS-C32S-FAN-E USED +DS-C32S-FAN-E V01 +DCH2309RBUK +DCH2309RBW6 +DCH2309RBWC +DCH2309RBU1 + +4x CS-DS-CAC-650W-E Please help replace the two broken handles. +DS-CAC-650W-E V01 +ART2311FQQ3 +ART2504F89E +ART2311FQQ2 +ART2504F8H7 + +Best Regards, + +Joe. + +--- + +# LABEL : AIR-AP1562I-S-K9 + +*Thread: 2 message(s), 2026-06-24 14:48 → 2026-06-24 14:59* + +## Message 1 — 2026-06-24 14:48 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL : AIR-AP1562I-S-K9 + +ok roi + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-24 14:59 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LABEL : AIR-AP1562I-S-K9 + +got it. + +Best Regards, + +Joe. + +--- + +# 2x ISR4331/K9 + +*Thread: 1 message(s), 2026-06-24 15:00 → 2026-06-24 15:00* + +## Message 1 — 2026-06-24 15:00 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 2x ISR4331/K9 + +TS23,24 + +Best Regards, + +Joe. + +--- + +# HGST-12TB + +*Thread: 2 message(s), 2026-06-24 15:13 → 2026-06-25 08:57* + +## Message 1 — 2026-06-24 15:13 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: HGST-12TB + +*done. + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-25 08:57 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: HGST-12TB + +*done. + +Best Regards, + +Joe. + +--- + +# LINE 11 + +*Thread: 1 message(s), 2026-06-24 16:37 → 2026-06-24 16:37* + +## Message 1 — 2026-06-24 16:37 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 11 + +*done. + +Best Regards, + +Joe. + +--- + +# C9120AXE-B + +*Thread: 1 message(s), 2026-06-24 17:08 → 2026-06-24 17:08* + +## Message 1 — 2026-06-24 17:08 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: C9120AXE-B + +TS4 + +Best Regards, + +Joe. + +--- + +# LINE 4 + +*Thread: 1 message(s), 2026-06-24 17:12 → 2026-06-24 17:12* + +## Message 1 — 2026-06-24 17:12 +- **From:** Joe Bui +- **To:** Quyet +- **Cc:** Daniel Vu +- **Subject:** Re: LINE 4 + +C9120AXE-B + +FJC27081CEZ + +Best Regards, + +Joe. + +--- + +# Please help to ship 2x AIR-AP1562I-S-K9 Invoice 151717 + +*Thread: 1 message(s), 2026-06-24 17:32 → 2026-06-24 17:32* + +## Message 1 — 2026-06-24 17:32 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Kay , Daniel Vu , Ronaldo + IP Supply +- **Subject:** Re: Please help to ship 2x AIR-AP1562I-S-K9 Invoice 151717 + +*done. +Please help to ship +2x AIR-AP1562I-S-K9 on line TS5,6 label ready on printer +Please included the bolt at SFP port (don't install to AP, keep on the side) +FGL2346L5CG +FGL2431N019 + +Best Regards, + +Joe. + +--- + +# 3x PWR-C49-300AC to Curvature LLC - PO-1361761-C + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x PWR-C49-300AC to Curvature LLC - PO-1361761-C + +t#873528345784 +3x PWR-C49-300AC plz unbent handle if required +PWR-C49-300AC | PAC14370LDZ | Location: US-JV.6.1.B +PWR-C49-300AC | QCS1252B0A0 | Location: US-JV.6.1.B +PWR-C49-300AC | QCS1214B0CA | Location: US-JV.6.1.B + +Best Regards, + +Joe. + +--- + +# 1x C9300X-24Y-A to Network Craze (BTV) - PO-P30894 + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300X-24Y-A to Network Craze (BTV) - PO-P30894 + +t#1ZJW78500214710752 +1x C9300X-24Y-A with single PSU PWR-C1-715WAC-P + FOC2631YKE6 +PWR-C1-715WAC-P +DCC2717C5H0 +FAN-T2 +DCZ262502FD +DCZ262502H7 +DCZ262502G4 + +Best Regards, + +Joe. + +--- + +# 1x C9300-48U-A to PIVIT GLOBAL - PO-256970 + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9300-48U-A to PIVIT GLOBAL - PO-256970 + +t#1ZJW78500218523966 +1x C9300-48U-A USED single PSU PWR-C1-1100WAC +C9300-48U-A V04 +FJC25171FJT +PWR-C1-1100WAC V02 +DTN2131V1MW +FAN-T2 V01 +DCH2245RP2S +NID2550W0SD2 +DCZ28420RJH + +Best Regards, + +Joe. + +--- + +# 32x J9150D to Curvature LLC - PO-1361323-C + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 32x J9150D to Curvature LLC - PO-1361323-C + +t#873507576964 +Upto 32x J9150D USED +CN82KBV1M1 +CN82KBV0S8 +CN82KBV51F +CN82KBV0MN +CN82KBV35B +CN82KBV1G0 +CN82KBV5K9 +CN82KBV19X +CN82KBV32Y +CN82KBV5TJ +CN83KBV52D +CN82KBV0DQ +CN82KBV7C0 +CN82KBV19D +CN82KBV154 +CN82KBV5N0 +CN82KBV0JP +CN81KBV0KN +CN82KBV4YD +CN82KBV21P +CN82KBV57K +CN82KBV5TH +CN82KBV0MM +MY95KC90HW +MY81KC9070 +CN13KJV57L +MY81KC910C +MY81KC907P +MY81KC908C +MY81KC90JG +MY81KC907N +MY81KC90CM + +Best Regards, + +Joe. + +--- + +# 2x QSFP-100G-SR1.2 to Recurrent Technologies, Inc - PO-P54386 + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x QSFP-100G-SR1.2 to Recurrent Technologies, Inc - PO-P54386 + +t#873526921770 + +2x QSFP-100G-SR1.2 + +SNs among: + +INL27130FVW +INL270405X3 + +Best Regards, + +Joe. + +--- + +# Please help to return 2x MR86-HW 15-14694-40587 + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: Please help to return 2x MR86-HW 15-14694-40587 + +*done. +Please help to return + +2x MR86-HW: Q3AE-VWFF-6MGG, Q3AE-EGKE-B3X2 + +Best Regards, + +Joe. + +--- + +# 13x MA-MNT-MR-16 to CXtec - PO-D1239490 + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 13x MA-MNT-MR-16 to CXtec - PO-D1239490 + +t#1ZJW78501215940537 +13x MA-MNT-MR-16 USED +CCA45680155 +CCA45680167 +CCA45680161 +CCA45680061 +CCA45680153 +CCA45680075 +CCA45680168 +CCA45680159 +CCA45680059 +CCA45680067 +CCA45680069 +CCA45680071 +BCAA0004947 + +Best Regards, + +Joe. + +--- + +# 1x C9120AXE-B, 1x AIR-AP-T-RAIL-R, 1x AIR-AP-BRACKET-1 to OSI Global - PO-26415 + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Ronaldo + IP Supply +- **Subject:** Re: 1x C9120AXE-B, 1x AIR-AP-T-RAIL-R, 1x AIR-AP-BRACKET-1 to OSI Global - PO-26415 + +t#1ZJW78500303834941 +1x C9120AXE-B Pls ship with SN: FJC27141WLU + +1x AIR-AP-T-RAIL-R + +1x AIR-AP-BRACKET-1 + +Best Regards, + +Joe. + +--- + +# US Receiving | luckywolf29 | EBAY: 03-14718-50867 | 10/06/2026 | partially received + +*Thread: 1 message(s), 2026-06-24 17:33 → 2026-06-24 17:33* + +## Message 1 — 2026-06-24 17:33 +- **From:** Joe Bui +- **To:** QC | IPS +- **Cc:** Daniel Vu +- **Subject:** Re: US Receiving | luckywolf29 | EBAY: 03-14718-50867 | 10/06/2026 | partially received + +*done. +Please help to return + +2x PWR-C1-350WAC-P: DCC2304B04R, DCC2503B41T + +Best Regards, + +Joe. + +--- + +# Done and help connect + +*Thread: 2 message(s), 2026-06-25 08:56 → 2026-06-25 13:22* + +## Message 1 — 2026-06-25 08:56 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Daniel Vu , Victor LE +- **Subject:** Re: Done and help connect + +*done. +Please install* PVDM4-32 *(keep L23,24 online) +line 23: PID: ISR4331/K9 , VID: V04 , SN: FLM1940W0QB | RESULT: PASS WITH +WARNING +line 24: PID: ISR4331/K9 , VID: V01 , SN: FLM1927W11W | RESULT: PASS + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-25 13:22 +- **From:** Joe Bui +- **To:** Kay +- **Cc:** Ronaldo + IP Supply , Daniel Vu , Victor LE +- **Subject:** Re: Done and help connect + +the units below connected. +TS1 * C1924 +TS2 * CW1621MR +TS3 * CISCO1841 +TS4 * C9120AXE +TS5 * CW1621MR +TS6 * CW1621MR +TS7 * C9124AXI +TS8 * C9124AXI +TS11 * IE-4010-16S12P +TS 23, * ISR4331 +TS 24 * ISR4331 + +Best Regards, + +Joe. + +--- + +# 2x C9300-NM-8X to PIVIT GLOBAL - PO-256981 + +*Thread: 1 message(s), 2026-06-25 09:21 → 2026-06-25 09:21* + +## Message 1 — 2026-06-25 09:21 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 2x C9300-NM-8X to PIVIT GLOBAL - PO-256981 + +hi Boss, + +no more C9300-NM-8X USED here. + +Best Regards, + +Joe. + +--- + +# CISCO2821 + +*Thread: 1 message(s), 2026-06-25 14:54 → 2026-06-25 14:54* + +## Message 1 — 2026-06-25 14:54 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** kiet.phan@apactech.io +- **Subject:** Re: CISCO2821 + +TS12 + +Best Regards, + +Joe. + +--- + +# USB cover and Power cover of C9120AXE to OSI Global - PO-26415 + +*Thread: 2 message(s), 2026-06-25 15:36 → 2026-06-25 17:28* + +## Message 1 — 2026-06-25 15:36 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: USB cover and Power cover of C9120AXE to OSI Global - PO-26415 +- **Attachments:** 6r8w1C0aob7PQzaN.png, ZZ8etd0gziO3P7Qq.png + +1 set? + +Best Regards, + +Joe. + +--- +## Message 2 — 2026-06-25 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: USB cover and Power cover of C9120AXE to OSI Global - PO-26415 +- **Attachments:** 6r8w1C0aob7PQzaN.png, ZZ8etd0gziO3P7Qq.png + +t#1ZJW78500301470570 +The USB cover and power cover for the C9120AXE are shown in the photo below. +Best Regards, + +Joe. + +--- + +# 4x CISCO1841 + +*Thread: 1 message(s), 2026-06-25 16:40 → 2026-06-25 16:40* + +## Message 1 — 2026-06-25 16:40 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply +- **Subject:** Re: 4x CISCO1841 + +ts13-16 + +Best Regards, + +Joe. + +--- + +# 3x CISCO891-K9 to OSI Global - PO-26501 + +*Thread: 1 message(s), 2026-06-25 17:28 → 2026-06-25 17:28* + +## Message 1 — 2026-06-25 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x CISCO891-K9 to OSI Global - PO-26501 + +T#1zjw78500320830467 + +3x CISCO891-K9 USED with Power cubes + Power cable. +FTX183383M8 +FTX18518357 +FGL211323HR +PSU +dth1918d2l7 +dth2022d4q8 +dth2022d4lz + +Best Regards, + +Joe. + +--- + +# 3x C9200CX-12P-2X2G-E to OSI Global - PO-26496 + +*Thread: 1 message(s), 2026-06-25 17:28 → 2026-06-25 17:28* + +## Message 1 — 2026-06-25 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 3x C9200CX-12P-2X2G-E to OSI Global - PO-26496 + +t#1ZJW78500334411250 +3x C9200CX-12P-2X2G-E USED + +FJC28281TXR +FJC28311W14 +FJC28311W9J + +Best Regards, + +Joe. + +--- + +# 6x C9300-NM-2Y, 0x FedEx 927-521-598 to Trifecta Networks, LLC - PO-309601 + +*Thread: 1 message(s), 2026-06-25 17:28 → 2026-06-25 17:28* + +## Message 1 — 2026-06-25 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 6x C9300-NM-2Y, 0x FedEx 927-521-598 to Trifecta Networks, LLC - PO-309601 + +T#873575620567 +6x C9300-NM-2Y USED +5x +FJZ251911DH +FOC24165Z60 +FJZ25030VJC +FOC24125U5Z +FJZ25030TZG + +another unit shown the system was shipped to PIVIT +C9300-NM-2Y V01 +FJZ2808TUJU PIVIT GLOBAL - PO-253191 +*System s/n show XJZ2808TUJU. + +Best Regards, + +Joe. + +--- + +# 1x C9200CX-12P-2X2G-A to Network Craze (BTV) - PO-P31125 + +*Thread: 1 message(s), 2026-06-25 17:28 → 2026-06-25 17:28* + +## Message 1 — 2026-06-25 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1x C9200CX-12P-2X2G-A to Network Craze (BTV) - PO-P31125 + +t#1ZJW78500231236840 + +1x C9200CX-12P-2X2G-A + +Please check whether serial number *FJC272310VC* is for a +*C9200CX-12P-2X2G-A*. + +yes, the s/n above is a *C9200CX-12P-2X2G-A* +Best Regards, + +Joe. + +--- + +# 42x PWR-C1-715WAC-P to Curvature LLC - PO-1361774-I + +*Thread: 1 message(s), 2026-06-25 17:28 → 2026-06-25 17:28* + +## Message 1 — 2026-06-25 17:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 42x PWR-C1-715WAC-P to Curvature LLC - PO-1361774-I + +T#873530090274 +42x PWR-C1-715WAC-P note-P ; shipping tomorrow OK +*Plz ship all SN xxx27... or higher* +*36x* +LIT2736A6LU +LIT2732C75W +LIT2736A6ES +LIT2724CT3F +LIT2726A3G4 +LIT2736A6GK +LIT2724CT6P +LIT2732C7FH +LIT2726A3Y9 +LIT2732C7DV +LIT2732C7GC +LIT2736A6PC +LIT2726A35H +LIT2726A3TY +LIT2724CT9G +LIT2724CT29 +LIT2724CT95 +LIT2732C77V +LIT2736A6TU +LIT2726A3JE +LIT2732C7J6 +LIT2736A6LH +LIT2732C7AY +LIT2732C765 +LIT2732C77S +LIT2736A65F +LIT2736A6JD +LIT2732C7SR +LIT2724CT9T +LIT2736A6T2 +LIT2724CTEP +LIT2732C7JQ +LIT2724CTPX +LIT2732C7GN +LIT2726A3VJ +DCC2913C1MB + +Best Regards, + +Joe. + +--- + +# WS-C3750G-24T-S 382244521829/Fedex + +*Thread: 1 message(s), 2026-06-26 09:04 → 2026-06-26 09:04* + +## Message 1 — 2026-06-26 09:04 +- **From:** Joe Bui +- **To:** Victor | IPS +- **Cc:** Daniel Vu , Kay , Ronaldo + IP Supply +- **Subject:** Re: WS-C3750G-24T-S 382244521829/Fedex + +will do. + +Best Regards, + +Joe. + +On Thu, Jun 25, 2026 at 11:42 PM Victor | IPS +wrote: + +--- + +# Import Australia Fedex / TNT + +*Thread: 1 message(s), 2026-06-26 14:00 → 2026-06-26 14:00* + +## Message 1 — 2026-06-26 14:00 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Kay | IPSupply , Victor +- **Subject:** Re: Import Australia Fedex / TNT + +Will do, thanks! +Best Regards, + +Joe. + +--- + +# SAS-BACKPLANE + +*Thread: 1 message(s), 2026-06-26 14:28 → 2026-06-26 14:28* + +## Message 1 — 2026-06-26 14:28 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Cc:** Victor +- **Subject:** Re: SAS-BACKPLANE + +Will do! +Best Regards, + +Joe. + +--- + +# 1 mode button for IE-4010-16S12P to LSI - PO 189133 - Shipping from CA + +*Thread: 1 message(s), 2026-06-26 15:15 → 2026-06-26 15:15* + +## Message 1 — 2026-06-26 15:15 +- **From:** Joe Bui +- **To:** Daniel Vu +- **Subject:** Re: 1 mode button for IE-4010-16S12P to LSI - PO 189133 - Shipping from CA +- **Attachments:** NPDsyod20tz0IdgU.png + +t#1ZJW78504436235307 +1 black plastic button for IE-4010-16S12P (plz pull from other unit) +the black plastic button comes with the whole module. +FDO244114ZK +*picture sent via TEAM. +*plz ask the the customer to send back a whole module. + +Best Regards, + +Joe. + +--- \ No newline at end of file diff --git a/example/1_extraction.md b/example/1_extraction.md new file mode 100644 index 0000000..d725680 --- /dev/null +++ b/example/1_extraction.md @@ -0,0 +1,97 @@ +# IP Supply — Shipment extraction from 1.md (4 prompts) + +Compiled from a full read of `example/1.md` (all 10,546 lines). SNs quoted exactly. + +## Summary counts +- **Prompt 1 — Shipped:** ~145 shipment/return sections, ~700+ individual SNs (each has a `t#` tracking or is a confirmed outbound PO/return). **Kept/held:** ~12 explicit groups. +- **Prompt 2 — Items with issue:** ~24 groups / 30+ faulty/troubleshooting SNs. +- **Prompt 3 — Transferred to AUS:** ~10 "Import Australia" shipments, 150+ SNs. +- **Prompt 4 — xxxx-xxxx-xxxx codes (shipped/outbound):** 27 codes. + +> Note: prompt 1's full per-SN list is very large. This file captures the analytical lists (2/3/4) in full plus prompt-1 kept items and the shipment index. For every SN under each shipment, see the corresponding section in `1.md`. + +--- + +## Prompt 1 — Kept / NOT shipped +- QSFP-40G-SR-BD lot `10-2945-02` (TNT Import) — "total 8 units only, the rest keep in US", "*not here yet" +- 4x JNP-SFP-25G-SR — "*not here yet" +- C9200-STACK ×28 + STACK-T4-50CM ×10 — "keep aside, will ship AUS" (see AUS list) +- C9120AXE-B FJC28081EXK — "already shipped to CMS last wk" (do not reship) +- QFX top-cover kept aside (for C9120AXE-B FJC27151F4C return) +- QSFP-40G-LR4 SPC23020002 — "can't find it here" +- M.2 SSDs / EM7455/EM7430 355813079879315 — "→ next shipment" (held) +- WS-C2960X-48TS-L FOC2111S08L — NOB, staged for AUS +- MR86-HW Q3AE-DMMG-D9KV — "Do NOT ship" + +## Prompt 2 — Items with an issue (PID | SN | reason) +- C9300-24P-A/E | FCW2303DHNT | "van bi loi"; earlier "BOOT FAIL W..." +- C9120AXE-B | FJC27041KKE | TS24, "recover them" +- C9120AXE-E | FGL2812LK6C | TS12 +- C9120AXE-B | FJC27102CXZ | "no console / chuyen sang line khac" +- SUP32/PFC2/MSFC2 | SAL1338Z2TC / SAL1339ZJD8 / SAL1339ZGPX | "Traceback ... Error75" +- C9300-24P-E | FCW2238S0BA | "line 5 bi loi" +- NIM-2GE-CU-SFP | FOC23503PHV, FOC24331W30 | bad → returned +- MV86-HW | Q3AE-EGKE-B3X2, Q3AE-SZD8-3PPD, Q3AE-6S3U-Y6N5, Q3AE-VWFF-6MGG, Q3AE-8P53-P74T, Q3AE-SFXM-7CK2 | "failed test / LED orange" +- C8300-1N1S-6T | FLM290910DT, FLM280510M6 | "RFID module broken, can't fix" +- WS-SUP32-GE-3B | SAL09402986 | "damaged power connector" (returned) +- MR86-HW (6 units, no SN) | — | "LED orange when tested" (OSI PO-25694) +- N5K-C5596UP | (TS17/TS21) | "no console" +- C1111-8PLTEEAWB (2) | — | "no console after restart" +- WS-C3750X-48P/24P-S | batch | "most were bad, scratches" +- DS-C9148T-K9 | JPG2603008A | "can't unbend chassis/ports" +- CISCO2821 | FTX1134A22A, FTX0950C0GD, FTX1418AKP2 | missing FAN/PSU/faceplate +- ISR4331/K9 | FLM1940W0QB | "PASS WITH WARNING" +- WS-C3560G-24PS-S | FOC1124Z45D | "no console, no faceplate" +- C9120AXE-B (return) | FGL2812LPJG, FJC27151F4C | return; one "without top cover from AUS" + +## Prompt 3 — SN transferred to AUS / Australia +(dedicated "Import Australia" shipments — key SNs) + +**C9200-STACK batch (t#1ZJW78500439236591):** +SFP-10G-LRM: FNS22050YND, FNS23051B30, FNS23051B32, FNS230514Q4, FNS23051B20, OPM23170H22 +C9200-STACK (28): JAE234004PC, JAE234004T3, JAE25360Z1S, JAE25360ZXV, JAE25360ZXW, JAE25360WQ5, JAE25210K5G, JAE25360U84, JAE25360U7W, JAE26440B4B, JAE26402RM2, FDO24260JB2, JAE2610039Z, JAE25210GZQ, FDO19321P8C, JAE25360VU0, FDO20120G3J, JAE23051476, JAE230601NH, FVH27510R69, JAE25161CTG, FDO24250TUS, FDO24250T0B, FDO24260G32 +STACK-T4-50CM (10): LCC2428GA36, LCC2618GGEJ, MOP2732A3H9, LCC2246GX01, LCC2625GFEE, MOC261800C4, MOC261801GT, MOC261700NW, MOP2732A3EX, LCC2320GCQW +AIR-AP1562E-B-K9 FJC263610EP; EX-SFP-10GE-SR SCJ19YP0M8, SCJ19YP0V4, SCJ19YP02N, SAZH1TSH + +**Import Australia UPS (t#1ZJW78500415223596):** UCSX-TPM-002C FCH270476WX, FCH26177EG0, FCH270476HD, FCH251572R7; PAN-SFP-PLUS-SR MU90S5H, MU60V2X, MU20TFU, MU211ZP; NIM-2GE-CU-SFP FOC250624L6, FOC250624QT, FOC24400EXW, FOC21452FDH, FOC263359EC; JNP-SFP-25G-SR S1A1M31A751BAB, S1A1M31A7517WR, S1A1M31A751BVZ, S1A1M31A751BFQ; NVME 22293A26BAF6, 22293A447730; NIM-ES2-8 SFOC194350CH, SFOC24484UR9 + +**Import Australia UPS (t#1ZJW78500423326317):** PWR-80W-AC DAB192754P8, DAB194450WP; MS120-8LP Q2BX-YLYW-556A; STACK-T4-50CM LCC2920G58F; XEON-6342 2A2109BF5F0F8383RKXA, 2A2134BF51728CD8RKXA, 2A226ABF4F28BBEARKXA, 2A2076BC995F5353RKXA, 3A4819C0FC3F792ARKXA, 3A481A1EB9C113CFRKXA; C9500-40X FJC254223DA + +**Import Australia UPS (t#1ZJW78500431774363):** GLC-BX-D 080322BD001; N9K-C93180YC-EX FDO2252023P, FDO21482ECD, FDO21111F2A; WS-F6K-PFC3B SAD092705FY + +**Import Australia Fedex/TNT (t#873308530323):** C9300-24T-A FJC2333S06H, FJC2333S05T; C9200-STACK (20) FVH29100T7W, FVH29100X6E, FVH2910151B, FVH29100XBB, FVH29100VEM, FVH29100TH7, FVH29100VQ1, FVH29100U1P, FVH29100TNL, JAE23180HMY, JAE25360VTV, FDO23290KA5, FDO24260J5C, JAE241108B5, FDO23290LAT, JAE26360XUR, JAE26382LDW, JAE25360VD8, FDO22263HYZ, FDO22040VZ4; C9200L-48P-4X-E FOC2608054S; WS-SUP32-GE-3B SAL12330S7D + +**TNT/Fedex (make New in AUS, T#873256774277):** C9300-24T-E-WS FOC2721YA6K, FOC2721Y72K, FOC2648YCCD, FOC2721YA6F; WS-C2960X-48TS-L FOC2111S08L; C9120AXI FJC25432C7X, FJC25432CB7, FJC25432CA2, FJC25432C7S + +## Prompt 4 — xxxx-xxxx-xxxx hyphenated codes (shipped/outbound) +| code | context | +|---|---| +| 17-14693-01192 | ship PWR-115W-AC (DAB264260LD) | +| 10-2945-02 | TNT Import — QSFP-40G-SR-BD lot (8 shipped) | +| 10-14642-61136 | return C9300-24P-A (FJC2340S02R) | +| 14-14726-39035 | ship MR36-HW (Q3AJ-49HS-7EJT) | +| 04-14738-90912 | ship IPO-500-EXP-MOD (09FC19500851) | +| 18-14713-58108 | ship 2x CP-840 (TCL251100KM, TCL2511007X) | +| 02-14762-32221 | ship MA-MNT-MR-17-MR36 (CCA45679958) | +| 17-14713-99371 | ship C9136I-ROW (FGL2702LXZV) | +| 05-14746-55384 | ship VIC3-4FXS/DID (FOC14317P5Z) | +| 02-14656-21410 | return WS-SUP32-GE-3B set | +| 23-14741-66101 | ship AIR-ACC1530-PMK1 (JNV23453733) | +| 18-14577-09030 | return 2x C9120AXE-B (FJC27141WFH, FJC24441S1F) | +| 05-14777-19977 | ship 2x PVDM2-64 (FOC123546Z2) | +| 03-14766-07874 | ship GLC-ZX-SM-RGD (SPC1432030T) | +| 08-14781-17608 | ship 2x PWR-C1-440WDC (ART2210FCJL, ART2210FCDR) | +| 27-14612-29455-P01 | AUS — Micron MTFDDAV240TDS | +| 22-14679-31676 | return NIM-2GE-CU-SFP (FOC24331W30) | +| 26-14668-35871 | return NIM-2GE-CU-SFP (FOC23503PHV) | +| 17-14781-37655 | ship EX-UM-4SFPP-MR (XS0221420145) | +| 14-14782-66558 | ship 2x WS-C3560G-24PS-E | +| 18-14787-11692 | ship VIC3-4FXS/DID (FOC18375W7G) | +| 16-14788-52149 | ship VIC3-4FXS/DID (FOC16036FFK) | +| 21-14778-64209 | ship PVDM2-64 (FOC13313DX8) | +| 14-14784-46115 | ship VIC3-4FXS/DID (FOC17361MNE) | +| 13-14800-40754 | ship ASR-9902-2P-KIT | +| 15-14694-40587 | return 2x MR86-HW | +| 03-14718-50867 | return 2x PWR-C1-350WAC-P | + +Excluded (incoming, not outbound): 12-14747-30779 (eBay receiving), 24-14738-31605 (return never completed). diff --git a/example/1_shipment_analysis.md b/example/1_shipment_analysis.md new file mode 100644 index 0000000..d24c4f8 --- /dev/null +++ b/example/1_shipment_analysis.md @@ -0,0 +1,357 @@ +# IP Supply — Joe Bui → Daniel Vu Shipment Analysis + +Compiled from a full read of `example/1.md` (all 10,546 lines). SNs are quoted exactly as written (including inconsistent lowercase and leading-`S`/`X` prefixes). Items #2, #3, #4 are cross-referenced against the shipped context. + +--- + +## 1. SN Shipped vs SN Kept + +### A) SHIPPED (grouped by section — each has a `t#` tracking number or is a confirmed outbound customer/PO shipment) + +**1x C9300-24P-E → Network Craze (BTV) PO-P30531 — `t#1ZJW78500211632137`** (PID C9300-24P-E) +FOC2427U033, LIT24223GHD (PWR-C1-715WAC), NID2425W1DA4, NID2421W0MS6, NID2410W0EUZ + +**1x C9200CX-12P-2X2G-E → Summit 360 PO-75588 — `t#1ZJW78500335076497`** +FJC28281TSH + +**6x MA-MNT-MR-16 → OSI Global PO-25740 — `t#1ZJW78500318099129`** +BCAA0004946, BCAA0004888, BCAA0004880, BCAA0004892, BCAA0004968, BCAA0004878 + +**15x PWR-C1-715WAC-P → Curvature PO-1360562-I — `t#381683654045`** +ART2217P09A, DCC2304C1DA, DCC2805C48Y, DCC2823C1YN, ART2302P9CR, ART2302P9Y1, ART2302P9T4, ART2250P7JZ, DCC2530C4XE, DCC2541CJUN, DCC2541CGZK, DCC2541CJYF, DCC2541CJY7, ART2350P4N2, ART2302P9PF + +**2x N540-RCKMT-19 → Procurri PO-AT 109692 — `t#872413464140`** (no unit SNs listed) + +**40x GLC-BX-D / GLC-BX-U → DHD PO-72125 — `t#1ZJW78500335530889`** (PID GLC-BX-D / GLC-BX-U) +ACW2853072T, ACW285306VG, ACW28530746, ACW2853074J, ACW2853074F, ACW285306V2, ACW285306XH, ACW28530757, ACW28530753, ACW2853074B, ACW2853073W, ACW285306XE, ACW285306WU, ACW2853073N, ACW2853072B, ACW28530755, ACW2853072V, ACW285306WW, ACW2853074K, ACW28530747, ACW285306XQ, ACW28530750, ACW2853072M, ACW2853073Q, ACW285306X0, ACW285306WZ, ACW285306X9, ACW285306WN, ACW2853075D, ACW2853074S, ACW28530749, ACW285306VQ, ACW2853075F, ACW2853075E, ACW285306V1, ACW28530751, ACW285306XJ, ACW285306WH, ACW28530754, ACW28530743, NDG21190929, NDG21364652, NDG21190449 + +**15x C9300-NM-8X → Curvature PO-1360736-I — `t#391683375950`** +FJZ27177878, FOC250718RD, FJZ23141KYB, FOC21351WND, FJZ243504TU, FJZ23090CJC, FJZ24131BYC, FOC2243931X, FJZ23141MB3, FJZ23300DKJ, FOC221047UU, FJZ264676Q6, FJZ2436096X, FOC22442R41, FOC2243539R + +**5x JNP-FAN-1RU → Terabit PO-2631 — `t#872509139509`** (new SNs SBCFX…, old SNs listed too) +New: SBCFX3650, SBCFX3630, SBCFX3659, SBCFX3654, SBCGB5835 | Old: WF0216430251, WF0216430522, WF0216430139, WF0216430127, JNV23455010 + +**TNT Import Economy — `t#872479468286`** (mixed AUS/import box; see also list 3) +PWR-C49E-300AC-F: QCS18391UD9, PAC18385DBZ | 14x C9120AXI: FJC25432C6Y, FJC25432C5G, FJC25432C9T, FJC25432CA1, FJC25432C7Q, FJC26361XQC, FJC25432C7T, FJC25432C5D, FJC25432C3D, FJC25432CAK, FJC25432C4F, FJC25432CBA, FJC25432C73, FJC25432C74 | QSFP-40G-SR-BD lot `10-2945-02` (see list 4) | C9200L-48P-4X-E: JAE263024R0, JAE263023SP + +**10x AIR-ACC1530-PMK1 → Curvature PO-1360802-I — `t#381737217720`** +JNV23453768, JNV23453766, JNV23453765, JNV23453767, JNV23453769, JNV23453771, JNV23453773, JNV23453779, JNV23453775, JNV23453777 + +**7x GLC-BX-U → DHD PO-72125 — `t#1ZJW78500326506931`** +SNDG19490387, SNDG19490597, SNDG19490604, SNDG19490723, SNDG19490316, SNDG19490724, SNDG19491086 + +**100x C9120AXE-B-REF → CMS PO-0272806 — `t#872507852844`** (28x, PID C9120AXE-B) +FJC27081CA2, FJC24381DM7, FJC24381E8W, FJC24311C2L, FJC24381DV4, FJC24401SHB, FJC250618AX, FJC24331ATB, FJC242916V0, FJC24381DV2, FJC250618KG, FJC2428180H, FJC24381DV9, FJC27102DKZ, FJC24511LK7, FJC24381DUJ, FJC27081CAY, FJC27081CA0, FJC27081CAX, FJC27081CA1, FJC25331KQW, FJC24401SKB, FJC242916W2, FJC242612Y5, FJC242817ZG, FJC270918G9, FJC27043K60, FJC271823UE + +**1x C892FSP-K9 → DHD PO-72258 — `t#1ZJW78500336414128`** +FGL1741211R (chassis), DTH2022D4TT (PSU) + +**2x FAN-T2 → NetworkTigers PO-260601-5** (no t# but confirmed outbound blind ship) +ACI232100KY, ACI232104V7 + +**4x MA-MNT-MR-16 → OSI Global PO-25782 — `t#1ZJW78500312990541`** +BCAA0004882, BCAA0004886, BCAA0004685, BCAA0004681 + +**1x PWR-115W-AC (NIB) → ship** `17-14693-01192` — DAB264260LD (see list 4) + +**12x GLC-FE-100FX-RGD → Curvature PO-1360771-C — `t#381735687048`** +ACW25411AVL, ACW25411AVT, ACW25411AVU, ACW25411AVW, ACW25411AVM, ACW29350R80, ACW26092B5L, ACW25401EX5, ACW25401EWT, ACW25401EWS, ACW29350R5B, ACW29350R61 + +**2x C9300-24P-A → PIVIT PO-256093/255979 — `t#872564644148`** +FCW2426D13K, FOC2432L240 | PWR: LIT23172YE6, LIT241822YE | FAN: NID2425W1DUR, NID2425W1DA9, NID2325W096X, NID2425W1D7F, NID2425W1D7G, NID2410W0EUY + +**2x C9200L-48P-4X-E → OSI Global PO-25828 — `t#1ZJW78500338590210`** +JAE254300DF, JAE254300C2 | PWR-C5-1KWAC: DCI25251CV2, ART2526D03V + +**3x C9200CX-12P-2X2G-E → OSI Global PO-25601 — `t#1ZJW78500323402987`** +FJC28311W43, FJC29281QU8, FJC28281TVG + +**2x C9500X-ACCKIT-19I → Curvature PO-1360186-I — `t#381765230154`** +JNV23455406, JNV23455408 + +**2x PWR-500-DC-F → DHD PO-72280 — `t#1ZJW78500333086177`** +L101QR002SANP, L375SL00J2AHP + +**1x C9500X-ACCKIT-19I → Network Craze PO-P30393 — `t#1ZJW78500126302164`** +JNV23455398 + +**48x C9120AXE-B-REF → CMS PO-0272591 — `t#872563690107`** (16x) +FJC24381E2G, FJC2420116U, FJC25111HC6, FJC25101JED, FJC271823UB, FJC271823UC, FJC242916W1, FJC270918G7, FJC24381DU8, FJC242916UX, FJC27081CAU, FJC262921GQ, FJC24401SL1, FJC242916V3, FJC262922NZ, FJC26261DEM + +**1x C9300-24P-A return** `10-14642-61136` (return context — see list 4): FJC2340S02R + C9300-NM-8X FJZ23370ZN8, PWR LIT23272YEP, PWR ART2327D11J, FAN NID2233W0GF0/NID2233W0GEZ/NID2233W0GCP + +**5x AIR-ACC1530-PMK1 → Curvature PO-1360813-I — `t#381764510886`** +JNV23453780, JNV23453782, JNV23453784, JNV23453786, JNV23453788 + +**3x MA-MNT-MR-17 → PIVIT PO-256336 — `t#1ZJW78501322986956`** +Bracket: JNV23455338, JNV23455340, JNV23455342 | Screw-kit: JNV23455022, JNV23455014, JNV23455024 + +**10x SFP-10/25G-LR-S → Summit 360 PO-75910 — `t#1ZJW78500335396543`** +SINL2926020T, SINL292605CM, SINL292602ZQ, SINL292605JM, SINL2926035S, SINL292604R8, SINL292602KR, SINL29260305, SINL292605K0, SINL292605J9 + +**4x NXA-PAC-1100W-PE2 → ChannelWorks/Relutech PO-14846 — `t#872562736621`** +ART2432F5YX, ART2432F5XJ, ART2336F4BH, ART2432F5TX + +**14x MEM-C8200L-8GB → PO-23836** (blind ship; arrived pack 1ZW5715F0492097333) +80AD011836824D7C05, 80AD01202343D248EC, 80AD01174932A1F851, 80AD011836824D7BFA, 80AD011836824D7D98, 80AD011836824D7D9C, 80AD01202343D2493A, 80AD01202343D248C4, 80AD01202343D2492F, 80AD01202343D248BD, 80AD011836824D7D9E, 80AD011836824D7C27, 80AD011836824D7C03, 80AD011836824D7C0F + +**1x CISCO2511-DC → Strategic Telecom PO-5602**: chassis 251100148 / line16 SN 16203226; DC PSU from CISCO2511-DC 251362180. *(tracking t# ambiguous in source — see caveats)* + +**1x C9300-48P-E → OSI Global PO-25874 — `t#1ZJW78500334596641`** +FCW2411G0D2, DCC2352C5BZ (PWR), NID2403W0WGW, NID2403W0WGX, NID2403W0WGR (FAN) + +**1x C9K-PWR-930WDC-R + CAB → Alliance Networking PO-13500 — `T#872621854979`** +LIT23142VGU, JNV23455373 + +**1x AIR-CT2504-50-K9 → InTown Suites PO-1511** (no t#): PSZ19311FL7, PSU dab192152nt +**1x AIR-CT2504-50-K9 → InTown Suites PO-1512** (no t#): PSZ19311BTJ, PSU DAB184550PZ + +**1x MEM-4400-8G → Curvature PO-1360805-C — `t#381792604872`**: MT18KSF1G72AZ-1G6E1 + +**1x WS-C3560CX-8XPD-S → Network Craze PO-P30632 — `t#1ZJW78500234219032`**: FOC1943W1GE + +**9x MA-MNT-MR-17 → CXtec PO-D1238993 — `t#1ZJW78501207890357`** +Bracket: JNV23455339, JNV23455341, JNV23455343, JNV23455345, JNV23455347, JNV23455301, JNV23455303, JNV23455302, JNV23455304 | Screw-kit: JNV23455230, JNV23455403, JNV23455401, JNV23455399, JNV23455397, JNV23455409, JNV23455411, JNV23455407, JNV23455405 + +**4x MA-MNT-MR-17 → Network Craze PO-P30602 — `t#1ZJW78500234078220`** +Bracket: JNV23455344, JNV23455346, JNV23455348, JNV23455337 | Screw-kit: JNV23455243, JNV23455241, JNV23455245, JNV23455247 + +**1x C3KX-PWR-440WDC → Tri Tower PO46160 — `t#872619441290`**: ART1851F57V +**1x NXA-FAN-160CFM-PE → ChannelWorks PO-14860 — `t#872619260338`**: ACI2302029Q +**1x DS-C9132T-K9 → PIVIT PO-256275 — `t#872615037247`**: JPG2303002Z; PSU ART2311FQQ2/ART2311FQQ3; FAN DCH2309RBW6/DCH2309RBU1/DCH2309RBWC/DCH2309RBUK +**2x ISR4431/K9 → Procurri PO-AT 110114 — `t#872670021815`**: FJC2216A0RJ, FJC2216A0NW; PSU LIT220636NW/LIT220636LD +**1x FACE-C9200L-48P-4X → P3 Systems PO-16605 — `t#872669917879`**: jnv23455079 +**2x ONS-SI-GE-EX → OSI PO-25799 — `t#1ZJW78500319978178`**: OPC14490579, OPC14490266 +**10x CP-840-BUN-K9 → Curvature PO-1359761-C — `t#381809072478`**: TCL283100SH, TCL283101CD, TCL283100SB, TCL283100W4, TCL283101KW, TCL28310148, TCL2831014A, TCL283101D7, TCL2831015E, TCL283101EK; CP-840-BAT VK24061166691, VK24061166724, VK24061161095, VK24061166799, VK24061167605, VK24061167630, VK24061166466, VK24061166507, VK24061166679, VK24061160412 +**1x ISR1100-4G → Cuadrant PO-20029** (no t#): FCH2324L000, PSU DAB2630Y34N +**5x MA-MNT-MR-16 → OSI PO-25913 — `#1ZJW78500308687566`**: BCAA0004684, BCAA0004696, BCAA0004690, BCAA0004686, BCAA0004697 +**2x WS-C3850-24XU-E → Curvature PO-1360972-I — `t#381820077820`**: FCW2049D07B, FOC2022X1EY; PWR LIT1928181A/LIT193501E6 +**1x C9200CX-12P-2X2G-E → Summit 360 PO-75588 — `t#1ZJW78500306899233`**: FJC28311W9J +**8x ASR1001-X-PWR-DC → Whaley PO-11876 — `t#1ZJW78500312491643`**: DTN1826W0B4, DTN2423W00N, DTN1826W0A8, DTN2423W02W, DTN2423W03U, DTN1826W0BK, DTN2423W00R, DTN1826W08S +**1x C9200L-48P-4X-E → PIVIT PO-256499 — `t#872810044838`**: JAE254300TZ; PWR ART2518D02V +**4x C9K-PWR-930WDC-R → Alliance PO-13501 — `t#872814251278`**: LIT23292H6V, LIT23142UVQ, LIT23142VEP, LIT23292GZ5; CAB JNV23455327, JNV23455376, JNV23455375, JNV23455374 +**2x PWR-C1-440WDC → OSI PO-26035 — `t#1ZJW78500310136665`**: ART2210FCD6, ART2045F6AN +**1x MR36-HW → ship** `14-14726-39035`: Q3AJ-49HS-7EJT; MA-MNT-MR-17-MR36 bracket JNV23455306, screw JNV23455232 +**1x IPO-500-EXP-MOD (ship)** `04-14738-90912`: 09FC19500851 +**32x C9120AXE-B-REF → CMS PO-0272591 — `t#872795599363`** (14x): FJC2629226K, FJC26261MLJ, FJC271823UD, FGL2812LK6C, FJC253813PF, FJC253813N5, FJC242817ZV, FJC242916WK, FJC270918FR, FJC262921HB, FJC26291G8Q, FJC262921KW, FJC24511N52, FJC26261DF0 +**2x CP-840 (ship)** `18-14713-58108`: TCL251100KM, TCL2511007X; BAT VK20111200194, VK21010862870 +**1x NCS-5501 → Alturna PO-3029066 — `t#1ZJW78500421598260`**: FOC2240R0AT; PSU POG22138QA8/POG22138Q4A; FAN fox2240p4lk/fox2240p4ld +**2x CP-840-BUN-K9 → Curvature PO-1359761-C — `t#381920793553`**: TCL2831014P, TCL2831013M; BAT VK24061167091, VK24061167651; CP-800-USBCH BCAA0003455, BCAA0003454 +**2x C9300-NM-2Y → PICS POUS021998 — `t#1ZJW78501219294694`**: FVH27311HXT, FVH271412E4 +**12x MA-MNT-MR-17 → Network Craze PO-P30763 — `t#1ZJW78500212235289`**: Bracket JNV23455305/07/09/11/13/15/17/19/21/23/08/10; Screw-kit JNV23455248/42/46/38/44/31/29/40/35/33/06/04 +**22x GLC-BX-U → DHD PO-72125 — `t#1ZJW78500303941272`**: ACW260317J1, ACW253814ZC, ACW22420VHX, ACW22360JX5, ACW22280L75, ACW25300BBS, ACW260317HU, ACW25300BC6, ACW260317HP, ACW25300BBL, ACW260317HR, ACW254116WP, ACW260317HL, ACW253814Z8, ACW260317HM, ACW253814ZK, ACW260317HK, SACW223704XE, SACW222004N6, SACW22320433, SNDG21330838, SNDG21316271 +**1x C9136I-ROW (ship)** `17-14713-99371`: FGL2702LXZV +**1x C9K-T1-FANTRAY → CentricsIT PO-PPO161840 — `t#872868140028`**: ACI240502AL +**1x VIC3-4FXS/DID (ship)** `05-14746-55384`: FOC14317P5Z +**3x CW9166I-MR → OSI PO-26130 — `t#1ZJW78500339659109`**: WNH27251NKD, WNH27132J0E, WNH272727QY +**5x FAN-T2 → P3 Systems PO-16613 — `t#873284420010`**: NID2322W0YG1, NID2322W0X6Z, NID2321W0J16, NID2322W0X6V, NID2543W12ZR +**1x IE-3300-8T2S-E → LSI PO189062 — `T#872974553634`**: FCW2538YNGA +**2x C9300-NM-8X → DHD PO-72397 — `t#1ZJW78500305025320`**: FOC21351W2T, FOC22311G6R +**1x ISR4321-AX/K9 → OSI PO-26102 — `t#1ZJW78500329476692`**: FLM2235W0XR; PSU PST22398CLI +**12x C9300-NM-8X → OSI PO-26122 — `t#1ZJW78500313613714`**: FOC241359GB, FJZ2519DM8M, FJZ25192EFE, FOC22363USG, FJZ262617SE, FOC25201VKC, FOC25201W04, FOC25201VE1, FOC23325Q9G, FOC25212688, FOC233148RN, FOC2521268E +**2x C9200CX-12P-2X2G-E → CXtec PO-D1239684 — `t#1ZJW78501218435506`**: FJC28311VYA, FJC28281TSG +**30x GLC-LH-SMD → Curvature PO-1361175-I — `t#381970115329`**: SAVJ205030ZH, SAVJ205030G6, SAVJ205030J5, SAVJ205030ZF, SAVJ205030JC, SAVJ205030JB, SAVJ205030S2, SAVJ205030ZZ, SAVJ205030S6, SAVJ19523TYX, SAVJ205030HN, SAVJ205030ZX, SAVJ205030Z5, SAVJ205237CE, SAVJ21093372, SAVJ19523187, SAVJ1952318U, SAVJ1952319G, SAVJ19523W6F, SAVJ2018345P, SAVJ1952325Z, SAVJ1952317W, SAVJ19523174, SAVJ212830YC, SAVJ205030G1, SAVJ205030H6, SAVJ205030LX, SFNS17290RWE, SFNS17290RVC, SFNS17290KG0 +**20x PWR-C1-715WAC-P → Curvature PO-1360734-I — `t#381939491149`**: LIT2732C7SJ, LIT2724CTA3, LIT2724CT2Q, LIT2724CTDQ, LIT2724CTMN, LIT2736A692, LIT2736A6LG, LIT2724CTSH, LIT2736A69F, LIT2736A6WK, DCC2503CGS5, DCC2322CA43, DCC2322CA2N, ART2250P7J0, DCC2322C9VT, ART2302P40J, DCC2709C15T, DCC2326C947, DCC2326C1G2, ART2252PEMA +**2x N540-PWR400-A → Choice IT PO-9963 — `t#872971860863`**: LIT2833A9PW, LIT2633A3FW +**1x CW9162I-MR + brackets → OSI PO-26157 — `T#1ZJW78500329611133`**: Q5AA-JNPC-SYDC +**11x JNP-FAN-1RU → Terabit PO-2637 — `t#873024723380`**: SBCFX3636, SBCFX3638, SBCFX3629, SBCFX3637, SBCFX3631, SBCFX3633, SBCFX3626, SBCFX3630, SBCFX3628, SBCFX3627, SBCFX3639 +**2x C9300L-48P-4G → Optimum Data PO148044 — `T#873023423180`**: jnv23454010, jnv23454014 +**2x PAN-SFP-PLUS-SR → Curvature PO-1361282-C — `t#381995817390`**: AS21M9F, MUJ1XLG +**1x DS-C9132T-K9 → PIVIT PO-256275 — `t#873022693197`**: JPG242700E5; PSU ART2343F4DR/ART2428F2FS; FAN DCH2450R9W5/DCH2450R9VX/DCH2425RWR8/DCH2425RWQ9 +**4x C892FSP-K9 → DHD PO-72376 — `t#1ZJW78500318706338`**: FGL17392360, FGL1740222S, FGL1740224X, FGL1740224E; PSU DTH2022D4L2/DTH2022D4QA/DTH2022D4SH/DTH2022D4M3 +**5x C8300-1N1S-6T → PICS POUK014158 — `t#6557395235`**: FLM27161325, FLM280411TT, FLM2508115B, FLM26031027, FLM284510NN; PWR-CC1-250WAC LIT2627AYQP, LIT2537AWA5, LIT2633A4Z9, LIT2633A5CK, LIT24303K7W, LIT2633A4J9, LIT2541CP77, LIT2541CQPG, LIT2633A9WZ, LIT24303KP9 +**4x C9300-NM-2Y → Network Craze PO-P30694 — `t#1ZJW78500210812382`**: SFVH30060WU5, SFVH30060X35, SFVH30060WS4, SFVH30060X1N +**1x MA-MNT-MR-16 → Network Craze PO-P30630 — `t#1ZJW78500231876748`**: BCAA0004691 +**5x PWR-C5-125WAC → Curvature PO-1361370-I — `t#382045593645`**: LIT224646LA, LIT25132RKW, LIT252022AP, LIT25132Q3X, ART2515DD6L +**2x MA-MNT-MR-16 → OSI PO-25945 — `t#1ZJW78500314925760`**: BCAA0004693, BCAA0004692 +**1x SFP-10/25G-LR-S → Network Craze PO-P30877 — `t#1ZJW78500114844379`**: INL292605CE +**1x SFP-10/25G-LR-S → Network Craze PO-P30665 — `t#1ZJW78500208198186`**: INL2926049T +**100x C9120AXE-B-REF → CMS PO-0272806 — `t#872714085922`** (21x): FJC27102CXY, FJC27102CSS, FJC27041KKE, FJC27081CAW, FJC27041K9U, FJC27041K89, FJC25081ALQ, FJC27081CA3, FJC25101JGZ, FJC25061LWW, FJC24381DUC, FJC26291GP3, FJC242916V4, FJC24381DWD, FJC250618B7, FJC25101JJW, FJC24381E5G, FJC25101JJV, FJC27102CXZ, FJC24441S1F, FJC27141WFH +**1x ISR4431-VSEC/K9 → OSI PO-25916 — `t#1ZJW78500338315053`**: FJC1938D0HL; PVDM4-64 FOC20325TWL; PWR LIT192606KN/LIT192606UZ +**1x GLC-ZX-SM-RGD (ship)** `03-14766-07874`: SPC1432030T +**2x PVDM2-64 (ship)** `05-14777-19977`: FOC123546Z2 (then FOC12372KLW) +**2x C9130AXI-K → ship (PP Invoice 151709)**: KWC25280F99, KWC25280F98 (then KWC25280FO6, KWC25280FIZ) +**10x MA-ANT-27 → Curvature PO-1361163-C — `t#382071721362`**: JNV23455500, JNV23455498, JNV23455502, JNV23455504, JNV23455506, JNV23455508, JNV23455510, IPSNSN00406, IPSNSN00407 +**10x C9500-ACCKITH-19I → Curvature PO-1361430-I — `t#1ZJW78500317898428`**: BCAA0001977, BCAA0001825, BCAA0001834, BCAA0001832, BCAA0001978, BCAA0001830, BCAA0001836, BCAA0001987, BCAA0001983, BCAA0001833 +**1x PWR-C1-1100WAC + 1x C9300-48P-E → OSI PO-26259 — `t#1ZJW78500334123151`**: DTN2045V211; C9300-48P-E FOC2502L5ZA; FAN DCH2315RLG8/ACI29021K92/DCZ274108RR; PWR LIT2732C77P +**8x WS-C2960L-16TS-LL → Network Craze PO-P30928 — `t#1ZJW78500208572815`**: FCW2117A3H3, FCW2222A3HU, FCW2204A60Q, FCW2212A3JN, FCW2212A3HN, FCW2121A5NT, FCW2204A60T, FCW2212A3MP +**2x EX3400-24P → OSI PO-26193 — `t#1ZJW78500309505796`**: NW3619150623, NW0221080057; PSU 1EDX933091Y/1EDX93308VC/1EDX8450CFG/1EDXA390HGS; FAN VS0219111481/VS0219111477/VS0218393632/VS0218393630 +**1x C9300-24P-E → ACE IT PO-21047**: FOC2432L2T3; PWR LIT2724CTPM; FAN DCH2340R5US; NID2325W09CK, NID2421W0MS7 +**2x ASR1001-X-PWR-DC → DHD PO-72431 — `t#1ZJW78500111913844`**: DTN1826W0JX, DTN2617W05R +**15x MV32-HW → Curvature PO-1361001-C — `t#1ZJW78500129707203` + `t#382142640681`**: Q2PV-2885-9WH5, Q2PV-599H-DNSD, Q2PV-C6EG-KB2J, Q2PV-A6NU-EQX8, Q2PV-DL34-7UEG, Q2PV-WP5A-5HGM, Q2PV-KQL5-GFS3, Q2PV-VPCA-HBCB, Q2PV-LQ7U-3RFS, Q2PV-GQMH-F5LJ, Q2PV-5ZQ9-5DD8, Q2PV-VW84-729Z, Q2PV-GFSK-KDPC, Q2PV-3X3G-2QU2, Q2PV-EJ4U-9EG4 +**2x PWR-C1-440WDC (ship)** `08-14781-17608`: ART2210FCJL, ART2210FCDR +**20x GLC-LH-SM + 4x C9300L-STACK-KIT + 12x PWR-C1-1100WAC-P → Recurrent PO-P54352 — `t#873227845989`**: GLC-LH-SM OPA13145127, OPC11490602, OPC13452818, OPA12488354, OPA12461629, FNS1246118P, OPC12501727, OPA15380628, OPC12471538, OPC11440385, OPC10271313, FNS12240PMS, FNS1227077E, OPC11241282, AGC1131U7JP, AGC1346UBQH, OPA14370699, FNS11300241, OPA12486510, OPC11241469 | STACK-KIT FOC26247L3T, FOC25340E9D, FOC26484MCW, FOC254126JM, FOC25412EY3, FOC26213ULK, FOC25331HE5, FOC26247F8J + STACK-T3-50CM LCC2427PS6Q/LCC2427PR5P/LCC2427PJYI/LCC2427QZDW | PWR ART2231FKAQ, DCC2241DAJ1, QCS24053HRC, ART2231FKDK, DCC2511DY95, DCC2412D6E2, DCC2241DAE8, QCS24083FK4, ART2231FKDC, DCC2241DAGY, DCC2241DAG9, DCC2241DAH2 +**15x MR86-HW → OSI PO-25694 — `t#1ZJW78500303053437`**: Q3AE-AY5R-YV22, JNV23455414, Q3AE-2MKJ-V78D, Q3AE-3PRL-VL68, Q3AE-52NF-QY6E, Q3AE-RNQP-HXGT, Q3AE-9FKB-VBJ7, Q3AE-DDPF-UH9A; mounts cca45680063/065/073/151/165/163/149/157 (DO NOT ship Q3AE-DMMG-D9KV) +**1x ISR4321-AX/K9 → OSI PO-26102 — `t#1ZJW78500329796793`**: FLM2043W0ZU +**1x ACS-1900-RM-19 → Townsend PO-25552 — `t#873227456345`** (kit, no unit SN) +**13x PWR-C1-1100WAC-P → Curvature PO-1361500-C — `t#382097988184`**: DCC2412D6F5, DCC2726D600, DCC2511DUJY, ART2445P0ZL, DCC2731D677, DCC2604DF8R, DCC2412D6GA, DCC2512D6P3, DCC2452DLB1, DCC2444D5UA, DCC2224D0D3, QCS24083FF7, DCC2509DLKS +**4x STACK-T4-1M → NetworkTigers PO-260617-9**: LCC2250H0D6, LCC2249HJR3, LCC2250H0CT, LCC2249HJR4 +**1x C9300-NM-2Y → Network Craze PO-P30954 — `t#1ZJW78500230187182`**: SFVH30060X33 +**1x C9124AXE-B → Curvature PO-1361442-C — `t#382097919736`**: FJC2718199M +**12x SFP-10/25G-LR-S → Knowledge Computers PO-131683 — `t#873226458385`**: MZH2823028E, MZH28230287, MZH282301J2, MZH282301J1, MZH282301J0, MZH282301J7, MZH282301JG, MZH282301HH, MZH282301H3, MZH282301H4, MZH282301H5, MZH282301H6 +**5x C8300-1N1S-6T → PICS POUS022509 — `t#873226023861`** (4x): FLM283610SG, FLM2837104P, FLM251010SH, FLM290910DT; PWR-CC1-250WAC LIT2537AVZ7/LIT2537AWF6/LIT2627CLY6/LIT2633A462/LIT2627CP7W/LIT2627AYNU/LIT2537AWAE/LIT2633A4MX +**4x PVDM3-256 → Datacom PO-8202**: FOC15201M24, FOC19496SRC, FOC16064Z1Z, FOC1542480P +**1x JNP-FAN-1RU → Terabit PO-2637 — `t#873282114550`**: SBCFX3604 (old WF0219412892) +**3x N6K-C6001-FAN-B → Curvature PO-1361562-C — `t#382123623753`**: FOX2052PDHN, FOX2052PDE0, FOX2052PDGZ +**4x C9300-24T-E-WS → (TNT) — `T#873256774277`**: FOC2721YA6K, FOC2721Y72K, FOC2648YCCD, FOC2721YA6F; pwr-c1-350wac-p DCC2647B46Z/DCC2721B0TT/DCC2721B0UH/DCC2721B0U3 +**2x DS-C9148T-48PETK9 + PSU/FAN/rail → OSI PO-26316 — `t#1ZJW78500308687477`**: JPG2603008A, JPG27110023; PSU ART2311FQQ1/ART2311FQZW/ART2350F0R3/ART2451F407; FAN DCH2450R9UE/DCH2425RWR5/DCH21320U0Z/DCH2450R9U6/DCH2309RBTW/DCH2309RBUD/DCH2309RBTY/DCH2309RBW9; rail JNV23455439/JNV23455441 +**1x C9120AXE-B → OSI PO-26027 — `T#1ZJW78500319054862`**: FJC26261DFS +**3x C9300-24P-A → Trifecta PO-309537 — `t#873281900663` + `T#873324218515`**: FCW2426D13K, FJB2314B091, FJC2322S0UF; PWR LIT2724CTLN/LIT2724CTED/LIT2724CT36; FAN DCH2302RED8/DCH2302R76V/DCH2431REXC +**2x NXK-ACC-KIT-1RU → Procurri PO-AT 111099 — `t#873281039577`**: JNV23454848, JNV23454854 +**1x PWR-500-DC-F → DHD PO-72280 — `t#1ZJW78500305395654`**: L101SL000QAPP +**50x SFP-10G-LR → Curvature PO-1361607-I — `T#382142894893`**: acw260519b3, acw2605199k, acw2605199g, acw260519ak, acw2605199u, acw26091r0c, acw26091qyz, acw26091r01, acw26091qz5, acw26091qzu, acw252937ad, acw252935bd, acw252934vc, acw252933w4, acw252933w0, acw26110xwb, acw26110xwj, acw26110xxe, acw26110xx2, acw26110xwr, acw25291p6p, acw25291p75, acw25291p6s, acw25291p6a, acw25291p69, acw26110zdk, acw26110zet, acw26110zdl, acw26110zdb, acw26110zf1, acw2615189s, acw261518an, acw261518ak, acw2620042v, acw26200423, acw26192t8x, acw26192t8z, acw26192t8l, acw26192t8j, acw26192t92, acw26110yam, acw26110yap, acw26110ybw, acw26110yhe, acw26110yjb, acw26041w0q, acw26041w13, acw26041w1s, acw26041w1p, acw26041w0a +**6x C9300-NM-8X + 10x SFP-10G-SR → Tredent PO-25754 — `t#1ZJW78500321246427`**: FJZ27411UR0, FJZ2626149P, FJZ2626146T, FOC230984VG, FJZ26261486, FJZ26251J9J; SFP SAVD1926A3ME, SAVD1909A2R2, SAVD1909A2P8, SAVD1926A5ZS, SAVD1926A0BV, SAVD1919AKHX, SAVD1926A3D7, SAVD1926A5ZG, SAVD1926A0NR, SAVD1926A0PJ +**1x C8200-1N-4T → DHD PO-72509 — `t#1ZJW78500334942418`**: FGL2703L7EF +**1x MA-ANT-27 → Curvature PO-1361163-C — `t#382139053391`**: JNV23455420 +**1x EX-UM-4SFPP-MR (ship)** `17-14781-37655`: XS0221420145 +**2x WS-C3560G-24PS-E (ship)** `14-14782-66558` (no unit SN) +**2x C9300-48P-E + PWR → Data Networks PO-20158986 — `t#873411659986`**: FOC2530LZV6, FOC2720Y3K3; PWR SDCC2550C1TS, SLIT2842AJKX +**20x C9300-NM-8X → Curvature PO-1361627-I — `T#1ZJW78500336683230`**: FOC22447FB0, FOC252520ZB, FJZ250407V3, FOC25062DMY, FJZ23141JWL, FJZ2444179V, FOC26452WP0, FOC222897W6, FOC221049XD, FOC24145T67, FOC24151HA4, FJZ2626139Z, FJZ26251ARU, FOC22442VA0, FOC22273U5U, FOC23246NZY, FJZ23321MWY, FOC230984BC, FJZ23150JUP, FOC23285F2V; faceplates JNV23454926/924/922/920/917/919 +**VIC3-4FXS/DID (ship)** `18-14787-11692`: FOC18375W7G; `16-14788-52149`: FOC16036FFK; `14-14784-46115`: FOC17361MNE +**1x PVDM2-64 (ship)** `21-14778-64209`: FOC13313DX8 +**3x IE-4010-16S12P → LSI PO 189133 — `t#873471359207`**: FDO2311J4UU, FDO2326J0U6, FDO2233U0GV; PWR-RGD-AC-DC DTH2214024Q/DTH212901F7/DTH1941006H/DTH2230002D/DTH2230002G/MP5B10700CB +**4x ISR4321-V/K9 + 2x ISR4331-V/K9 → CXtec PO-D1240982 — `t#1ZJW78501211711523`**: FLM2146V035, FLM2137V0YL, FLM2221W0C8, FLM2229V188; PSU JNV23452553/2555/2545/2547/2549/2551 +**2x GLC-T-RGD → Curvature PO-1361001-C — `t#873468937279`**: ACW28350BNZ, ACW28350C51 +**5x SFP-10G-T-X → ChannelWorks PO-14948 — `t#873468898750`**: ACW29080WSJ, ACW29080J4D, ACW29021EB6, ACW29081JY1, ACW29080FQL +**10x GLC-LH-SM → GlobalNet Pro PO-16524**: SOPC15471170, SOPC15471254, SOPC15471186, SOPC15471175, SOPC15471394, SOPC15471495, SOPC15471241, SOPC15471196, SOPC15471373, SOPC15471239 +**6x MR46-HW → PO-23854**: Q3AC-EM2G-7YQB, Q3AC-HR8D-SKQQ, Q3AC-ZGGB-7KH8, Q3AC-FHVK-PUFD, Q3AC-EC8J-J5L4, Q3AC-MUBP-Z6H6 +**1x C8200-RM-19 → DHD PO-72509 — `t#1ZJW78500300871915`** (rack ear, no unit SN) +**2x MEM-C8300-32GB → RetroHardware PO-12770 — `t#1ZJW78500304585709`**: S802C0F21122DBA344A, S802C0F21122DBA3464 +**11x CW9166I-MR → INTELECA PO-20105 — `t#873509498579`**: KWC27180B7W, KWC28490GA9, KWC270908BV, KWC2712060N, KWC27170EHK, KWC28490G6D, KWC27110UCV, KWC270908AP, KWC27110U5B, KWC27110UB0, KWC27110UCX +**8x CS-DS-C32S-FAN-E + 4x CS-DS-CAC-650W-E → Procurri PO-DS 111503 — `t#873526593860`**: FAN DCH2309RBUK/DCH2309RBW6/DCH2309RBWC/DCH2309RBU1; PSU ART2311FQQ3/ART2504F89E/ART2311FQQ2/ART2504F8H7 +**2x AIR-AP1562I-S-K9 (ship, Invoice 151717)**: FGL2346L5CG, FGL2431N019 +**3x PWR-C49-300AC → Curvature PO-1361761-C — `t#873528345784`**: PAC14370LDZ, QCS1252B0A0, QCS1214B0CA +**1x C9300X-24Y-A → Network Craze PO-P30894 — `t#1ZJW78500214710752`**: FOC2631YKE6; PWR DCC2717C5H0; FAN DCZ262502FD/DCZ262502H7/DCZ262502G4 +**1x C9300-48U-A → PIVIT PO-256970 — `t#1ZJW78500218523966`**: FJC25171FJT; PWR DTN2131V1MW; FAN DCH2245RP2S; NID2550W0SD2; DCZ28420RJH +**32x J9150D → Curvature PO-1361323-C — `t#873507576964`**: CN82KBV1M1, CN82KBV0S8, CN82KBV51F, CN82KBV0MN, CN82KBV35B, CN82KBV1G0, CN82KBV5K9, CN82KBV19X, CN82KBV32Y, CN82KBV5TJ, CN83KBV52D, CN82KBV0DQ, CN82KBV7C0, CN82KBV19D, CN82KBV154, CN82KBV5N0, CN82KBV0JP, CN81KBV0KN, CN82KBV4YD, CN82KBV21P, CN82KBV57K, CN82KBV5TH, CN82KBV0MM, MY95KC90HW, MY81KC9070, CN13KJV57L, MY81KC910C, MY81KC907P, MY81KC908C, MY81KC90JG, MY81KC907N, MY81KC90CM +**2x QSFP-100G-SR1.2 → Recurrent PO-P54386 — `t#873526921770`**: INL27130FVW, INL270405X3 +**13x MA-MNT-MR-16 → CXtec PO-D1239490 — `t#1ZJW78501215940537`**: CCA45680155, CCA45680167, CCA45680161, CCA45680061, CCA45680153, CCA45680075, CCA45680168, CCA45680159, CCA45680059, CCA45680067, CCA45680069, CCA45680071, BCAA0004947 +**1x C9120AXE-B → OSI PO-26415 — `t#1ZJW78500303834941`**: FJC27141WLU +**3x CISCO891-K9 → OSI PO-26501 — `T#1zjw78500320830467`**: FTX183383M8, FTX18518357, FGL211323HR; PSU dth1918d2l7/dth2022d4q8/dth2022d4lz +**3x C9200CX-12P-2X2G-E → OSI PO-26496 — `t#1ZJW78500334411250`**: FJC28281TXR, FJC28311W14, FJC28311W9J +**6x C9300-NM-2Y → Trifecta PO-309601 — `T#873575620567`**: FJZ251911DH, FOC24165Z60, FJZ25030VJC, FOC24125U5Z, FJZ25030TZG +**1x C9200CX-12P-2X2G-A → Network Craze PO-P31125 — `t#1ZJW78500231236840`**: FJC272310VC +**42x PWR-C1-715WAC-P → Curvature PO-1361774-I — `T#873530090274`** (36x): LIT2736A6LU, LIT2732C75W, LIT2736A6ES, LIT2724CT3F, LIT2726A3G4, LIT2736A6GK, LIT2724CT6P, LIT2732C7FH, LIT2726A3Y9, LIT2732C7DV, LIT2732C7GC, LIT2736A6PC, LIT2726A35H, LIT2726A3TY, LIT2724CT9G, LIT2724CT29, LIT2724CT95, LIT2732C77V, LIT2736A6TU, LIT2726A3JE, LIT2732C7J6, LIT2736A6LH, LIT2732C7AY, LIT2732C765, LIT2732C77S, LIT2736A65F, LIT2736A6JD, LIT2732C7SR, LIT2724CT9T, LIT2736A6T2, LIT2724CTEP, LIT2732C7JQ, LIT2724CTPX, LIT2732C7GN, LIT2726A3VJ, DCC2913C1MB +**1 button for IE-4010-16S12P → LSI PO 189133 — `t#1ZJW78504436235307`**: FDO244114ZK (module button, partial) + +**Return shipments (outbound returns):** WS-SUP32-GE-3B set SAL09402986/SAL09402B2Q/SAL094027D8 (`02-14656-21410`); C9120AXE-B FJC27141WFH + FJC24441S1F (`18-14577-09030`); NIM-2GE-CU-SFP FOC24331W30 (`22-14679-31676`); NIM-2GE-CU-SFP FOC23503PHV (`26-14668-35871`); 2x MR86-HW Q3AE-VWFF-6MGG, Q3AE-EGKE-B3X2 (`15-14694-40587`); 2x PWR-C1-350WAC-P DCC2304B04R, DCC2503B41T (`03-14718-50867`) + +*SHIPPED total: ~145 shipment/return sections, ~700+ individual serial numbers.* + +### B) KEPT / NOT SHIPPED +- QSFP-40G-SR-BD lot `10-2945-02` (TNT Import) — "total 8 units only, the rest keep in US", "*not here yet" +- 4x JNP-SFP-25G-SR (TNT Import) — "*not here yet" +- C9200-STACK ×28 + STACK-T4-50CM ×10 — "keep aside, will ship AUS" (see list 3) +- C9120AXE-B FJC28081EXK — repeatedly "already shipped to CMS last wk" (historical, do not reship) +- Top-cover kept aside (for C9120AXE-B FJC27151F4C return) +- QSFP-40G-LR4 SPC23020002 — "can't find it here" +- C9120AXE staged/keep aside (ship tomorrow): FJC27141WLU, FJC27081CEG, FJC262921J0, FJC2629225Y +- M.2 SSDs / EM7455/EM7430 355813079879315 — held for next shipment +- WS-C2960X-48TS-L FOC2111S08L — NOB, staged for AUS +- MR86-HW Q3AE-DMMG-D9KV — "Do NOT ship" + +*KEPT total: ~12 explicit kept/held item groups.* + +--- + +## 2. Items With an Issue (faulty / troubleshooting / damaged / return) + +| PID | SN | Reason | +|---|---|---| +| C9300-24P-A / C9300-24P-E | FCW2303DHNT | "line 2 van bi loi" (still faulty); earlier "khong boot duoc: BOOT FAIL W..." | +| C9120AXE-B | FJC27041KKE | "TS24 ... reconnect again so we can recover them" | +| C9120AXE-E | FGL2812LK6C | "TS12" troubleshooting (1/0 USEB) | +| C9120AXE-B | FJC27102CXZ | "line 21 ... chuyen sang line khac giup e" (no console) | +| SUP32 / PFC2 / MSFC2 | SAL1338Z2TC / SAL1339ZJD8 / SAL1339ZGPX | "bi loi -Traceback= ... Error75" | +| C9300-24P-E | FCW2238S0BA | "line 5 bi loi" | +| NIM-2GE-CU-SFP | FOC23503PHV, FOC24331W30 | bad → returned | +| MV86-HW | Q3AE-EGKE-B3X2, Q3AE-SZD8-3PPD, Q3AE-6S3U-Y6N5, Q3AE-VWFF-6MGG, Q3AE-8P53-P74T, Q3AE-SFXM-7CK2 | "failed test" / LED orange | +| C8300-1N1S-6T | FLM290910DT | "RFID module broken, can't fix" | +| C8300-1N1S-6T | FLM280510M6 | "can't fix ... RFID module broken" | +| WS-SUP32-GE-3B | SAL09402986 | "damaged power connector" (returned) | +| MR86-HW (6 units, no SN) | — | "LED orange when tested" (OSI PO-25694) | +| N5K-C5596UP | (TS17/TS21) | "PSU/FAN/LED ok but no console" | +| C1111-8PLTEEAWB (2) | — | "no console after restart" | +| WS-C3750X-48P/24P-S | batch | "most were bad, scratches" | +| DS-C9148T-K9 | JPG2603008A | "can't unbend chassis/ports" | +| CISCO2821 | FTX1134A22A, FTX0950C0GD, FTX1418AKP2 | missing FAN/PSU/faceplate | +| ISR4331/K9 | FLM1940W0QB | "PASS WITH WARNING" | +| WS-C3560G-24PS-S | FOC1124Z45D | "no console, no faceplate" | +| ISR4331 (x2) | — | "PSU missing power cab" | +| MR86-HW (return) | Q3AE-VWFF-6MGG, Q3AE-EGKE-B3X2 | returned faulty (`15-14694-40587`) | +| C9120AXE-B (return) | FGL2812LPJG, FJC27151F4C | return (`18-14577-09030`); one "without top cover from AUS" | + +*ISSUE total: ~24 item groups / 30+ individual faulty/troubleshooting SNs.* + +--- + +## 3. SN Transferred to AUS / Australia + +**C9200-STACK batch ("keep aside, will ship AUS" → Import Australia UPS `t#1ZJW78500439236591`):** +SFP-10G-LRM: FNS22050YND, FNS23051B30, FNS23051B32, FNS230514Q4, FNS23051B20, OPM23170H22 +C9200-STACK (28): JAE234004PC, JAE234004T3, JAE25360Z1S, JAE25360ZXV, JAE25360ZXW, JAE25360WQ5, JAE25210K5G, JAE25360U84, JAE25360U7W, JAE26440B4B, JAE26402RM2, FDO24260JB2, JAE2610039Z, JAE25210GZQ, FDO19321P8C, JAE25360VU0, FDO20120G3J, JAE23051476, JAE230601NH, FVH27510R69, JAE25161CTG, FDO24250TUS, FDO24250T0B, FDO24260G32 +STACK-T4-50CM (10): LCC2428GA36, LCC2618GGEJ, MOP2732A3H9, LCC2246GX01, LCC2625GFEE, MOC261800C4, MOC261801GT, MOC261700NW, MOP2732A3EX, LCC2320GCQW +AIR-AP1562E-B-K9 FJC263610EP; EX-SFP-10GE-SR SCJ19YP0M8, SCJ19YP0V4, SCJ19YP02N, SAZH1TSH + +**Import Australia UPS `t#1ZJW78500415223596`:** UCSX-TPM-002C FCH270476WX, FCH26177EG0, FCH270476HD, FCH251572R7; PAN-SFP-PLUS-SR MU90S5H, MU60V2X, MU20TFU, MU211ZP; NIM-2GE-CU-SFP FOC250624L6, FOC250624QT, FOC24400EXW, FOC21452FDH, FOC263359EC; JNP-SFP-25G-SR S1A1M31A751BAB, S1A1M31A7517WR, S1A1M31A751BVZ, S1A1M31A751BFQ; UCSX-210C-M7 (3x); NVME-SSD 22293A26BAF6, 22293A447730; SHOKZ JNV23455443; NIM-ES2-8 SFOC194350CH, SFOC24484UR9 + +**Import Australia UPS (no t#):** UCSX-ML-V5Q50G FCH272977RT, FCH272270UZ, FCH272978JZ; MTFDDAV240TDS 213931914B8A, 213931914A5B, 214131CE6FB9; EM7455/EM7430 355813079879315 + +**Import Australia UPS `t#1ZJW78500423326317`:** PWR-80W-AC DAB192754P8, DAB194450WP; CMPCT-DIN-MNT JNV23455437; MS120-8LP Q2BX-YLYW-556A, PSU HSQD76M73B1; STACK-T4-50CM LCC2920G58F; SATA-SSD-240GB 11S00VN646Y0M127A83181; XEON-6342 2A2109BF5F0F8383RKXA, 2A2134BF51728CD8RKXA, 2A226ABF4F28BBEARKXA, 2A2076BC995F5353RKXA, 3A4819C0FC3F792ARKXA, 3A481A1EB9C113CFRKXA; C9500-40X FJC254223DA + PWR DCI2504M35A/DCI2536M3VC + fans DCH2526Y0LH/0LM/0LN/0LK/0LR + +**Import Australia UPS `t#1ZJW78500431774363`:** GLC-BX-D S080322BD001 / 080322BD001; NEX-PLAYGROUND NPG02C100668500; N9K-C93180YC-EX FDO2252023P, FDO21482ECD, FDO21111F2A + NXA-FAN-30CFM-F NID2146H5I7/I8/I9/I4, NID2250H1B1/B7/197/19B + NCV2520R0QG/R0GW/R073/R0DN; WS-F6K-PFC3B SAD092705FY + +**Import Australia Fedex/TNT `t#873308530323`:** NXA-FAN-30CFM-B NID1922I1SG/1SC/1S0, NID2135I0RK, NID1922I1SE, NID2106I25F, NID2108I38W, DCH2237R3N6, NID2103I35Z, DCH21260BFD, DCH21281B4X, DCH21370ELG; C9300-24T-A FJC2333S06H, FJC2333S05T; C9200-STACK (20) FVH29100T7W, FVH29100X6E, FVH2910151B, FVH29100XBB, FVH29100VEM, FVH29100TH7, FVH29100VQ1, FVH29100U1P, FVH29100TNL, JAE23180HMY, JAE25360VTV, FDO23290KA5, FDO24260J5C, JAE241108B5, FDO23290LAT, JAE26360XUR, JAE26382LDW, JAE25360VD8, FDO22263HYZ, FDO22040VZ4; C9200L-48P-4X-E FOC2608054S; WS-SUP32-GE-3B SAL12330S7D + MSFC2A SAL12330JA2 + PFC3B SAL12330MGV + +**Import Australia UPS `t#1ZJW78500401856894`:** C3850-NM-2-40G FOC192205F3; C9300-24T-A FOC2217Q02J + +**TNT / Fedex (make New in AUS) `T#873256774277`:** 4x C9300-24T-E-WS FOC2721YA6K, FOC2721Y72K, FOC2648YCCD, FOC2721YA6F; WS-C2960X-48TS-L FOC2111S08L; XL710-QDA2 7981133843, 951013; UCSC-PSUV2-1050DC LIT23223D4H, LIT23223AH7; C9120AXI FJC25432C7X, FJC25432CB7, FJC25432CA2, FJC25432C7S; C3850-NM-4-10G foc23262kmy, fjz233020cu + +**Other AUS notes:** SSD-SATA-960G "already on the shipment to AUS"; N6K-C6001-FAN-B "already shipped to AUS"; MR86-HW / AIR-AP-BRACKET "recently arrived from AUS". + +*AUS-transfer total: ~10 Import-Australia shipments, 150+ serial numbers.* + +--- + +## 4. SN in xxxx-xxxx-xxxx Format — Shipped/Outbound Context + +| Hyphenated code | Section / context | Outbound? | +|---|---|---| +| `17-14693-01192` | ship PWR-115W-AC (DAB264260LD) | Yes | +| `10-2945-02` | TNT Import — QSFP-40G-SR-BD lot (8 shipped) | Yes | +| `10-14642-61136` | return C9300-24P-A (FJC2340S02R) | Yes | +| `14-14726-39035` | ship MR36-HW (Q3AJ-49HS-7EJT) | Yes | +| `04-14738-90912` | ship IPO-500-EXP-MOD (09FC19500851) | Yes | +| `18-14713-58108` | ship 2x CP-840 (TCL251100KM, TCL2511007X) | Yes | +| `02-14762-32221` | ship MA-MNT-MR-17-MR36 (CCA45679958) | Yes | +| `17-14713-99371` | ship C9136I-ROW (FGL2702LXZV) | Yes | +| `05-14746-55384` | ship VIC3-4FXS/DID (FOC14317P5Z) | Yes | +| `02-14656-21410` | return WS-SUP32-GE-3B set | Yes | +| `23-14741-66101` | ship AIR-ACC1530-PMK1 (JNV23453733) | Yes | +| `18-14577-09030` | return 2x C9120AXE-B (FJC27141WFH, FJC24441S1F) | Yes | +| `05-14777-19977` | ship 2x PVDM2-64 (FOC123546Z2) | Yes | +| `03-14766-07874` | ship GLC-ZX-SM-RGD (SPC1432030T) | Yes | +| `08-14781-17608` | ship 2x PWR-C1-440WDC (ART2210FCJL, ART2210FCDR) | Yes | +| `27-14612-29455-P01` | AUS — Micron MTFDDAV240TDS | Yes | +| `22-14679-31676` | return NIM-2GE-CU-SFP (FOC24331W30) | Yes | +| `26-14668-35871` | return NIM-2GE-CU-SFP (FOC23503PHV) | Yes | +| `17-14781-37655` | ship EX-UM-4SFPP-MR (XS0221420145) | Yes | +| `14-14782-66558` | ship 2x WS-C3560G-24PS-E | Yes | +| `18-14787-11692` | ship VIC3-4FXS/DID (FOC18375W7G) | Yes | +| `16-14788-52149` | ship VIC3-4FXS/DID (FOC16036FFK) | Yes | +| `21-14778-64209` | ship PVDM2-64 (FOC13313DX8) | Yes | +| `14-14784-46115` | ship VIC3-4FXS/DID (FOC17361MNE) | Yes | +| `13-14800-40754` | ship ASR-9902-2P-KIT | Yes | +| `15-14694-40587` | return 2x MR86-HW | Yes | +| `03-14718-50867` | return 2x PWR-C1-350WAC-P | Yes | + +Excluded (incoming, not outbound): `12-14747-30779` (eBay receiving), `24-14738-31605` (return never completed). + +*Hyphenated-shipped total: 27 codes.* + +--- + +## Caveats +- CISCO2511-DC PO-5602 vs DS-C9132T-K9 PO-256275: the two sections reference tracking numbers near `t#872615359982` / `t#872615037247`; SN data for each is unambiguous but the exact t# pairing is flagged. +- Many "Please help to ship/return" single-item sections have no UPS/FedEx `t#` in Joe's message (label pre-supplied); treated as outbound per domain rules. +- Lowercase SNs and leading `S`/`X` prefixes are quoted exactly as in the source. diff --git a/example/Shipped and Kept Serial Numbers - Google Gemini.md b/example/Shipped and Kept Serial Numbers - Google Gemini.md new file mode 100644 index 0000000..2601c58 --- /dev/null +++ b/example/Shipped and Kept Serial Numbers - Google Gemini.md @@ -0,0 +1,285 @@ +## You said +List all SN shipped , and the one kept + +## Gemini said +Based on the communications regarding +PO-0272806 +(100x C9120AXE-B-REF to CMS Communications, Inc.), here are the serial numbers that were successfully shipped, as well as the unit that appears to have been kept +. +SNs Shipped (Total: 69 Units) +A total of 69 units were shipped across three separate batches +: +Batch 1 (Shipped May 29, 2026 - 20 Units): +The following 20 serial numbers were shipped: FJC270918FN, FJC27041K7D, FJC270918HB, FJC2428184B, FJC242612Y8, FJC25331KK9, FJC242612YA, FJC242612Y9, FJC27111BBT, FJC234916D2, FJC242916WL, FJC24401SKH, FJC250618K5, FJC24381E9Q, FJC28081EXK, FJC250618KB, FJC24401SL0, FJC25331M5V, FJC242916VZ, and FJC24381DWC +. +Batch 2 (Shipped June 1, 2026 - 28 Units): +The following 28 serial numbers were shipped: FJC27081CA2, FJC24381DM7, FJC24381E8W, FJC24311C2L, FJC24381DV4, FJC24401SHB, FJC250618AX, FJC24331ATB, FJC242916V0, FJC24381DV2, FJC250618KG, FJC2428180H, FJC24381DV9, FJC27102DKZ, FJC24511LK7, FJC24381DUJ, FJC27081CAY, FJC27081CA0, FJC27081CAX, FJC27081CA1, FJC25331KQW, FJC24401SKB, FJC242916W2, FJC242612Y5, FJC242817ZG, FJC270918G9, FJC27043K60, and FJC271823UE +. +Batch 3 (Shipped June 5, 2026 - 21 Units): +The following 21 serial numbers were shipped: FJC27102CXY, FJC27102CSS, FJC27041KKE, FJC27081CAW, FJC27041K9U, FJC27041K89, FJC25081ALQ, FJC27081CA3, FJC25101JGZ, FJC25061LWW, FJC24381DUC, FJC26291GP3, FJC242916V4, FJC24381DWD, FJC250618B7, FJC25101JJW, FJC24381E5G, FJC25101JJV, FJC27102CXZ, FJC24441S1F, and FJC27141WFH +. +The SN Kept +FJC28081EXK +This serial number was initially documented as shipped in the first batch on May 29, 2026 +. It was subsequently excluded from later shipments (such as PO-0272591 on June 2) with the explicit note that it had "already shipped to CMS last wk" +. However, on June 8, an internal message noted to "connect to TS if you find this" regarding FJC28081EXK, indicating that despite being marked as shipped, it was likely kept or accidentally left behind in the facility +. +(Note: SN +FJC27041KKE +was also temporarily kept aside on June 2 for recovery, but it was ultimately shipped out in the third batch on June 5 +.) + +## You said +List all items with issue (SN + PID if possible) + +## Gemini said +Here are the items reported with issues, categorized by the type of problem: +Boot, System, and Connectivity Failures +PID: +C9300-24P-A | +SN: +FCW2303DHNT - This unit experienced a boot failure and displayed a "BOOT FAIL" error. +PID: +SUP32 | +SN: +SAL1338Z2TC - This unit generated a traceback error (Error75). +PID: +pfc2 | +SN: +SAL1339ZJD8 - This component generated a traceback error alongside the SUP32. +PID: +msfc2 | +SN: +SAL1339ZGPX - This component generated a traceback error alongside the SUP32. +PID: +N5K-C5596UP | +SN: +Not specified - The PSU, fans, and LEDs powered on successfully, but the unit failed to provide any console output. +Faulty or Failed Testing +PID: +NIM-2GE-CU-SFP | +SN: +FOC23503PHV - This module was explicitly marked as bad and faulty. +PID: +NIM-2GE-CU-SFP | +SN: +FOC24331W30 - This module was explicitly marked as bad and faulty. +PID: +NIM-2GE-CU | +SN: +Not specified (2 units) - These modules were tested in an ISR4331 and were suspected to be bad. +PID: +MV86-HW / MR86-HW | +SNs: +Q3AE-EGKE-B3X2, Q3AE-SZD8-3PPD, Q3AE-6S3U-Y6N5, Q3AE-VWFF-6MGG, Q3AE-8P53-P74T, Q3AE-SFXM-7CK2 - These units failed testing because they booted but the LED remained orange when an Ethernet cable was connected. +PID: +MR86-HW | +SN: +Q3AE-DMMG-D9KV - There was an explicit instruction not to ship this specific unit, indicating a probable fault. +Physical Damage (Broken Parts, Bent Chassis, Scratches) +PID: +C8300-1N1S-6T | +SN: +FLM290910DT - This chassis had a broken RFID module that could not be fixed. +PID: +C8300-1N1S-6T | +SN: +FLM280510M6 - This unit had a broken RFID module that could not be fixed, and the aesthetics were deemed unfixable. +PID: +DS-C9148T-K9 | +SN: +JPG2603008A - This switch suffered from a bent chassis and bent ports that could not be repaired. +PID: +DS-CAC-650W-E | +SNs: +ART2311FQQ3, ART2504F89E, ART2311FQQ2, ART2504F8H7 - These units were noted as having broken handles that required physical replacement. +PID: +WS-SUP32-GE-3B (Component) | +SN: +SAL09402986 - This component was returned with a damaged power connector. +PID: +IE-4010-16S12P | +SN: +FDO244114ZK - This unit was missing a black plastic mode button, which required a full module replacement to fix. +PID: +C9120AXE | +SN: +FJC27141WMG - This chassis was set aside due to physical condition and described as "most ugly". +PID: +C3850-NM-4-10G | +SNs: +FOC23262KMY, FJZ233020CU - These modules were described as "most ugly" due to physical condition. +PID: +WS-C3750X-48P-S | +SNs: +Not specified - Most units in a large batch were reported as bad with many scratches on the top of the chassis. +Missing Internal Components +PID: +CISCO2821 | +SN: +FTX1134A22A - This unit was missing its FAN, PSU, and FACEPLATE. +PID: +CISCO2821 | +SN: +FTX0950C0GD - This unit was missing its PSU and FACEPLATE. +PID: +CISCO2821 | +SN: +FTX1418AKP2 - This unit was missing its PSU and FAN. +PID: +ISR4331 | +SNs: +Not specified (2 units) - These units were missing the internal power cables that connect the PSU to the motherboard. + +## You said +List all SN transferred to AUS/Australia + +## Gemini said +Based on the records in +aJoe.md +, here are the serial numbers explicitly noted as being kept aside to ship or transferred to Australia (AUS): +C9200-STACK Modules (June 1–2 Records) +These units were instructed to be kept aside to ship to Australia +: +JAE234004PC +JAE234004T3 +JAE25360Z1S +JAE25360ZXV +JAE25360ZXW +JAE25360WQ5 +JAE25210K5G +JAE25360U84 +JAE25360U7W +JAE26440B4B +JAE26402RM2 +FDO24260JB2 +JAE2610039Z +JAE25210GZQ +FDO19321P8C +JAE25360VU0 +FDO20120G3J +JAE23051476 +JAE230601NH +FVH27510R69 +JAE25161CTG +FDO24250TUS +FDO24250T0B +FDO24260G32 +STACK-T4-50CM Modules (June 1–2 Records) +These stacking cables were also set aside for the Australia shipment +: +LCC2428GA36 +LCC2618GGEJ +MOP2732A3H9 +LCC2246GX01 +LCC2625GFEE +MOC261800C4 +MOC261801GT +MOC261700NW +MOP2732A3EX +LCC2320GCQW +Additional C9200-STACK Modules (June 19 Records) +These serial numbers were documented under the "Import Australia Fedex / TNT" shipment log to increase the overall stack module transfer total +: +FVH29100T7W +FVH29100X6E +FVH2910151B +FVH29100XBB +FVH29100VEM +FVH29100TH7 +FVH29100VQ1 +FVH29100U1P +FVH29100TNL +JAE23180HMY +JAE25360VTV +FDO23290KA5 +FDO24260J5C +JAE241108B5 +FDO23290LAT +JAE26360XUR +JAE26382LDW +JAE25360VD8 +FDO22263HYZ +FDO22040VZ4 +(Note: It is also mentioned that a batch of +SSD-SATA-960G +units was successfully sent out on a shipment to Australia, though their specific serial numbers were not recorded in the text +.) + +## You said +List all SN in this format that has been shipped: +xxxx-xxxx-xxxx + +## Gemini said +Based on the provided document, here are all the serial numbers matching the +xxxx-xxxx-xxxx +format that have been explicitly shipped +: +MR36-HW +Q3AJ-49HS-7EJT +CW9162I-MR +Q5AA-JNPC-SYDC +MV32-HW +Q2PV-2885-9WH5 +Q2PV-599H-DNSD +Q2PV-C6EG-KB2J +Q2PV-A6NU-EQX8 +Q2PV-DL34-7UEG +Q2PV-WP5A-5HGM +Q2PV-KQL5-GFS3 +Q2PV-VPCA-HBCB +Q2PV-LQ7U-3RFS +Q2PV-GQMH-F5LJ +Q2PV-5ZQ9-5DD8 +Q2PV-VW84-729Z +Q2PV-GFSK-KDPC +Q2PV-3X3G-2QU2 +Q2PV-EJ4U-9EG4 +MR86-HW +Q3AE-AY5R-YV22 +Q3AE-2MKJ-V78D +Q3AE-3PRL-VL68 +Q3AE-52NF-QY6E +Q3AE-RNQP-HXGT +Q3AE-9FKB-VBJ7 +Q3AE-DDPF-UH9A +MR46-HW +Q3AC-EM2G-7YQB +Q3AC-HR8D-SKQQ +Q3AC-ZGGB-7KH8 +Q3AC-FHVK-PUFD +Q3AC-EC8J-J5L4 +Q3AC-MUBP-Z6H6 + +## You said +Can a 7B model running on RTX 4000 8Gb GPU answer the questions above ? + +## Gemini said +Yes, it is technically possible, but it would likely struggle to provide a perfectly accurate and complete answer. Running a 7B model on an 8GB GPU to perform complex data extraction requires significant compromises. +Here is a breakdown of the technical and cognitive hurdles a 7B model would face with this specific task: +1. Hardware Constraints (VRAM Limitations) +An 8GB GPU cannot load a standard 16-bit 7B model, which requires roughly 14GB of VRAM just for the weights. To run it on an RTX 4000 (8GB), you would have to +quantize +the model (e.g., using 4-bit quantization formats like GGUF, AWQ, or EXL2). +The Weight: +A 4-bit 7B model takes up about 4 to 4.5 GB of VRAM. +The KV Cache (Context Window): +The document you provided is quite long and contains thousands of tokens. The remaining 3.5 GB of VRAM limits how much text you can feed the model at once. If the document exceeds the context limit that fits in your remaining VRAM, the model will throw an Out of Memory (OOM) error. +2. Cognitive Limitations (Accuracy and Recall) +Even if you fit the document into the model's context window, smaller 7B and 8B models (like Llama 3 8B or Mistral 7B) have known limitations with this specific type of heavy data-extraction task: +The "Needle in a Haystack" Problem: +7B models struggle to maintain attention across long texts. When asked to find scattered details (like "items with issues" mixed into dozens of emails), they frequently miss items or hallucinate incorrect associations. +List Truncation: +When asked to list 69 random, non-sequential alphanumeric strings (like the shipped serial numbers), 7B models almost always get "lazy." They will output the first 10 to 15 items and then stop, hallucinate patterns, or summarize the rest instead of completing the exact task. +Pattern Matching: +While a 7B model understands the request to find the +xxxx-xxxx-xxxx +format, an LLM is essentially guessing the next token based on probability. It is far less reliable at scanning for strict formatting rules over a massive text block than a simple Python Regular Expression (Regex) script. +The Verdict +You can run a quantized 7B model on your hardware, and it will give you a +plausible-sounding +answer. However, for a task requiring 100% accuracy in extracting dozens of random serial numbers from a long, noisy email thread, a 7B model will likely drop data, hallucinate serial numbers, or truncate the lists. +Are you currently trying to set up a local AI environment for processing these types of inventory files? +This conversation was created with Gemini Advanced. Gemini Advanced isn't available for you, but you can start a new chat about this topic. +Learn more +Gemini is AI and can make mistakes. diff --git a/example/image.png b/example/image.png new file mode 100644 index 0000000000000000000000000000000000000000..8195ec1f12d18bc47c629dab266172447805f648 GIT binary patch literal 377978 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

+g0l@Ze+F*SRKu4O(jts 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

TTUY)VFEpuXG~0#j%Mqd!eAzw$q?gH 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�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 z zvYF22WJ@ZYN+pxcO|x6uI$DxhsC>3&T3WLJFV)dH7tl*KXF6K5nYQL^Ybup)ZE5ak zY0Au-Gk@=WX0^4qwWgX{(=Bb8wq#3dTeiKqxdrZ>skZj!~%xXzzv+y!*owr5gJ*-Sc}2Atb6t?ezT)cm%2>6T1Oa-WWlOscuLBh%X1+L=zb z0&A0*=H^VMC7l7R(y5kgs=3zEscbp}`jJW{Tie^x+03ljsn*Vg=^D%yxVJQA+tclH z+uPdPXSJmEOeWLWEF6twQdvMMn{H{zfb`&{4TRPLbfuHCldWxY=k4E;Zq20I4w!#P zswvZ)ot12#-2%D+f^W{YwWQK*ZJD;tOlwCv)tbySb+o73vMrfRCY$NZWZUOtGOg+6 zrc65B*`8`^OJ-qQwk?xvO}2EjrJ82X?(FPLH>caObCPXyXSSpO`AmA&f{r=OGiN6= zSr9=g-ImT~nww@Wm^-I6o!w_vI@!9g30TnygZEj`nrUyz&TF63oC5K-wRX%)rlCLC zoNUQX3c4ws%w}3sscchoYbHCVy|radX4b;ymW9dI*5*ty1v2PJ&FM^MYFMR{GdtVT z$=S2olF4?!G6g8K&z_xbNoO*d)|TwtOvl1hrX$-n2T04NvYBjaDwXV*H>b6I&YpYj z-QL=n1$1CiI^B^?wWVgxY0EaJJ7;C)&1#!78%AbYTATNp(~-&mE1OasZF8Gbb6YzP zXrA5Do@s4Ob*5X|J38hx&xZBpH-llcW!kb}M=j}eDxGah0nQm9V^%hqY|D1GcC^n< zrdpElrM0=GdEVU4j%;(bWmZQ9=n54801yC4L_t*NoSC!J&9k%Z*}3V=oFu46>+Do| zRyNz(+Bz4c+@9%7CsY6HN~cnP+uE|N*=!aRsk3u#3NTG&THApiE$K|n>eF!0mIB#j zQZ2x~WNSLxp6O_7Yuj^nbE>l~mCa-Tp{C^D!cYAZu5>B`t%i51b_4uVaKTSH)t+hv z6$bKsgTtdkD|+BGV7M?cG|<=E)7QJQcV)iNKQuJlpUd|Q z^!5$*4h@eM1`7Fsd=J#P`=RjMH#F4K)3c&4pUaJ|D!|D8eyHV-4iCS&dUa1v*YXw1 z28RZQNAd%GJp=iH!q7-=Xkf+4rQJQt`+B-wUGrK`-#}kq->OwZg+f1!fkS}d;o<(i z?*9J%Ty9{XuYWK<)YsQP3f~KZ`CNbR0GwLDOK#Q3@Umqqx_Y`-uURut$mIuf!vh2P z-mbxXe@{>Mnpa;R$Uz-`W$(bi-~bfR2Zn|Q@`e0RzA!XY=0EKw>%to!1Td^{@mces@1Ezx}k!e%ja_|yOs~-2Zx4XYM~caDGcTFeL3jvUOGCO z?;RW*Ts7J?&_7tn^{nW5wXk{xz#r;a(cQIb^=NM)*FD$=JnZZ48HBa+gN1xy*~%3I zx!mwj0a%pJ=X$z(fNA~t{=WX6!oc8AE|<^cmo8m4G*ZYH`d6%2v1)WRJmm|+a39JS z3WeMdjK~%8xq>lx7>+W!R^)OysOt9g_OD(&1n2>dxqN;oKib>fH#{=f*T15_zrTgidT9|AIf@cfFN-h81jG`hNLc~@>Qm#b0Q3!ni0 z;6P7rZx3`150B>hhWq*k0Jp-L;o()oOP9XV-`_jfI|#!Edg1hEd4A1ke)Z_mrAzz! z`vzg@RU^64(HuypYb7WbNGvxr1Sc^0;oPcKqbrszg)u{gp}zjU(bcQqK%l#)r+=_7 zKbT*$X4TSekVI|(Uh{)1moFO{99X*YmBLUzj93mw2O~qED8L+$P#)k8d%<3N;T)JXKVK6^5RLGAE z=SGHm2L=ZR3u{)7_VsoR4Auq@_V*2R_rr31gZaV2P*1MEd!VZqB%aHU)bQyVU6t$a z>(A#3tJkdR>g^sF=+77W^ZCJ%;rx;%FBb~^0|NuSy}bhiz`2ppk>una z3Z3#RU_T~eFOP{*Ve3t0Yd<= z@K3z*g&edR+J)NfudC$?Bf}$og#qwrQ4~S0O|+KAm~y#{5z&yPQUV_!%Y{P&8A6o- z)x{H6L0Q7i%f)RiVm%(9_wRq=h>c3}%+ur5|gw&z9ySff2SIMGEv62(enV@eHz z0vWXuE{)4-h>WVhV2c5Pj?LfzfhQUw>V?WFS0%8j9JcrE@_$(Lz`wrN$X@d=1NWspDOuk5LV0VTPimJX#kj1ER zY~;B>DK)TpDif*$5Q=sT!j@w(!YQJm6wIQqc?pAx?cwpt7-tSet_ih8nSp&X(+aav z*;iV`VV1$Hw)4fIl7bWLS};udp=DW^utXve`GH@8qZJ!-s2n10Sp-{&_*AIS1`|=j zOVsAuD3nqJAvHnFX2h-wG%Vx0fJmgO<fBV{;*~ z1`bf>xXPl^c1u!Owp|yGg#vbWL~E>-ktot8#7YqLdj3Ow@1OkPjF}?t; zkTVi-Etm|65*00q9Baz(gkJ(|wPjT!QEzkGC=u1>5F>1g2xpe#7*J1OuGFx9vbaMD z*|2VHBIbh9VuK<9qnMmoNRG#3R|6Sn!1)X3T1orPp!QF<6jpaIF6fjB|0)5gN8ER1&l!$xSpm?mV zRDq*+g;)(^q;bqnV2OZeg@l!`){U=4NP`TNL@Lr#8>SjjlQyu%ab4Ss)iq2hmf@_2 zfS)3yCKM1PRmNei2=sz}~2*j_o79tV?v|M-=w=EB2>UcJ{ zFf~%kK!IX|R3^&xbyG3rpm}wPDRB737@KTsrM{~H9?pVrVIvG8&u1bTfh_;0{E9o zMXfc)*!KgdgxFBXLkNUank*7~@wjDK2x|ixiV)Z)2nZhGRbymv3+S*gH(G;%RYj=4 zsxho?Fp>?i1S32YIEa)M5klIFB_@hx*X9(9sy`7=I6;Jr=2&9_Hq5ZWNGlw3>)=d$ zqPQN^MS#PA5sV>(k->fxVuk_{2?1Y_MK~}_8!1%~0!SHzQXz>gY+K;cKnf}fMS!)j z7-!T1u2rK5Q({vND|${0)h?}+042l(JQN}rODTaT)kqM+D8fXUuqr_^VJWE3R?84j-B23NY@68%sYr^L zS04nS&8dt6V7}wVf@(zu6{DnqKZL7N`=LMzA!UGMj4@%@irHY*$oIpEF^6%+7$tCG zgOHI*Ngz^Dj4THNJ2ka+KtI7c9LttfpBapVf^LE>#%;p67+3QqmAA;|WX2n!7WIR3TVbCqNTz zyHRTgxEY4UN;Po2I&L9wm5iE7r4ozR!;+50m6pK92oyjw8;)B=2_1z_|od>*7)wWw0_*>5vmniM@7w!g3rDOfUmy zAvB1LQTr<5WjHE7?t6JA2HOZF0-oVHG zZR56Oj8RH)3X5ZlQASO*w5~2;Q)(4UB2uJW0dEVLjiw0I)q4^gxhN^jFmZxVSlsz5 z=>PJcN~Ka)SErBy&kl`XtQjMv@e)ETR47(g4;CVV3JJ?`4r7>39wtd#J} zE@z<>un|Das`?SLI3b`;3TxxpG^~zO3JkSNm9U|4s=<<57G+>^ps5TS@PSp%FgB4< zkSy`>s%G3mTE!g5H6+GZ3T<&#GZMzBZA&Sum6AmfhtOfDAL+)a(-C1o6afKX?Z(v9 z3pnYymC&yy;%;$lUEHxT;Tl^)DUcvz;N3%lH71%d3%~#n zLI|a>-2p9^oatDs-gXn!NJyI;de4HjaQ77@^5Go;GJaYOBiQfS*YL8e?8Cln>@ zIwLW)ZB30*5v2y$BVamMoyG_etr3_9r4U^JY5)^~E{zz_1%l?3Fa{#Pz*S=m=mIy` zv4I^?#kE{;f0pa%8s8=u)eZ5u zj)WVlLzayl%Z@t~6BCL}Vjil>^D_ki01yC4L_t(mLrn#TgvgO0oGp6Xjjf+3E6gCV z2!hayIgpMv#uFAnrSbKE0AgGKVZcg8u?ou*>n++(qWLAC0-F-&c0#ia(=R7D}tQMvR@ye=LnT8fb4 zcwwdd_o4sudjVStiim2;0?&lwAo7cz7gxwuR;&~Wn{y(nbvS%|IN#io{^MW1($v)k z+Y}L1{pF=U&Lo>N*^X38`|WoYi~5y4p2LrXU;t9>@&Y! z`{mvDJ}3pPPE>3dOEJRYk8c#_&dI*>!B^GDQU;_IIrFaj z?nR7v@fhXy_&CtzS(Zf^Hd_Adrx&(m=cF@mpgQO7d+%cwD^)A-Rq623i+`GitF^T) zlj&Z$9QeX8y8Y(s+f(ye_DP?3;&%h7xJ{)f{qc>}=}gPK&emkI>GYG%@Qdbw`=0pn zi?5G5`fxbDoIQJ=nN71h=FH2sB-2ezr=R`3vC6~=haUh3Z|P*mxffh4F^>#&y@V3s zVFxZ~nVsHeuRYKD{<)7l{8$QTXo1tMrhOM4(AJXKd-lu&4m|MY-`%RUwk(HW=6N3I z*0wNz zQniS><)&*F&O4yBef|@_e{^E~`sFLSB8?=N3v)b9g7I%wE`6qRUVC=l!ByoTfv5}? z-G4`O%j|4>+wX3@0}$|ofMG?9T(WXmYg>DJwzFqNUnP);Fop=Yx20V#W;>eOT3dR$ zy8J+4?8;DEU>69?P1x~xEt)ty7wLVyoa5J0f8fKo|_ z!CE79*P@5N_+~;AN-Z7*p{NE^8xlJ7zxwjaOgddVVVt$kyw;B8FTE6LQ4Fe4pdgbf zm)G8Q=gpap{n}dhee%gC|NQQs-gx7Ua=9X-5P~w&!Wd~;j8htw1jj5g!G~XbxBw*B zwjh;CC(~`uzqlL`yRnW(#V?OLa9(FNy+?EFSr=SZi~?d4C45~iop9iObK2*$&6$7X zDW^U8@S=sS^JdPT*_560z*8@Wc0)-}%Z)RvRe8Oc`0{7xe)r%7ok`HY?EDwH3X(cX ziFNi75U*T$EB!Fo=NQ z)GQm47T~0Y;N%M+(E9LCZ=81AF%>^Rmb(EcwPWQCYv-g=2k*BqJ$u##m;GAX^+stI z7=g|IVTFHgcSA!%xm;$5MNtH3gNhk4>6-~6h5%9sY3Xuiq#79>Mn-pccY#$?+k*+N zg>Sn4%1eLxL+Uj=_QLWX{@^^DTjOIzU<$J!^Y)n$cinpHS>HeJ&P5O9Mn-yb{g?mZ z=f@s<^y7bcDh#9p9^DUOt`qvD-kv2=YdBT&V$+pDp^PBG(K5RH@?XHQ&NELwUY~I9 zUUXk?e(2tN?!`#I^!zhd{NjRbci!#AWnG2QRegi`-oe~fTWyCBzV6!J{QQ!OAK8KIDVV54rk<+nfj@!2%q@W|pNXMXP-rL>!f`(eN-yXvZ| zF1qL<*KwCGTb@m4EX#s)@tp6ScF&#HoN&tNk39O6XVGe9;KK zeBr8JUvucehrG1-1*xJ(|M2@ue|Eu+J8$>m%AWp_RfYckd~f&Wn{TGIe)RD_} zbj!`aSWq>swGaZNC8b10p;}CW-H$L;q zOFi97Z@Td}L&I-KX)&SRTs?ZtO*cHVmn;Tb+jx1ZT zV)66O-13{Ne|F&oK}g-$v?rc;qOWUNdnPk9lpiXr8Xqe`*}?VfC!cxj;-CKT;;XK{ zZ_$HC9&y-`#lNqM*WYsM9Vec8S|}u@mXZco7WW*G?M>HT_mhjx^E~JA=boRtU_Yr5 z!RANjeE0W@ZaVVB(;j~0N#FNRJN=|vZ@q1F)#?k+zu>xSuKnzbFCY<~He=&&HD^+N z{{0Q$136(Ba$chg9$*CMo^4s<>&Jh2)z!q}z*|2Ir%j0m)#C8*uuw<{1bc_Jwk*at zlEUEshZO+cKe0i61K0uywr#^QL|__0M!+~iAvb~>X|#k5&xGRrL#wix*{|ihU|b-z zp_az5ul6}Z8*jdYmDpIyD5{nk5_MAQimVdLEP3IDCm(zI=fAvq+nsk2GQ>!3x#gD6 zJ@fpwTW=MKP$L9ZSD7esjQR_M`|Uq}uy3$9Rs_i)Mx>OU=gpoyQ_Iju-v&piB(?c= z+ikbewCNlh1&l+~5Icyp6w0w;zr5nAX;U|fB0&g)g_s3!l@+ zJig+Gmt3EkIgC)GBsO5*wzNXNY9~H|LoFf4UNK$S18?K zo6TnKu=UlK|LTMHKdT^V9LBLmfln}-C#I+_LkoJ8(j^Mw@Q2#i9r9 zfA6g~9(&;KQaBc2(bttf_4x1E++hSAam102KJqY#1{2BE2AAoD2cNw4uGz&)S4^22 zhx#GcrLRBze8uwqA6#^$V4lmvD=+>2lTSVU#TVlau^zl{(N8bCvT@THn3b-*=4W@` z^LQA-rbRz|-yIkK;);e%H^bDw=Gvd#d(T56gm`HvrHEMw1c@Xwio_b~H{Np5UAM)! zdisecEXS=1vt;>7$f5Swc?VBL@4ofw{wJJ(HZxplW)cQjIgZfw2v=8NvT`;C#+58iX1AVEp^D_0C3bHo|(I!c(o{{aU-@%U3v z+>oJv(eat**KB$`AkaxllN?$b^U2qX-G(5gVi*NP{r72##~(5@i{Ils1Hi zh$$MYfXgOyyKT2lxE3)Hn35Kf*u3J0+ibZdL3q44vFM@SPuqACaBv4Nn7{GVsozXY z2yRticWE>R*htrO27yPKY``M~21GF>LWEjt0!gkEU@_DnL;^grRS7 z_r=Ap6eq?IMFQhM8x@)xuf1WTgmv)+XOE4SN|lIE1ml75L_=d!OLC*>(}A}PV?qEn zqqMd!=rY-FHXMNmyOYdVS$0Zr1FV1#4<3|@~>^w1;EY_!RC%`Ghw zGNMX|F$KpzWAlyo*m;|0pLo;{(O4#s15Q5rKSnl`Ntz`pkCn_qwW&0pUCWX2|&RKhZ5 zYV$2-tY5$W!}mV=^7D0ndH>^$H{G-v_?XJgH{S&M|NQ<(gjqreBUM9veYG+X1y#yi zP5368Z~o(RzyIvR_x$PARcqe<@Z3ni)nTK#QL}1{YzPL2FHY;kVr}qP@~^ky=M0AyBn#5ikM3c zuKIpy(L+yew$&~>?!1d_u_z2H6~7V%+i$;h)9yPx``AP4CMw2BZ1@zFse9=mW!orw%KNK#wJszPm83qZ95WyXS287dhPM2pPiLV z=Ld#l5He)y;_<2g$IJf@;Qy<;2_zc8L7*8-#Yi8^z#$k!vU2E+J(@Fn@3`e=aWXQz zy5u7_k?>+Mq!92PBMMWZ&{tsL4eCb#01yC4L_t)q1Y>HLsE)5)yS9uv_dllIb!`ob zG7(0SGbakdIi0DgQ(Q3EAd*VT!GWPYX0>g(&5kn~?csq}O4SmE01qRj3Byo|z{1*S zLBJJpOGphY#z8bnKeScS{4tQsDol*VIqo)=fj$Vd@_Fvc446ND16cu=mwD>RT9 zuks2oNFzMV;fxCLl~BI%3~AjzSxjy zYY|k%5^;cuLf^(Tq;_`hezkv#LWM$B43$b29g7B4yli=%I2QD9OJhu_v$^YSbpKsf zu;|O*-FOG3Qv+cFm}O8kl5iL=L?k0$f$ACz#uA7~h;YWn8wEjNlm^PgqkC!5Xk8H#V?+8+)-zqd}2#;^HE2h@b$Pa85U6~&d~ZV*D~xy z0ujryZ4RRR=Bx3@ms6(23=O&Kc!{`Yi7!8S|Ld>H)xe(GIE5f(xt^P-w=C<^&puWJ z8G?zdNt$tBAs107H4;vIb~e+w$2OOob;|9JJ%7*{KL+w`A|q@xbu7$1gjiIJD&Kti z^%n~dIsiw}*B^hTQQWKF)UL0yJi6JmI!l-@*98*Sg-A%`17kSoP1UcCjcql3DwCmY zF@zN&{^wtRvZ16}I}b9L1BYEJ)=)o9QoHDv51Bt(`K8al3?kfk%qfQ}T{>*vgC4x& z_qJ_U!V1((s+ABF&$TVi8A2MQ5qD$db^gS<%9h)2r7RE^M#c^!$mywL#}~|-kE#>J z^bH{VvZZHs}BREHKGi2 zP64zLQ6lEnlpIq{xGz)~hOW(&3^l?am};Z|NWI5C|I2$nyZo2eTz3;SGOCO-Y8A`A z!RUWqhJY}>eWjE-4(wEFZ;Y{0spMBH8kxmQmmhfOVN69X*02!bu8-{7?sxB;F2FC2{qfb+%AkE_&Q?)0f8N}u zpL${aM73BfR>~#dxEqhb9U%j}fCpeAGRm>YM<0ABSnQip5LSy|1FmIr#|`}`7K_z4 zc)lpP4s`KXUwcy`vePbmZ@kH7?Ww(oPC@cYn zN<`pYfnXwqTeFBAc>esS3+F7Gnfi@D(9xYM!W}VM?h~A)J80fAPs*qy!Z-69$S;>TSW=*hez@_b8=e27 zGly2Z^5~*_5aZaZV{WYMLxhe1Jy;nV30&peCK!HcX?%iHN`P`>IOiCfztKyLYx;u? zLJA}J#|VL?|M5p3ghB<<*p`!sc?8KywG7-qh6H}uCg|gjKamQ}oVoYof4HMA?%Z|v zoyly=@|DXNccnmUUi)LkN3XuI>b^yH4)yi!zVl8;9&*&@Uykj#=N|P_>TkUEs_KTd zp!Z*WGgcWdZnEj-2w||X`Zy$UIusEifFPg)mdJ#r_3;GJU~v+I5n>JB!YBel7)3#~ zVuQ~GeqziluunN<%9NXLxV}E-*iM|;2~98nG=x^cvV+JWOiNKLj*m}lNT-tk43e54 zP?B1u&^HvxFmNqfD~6Z@Wq*Vtq$5zIcmDL}J$Ks^8(~q2kSW(DbxUL4Bsluw^KT5ccHeWiKm1|Ql)A*dci%myqqV=kUlSgyYm`!!%Hs&4 z3jyJfVmVm*_4-(uq*{_uN4 zD_(r!506pfNXZPwi0LQ_ZQG`V16LWLG6K{B4i6etgAfzOZO8Y0aC0yq2y4s)aT|je zvp{7)fy?EhZS$v}e)_0mj(h9%Rdd?2wJ7e!Jyr00?wpz=E+UQyZfw zc=XXnPdVds@NP(ouv`Mf5CO6ByY6{txRCE&u`JWPcX!vz%U9I?tAe&01491}=>Lu` z61NaTS|CzHx}qs};*GKRXn)s&)@Fnvr(x=z$qrPJZ@%`X%~;&CgjQh2+C43sX@pV1+m&fqDbmkEM{B8FPApiX_qHfuITPsmdp2Sv*jjXP>ILm zlv+w@5G_Km2(~Pyjr6PKhPryB4M+>@Fp{vaipnI9yu;3E7FoH%|)O^q$qesEIbF;F@`NBAYJj%w%cv<@{%R} zgSi#UmQ0)8Sglqq%feE7w&lgCB&dw)4?Xha(+;2W+@jw-^WsYt;)aGYY60eT0C7Q% zzHyIHVzdJ9ZVV=baEk((oO5H0l3fBRW2Dl+IvYZ&);J`l5|v|2hvo8xS6*}8 zrI)|9;^m>`iw)s8QLiznkAXp=pc-0E{bPT4;oP&%O4zpL#RSHP6T*m~L=rkSK3**q zsnGdCch@aoB)|CC&+mKSv9XGPS`wj}5u}vD)TLHTP6|eaN(Ye= zRm>&mo{}b>aJbD7Vw-NhmC#0t$YqESKiqMwAwJs0ne#qR2Or=NGRpyilod27pR0E_iQ1=fiaN7PvpqwCJp1I|$>4bq@quIu_0 z$S*K>G^K*K(ohaP?O;A2io zwRWCz{888b{GzYMHjIZ5E_G1#EiGc4KKazkd+eRubC@lQMTyUnvZTC;6! zt?e7e$F|&l+buV1%=h##Aw4H%G>$}I*{mF?H~#cCj#-;+vJoL#BQXAu*>MRWO{gE7 ze*C=5&UfE=@8@5vV+_Kx1SP;mgPyywgp$T~z4o@ww$_f0Y__ALZm(P?>KH;osc>?AX|t z>&6I18qn0{m6u++_~M_ZlIcu3d(Cy%{Q13i5A5t*xpKMV+SO`R6B>eU37Khb7D0uA z>f4qR^9&;Y4)TA?E2-d^Kn#nDiz;#K+YA+6d;6ecPU#yM9LNvmM+>>!;F0@gK3vtm z0d&W0AU1a#?nA=DY=etWb#Jseu z>!p{M<1ku1lt1LS<8!aQ*3-3oXrL>XUwqOjN4!4#Mo`fkisL+HTd)(bTnuUvh%nNW zIbJ+2HG&XVEEW+Z5SC-LFlCNC`cO=CS65fDShhGMPDm*gMNt@rAlg-H9;^D zv`GW1&=inNk2Vp~yB1S`+VGvi4&SA~8W=4UQSAvi^8`alu^4(Jo`{3QxAAbC)4+~le zP%I`VKL7BYmzED6deoV9u{x^6yYIa9>E|CeOlt%OZ6S2(@y8?PRD)=T?KYiS?~SZ_ zn^@DB?SAp~7cwmGveR}5>$PjY+H7ir=QxX3jC@^0r=4_yrAu3GUcbj)yZrfsPpTEo z0`>N*Z*8{yuAA?$*cV2sao9(vW>N`6?iQ(Djp6TxH$qx-b z^TOh-w%)?Qvb_GQ7gsLZZ2O(|*e5+cRzBzCqc)x5Tz&0zR{cf-@kAmK!@=8YhQIt` zT{^Q68T+G8*LA)6ZsWG!*=MJXH+(qU2(7K<000mGNkl`;kwH+nCtA!Ky#|q(i>^`1N<*{gV}|7lvVsJ*qzc z^e->=t=ad;Q{oU(%b$Pz?z9Y_2{O8x-fFP|Tv$zRW^{cV+3$Ls^<@h7F*}Se?`r3{=A#zJTL(0S* zccNPS@pRxCZM~UgV}T6gE;hoZCY0e;+i$!5w%ZoRON0>10#SoH z{GBFc?N|WD7=yqALLP9!2`A)p1BKz&2XdnqU;NX}x7_6A-jxR(urD&97qb*1n8hqy zXA|$h1#>Bm{ID7*@pnM~cXSa%Ac}#zKm_&;QT6N3K3nwr$LAe%q{KCM5JG}r#2F_Y z!=%4>@#1o*Dw1fz)_(N9D2-F2w25&7Ty2Q!UGPeN=zxWIaf*@eBl0^;m03+FkW8=l_nt}c@nTM zW;X0Th>m=NB7-%eal&Fmg^dXo232KHHH8r0lmr>v_P7GjaMx@w~dXBwr%gR=id9wo^``DS5qx1 zge-%9|HN~vU;EQe+iu4(B2L|@=X`(G?%z58oRfxz1_KcR4t0sd^*7$};fG%ydeDIk zNkXxdk%cKZOt;R9l)U7^pG}QVr5NDJwcmW^CAbix3Kdo>*09m0H~;Qh4AD(SK%;Fj zObMafmyz$6VS-kM5-SP>I8ddcvR?#J808uvjR{PIsE&|9@CMBwgAsFLks_5)9k~B~ z#~*#r_s{GV_T>^L`gU2**AlaJf5_G=_npy)%7 zKfTx9du+DxRJXqI*ppAb;mV&^H>{P$di06Kd+xdW&O2hZRaW6gn1dCw*#qL@3$N>i(XnPRz%rVCtwfLDQkOYZZci#WVK?g2O zIEXR=gmA|Vg|u86hE;4#cUSLVZZwtc2t_n)dIRI;duN>d*5JS$x8A}ju2f5}zW&-- z=U(#gW6z}19nIPFDW{#b!}dGdgq?QE5f49j2Lu?-ygMIy^q5mlPb6&Rmt1CXY=x0} z=e_rK-D7uUR3rqqUCvykkQ7)Lvi~6m9CpP1KRo-)KfduQXc49O)6c&=`ONQaz2h!t z|L{lkE_1Qmu>PAPjylq>l%&w5s(9?F=XcwEhmEErFa?!qkfAh6#~f^s81sX3esmrr zbU!`s`|rH@S}YcW2>Zp_Z;m?g%)Ohkr<{CTWqfVplzNEGU#cg|@|B7fYmEl^;X z{y(9S7*;Z@9YR?b~uQPV_o*kE4QE8a8T2%j#N`iHl2I@-P`Vaq~5YgBm(0Q zr{T_uHu@=xpDoWue|!EzTVNxes(1?Q6NjtE_vmbSKo|O@Z7z> z``#(XKK=9)r+ojX0YVhg6NC^(vzzwXv0;i;8sA~p9gaBp_&IY9$fo9N%By~ZiME)2>4jx;=NvfD^Kxg~%vXAQ zeC!0$rMzLsz4rL&r5Cy=gt+(8vcCNfKdo9>d(P=c-21>iP--9;VwNJ*V9o-81OZia zulVI<+f4HgYMV8;y>)gn^-ABsy$?SYXCz_tTcd?+Iyt)~nQWbR@s&4RdgV0@E_GB{ zM-gKd254C0f4c~xbh1G_#tM*R41+JLy0Lgwf-_e!k5oz<93I2Sl0nt8==v`w=6CLw zO3u!K`iXzUwXsLK|VzH`(;L7oHy+$o1#*_uq5R4Y%Cc)wgnVxPN$X#qhx3(D2Ce z{@!bExshTVK^h|{!tAI+4(VO7WMp)pXP|%OKz{!Gg*GKKrcGPc*OyY%P;%cV6Hbmoa^i9&gTjvt6m)_3|)J}Z@|LK z)e;EOL?AHd%B!v)=g%t&@>g%I9vL1Q z?CS2l^opx6cQMl7Suo-tGo#hv2Oqd}$%{iH!>^7G1JZNn?F$=c&vTx6`ibGfU~l)z zS4W5P{XLMn_jKoaa{V(l-?XiD{$TG*BSXvjdRHtsU_qo+qz&bchd zRBO$>25IOa`!5(7T-je3U3k!8TnBXy;a*%I>yZ5xjtmZT6;>}e@Ni z?C$B!=a&!m{O0;=T!P}1V@3}?@(94QkQ>@>{{u_k7E+aFzzo6>;b(pSoVd$PR0c*N z4Z@^w*GLI$BE&?79PwINXlKpZvoUE0_1I zdh?xMUG-~X1Xqzk!Wab&YXi*~6K|MOESES14cWhYfJIN-3~NB8f2uZWBg{ zU#@`hAjHdp8ap0@6;U3evSKqNiBk~_SZ0A-j0DP6q&&wp%Ew43!@>wTHh8o$CpOX4 zjoVU&G7_E>Q_4^%LKARxqAX<*QOUh>C79weR9#>1Vv7@BBH~UBm2F#fOe^h|9LLd^ z*q&P~m0a7R2>X8ExPXX5u#vsCT&ZU%$v2vvewBcL;kZ}|VwZ~5FCD8P;cXTK1Ta>j z!Ym<>G@O^qzKWDZYFf)JTB%g3fsA=|Kmw=OwfXq?hCqZswa|v(novRDxKQH{CAvE$&!9oLE{y!GqXTV6sK ztdz6}aw(4d>V}CT;x^c6rR*akWK;=)YC}UqwOSP#1{zo;3Z(@Sr^I0NZ%i{78-ggo z7#hMUw!RwfBKUP3w>RO>_2Z}{aQazjyKg!G?dC!i&3Vfg(T4m80$-2 z^bLc;Tg|J4sMhI$>H=^hBAdddQbKu^Ab8MPE6$niy5q$vC@3KWa|UxpAB000mGNkl z8APG$*p}s#OI4+e7TU4g!1oa~wnKtSxxTIrV{Q-wEroNlc+3X)BEq3S0G~263G~0= zrW7P6k|D-955tfcjet9zV}%I9fUB|P*gWP?szZuQHP9N{0U%D42z)I-Q5@i|6aiy| zGAoiwYY7ac*b$+YCc<1XOmrl}FrpM|6>^3&BVI#&C=@}6APwEXBVeK(s~a!*4BH&B zO0g7=#}&d6FjyI-1;-j2sU%j2DNGd62;j*;!3ZG%4Q+7EXK7Ropelzbw_pGv2=p7A zR3ed3O4SA$YzW;jHX)>hj0QSEpBN=kP^H+|76&0gC#95g9t449S)f?s)B=)9iU}nwP{INk8>1spjX>yBgdhS0T!rySX^2UYViG|a zJ3=P(ET%+AZ7_b@NJBM3S^_|0jN{oBBbH?u%0me$nB>?v7O<_>xaD9{ixx%%&=12H zwTwY zt6%=?h$9Z4*FJY-c(q0ZG`w0ag_VjHk;4eENh4-^jRxCeH=3GYaNFO4SOm z*tQrD3257lYat^es9hTh{znIzU>@pfgaVk%kmWitU?L_AQWyos=@+>QEf5zaiZbdX z5N44S4yPV6#`j~1h7FZa8)7h17{y{PF%m0D2#bV97Ka6p0cVF9j8`DZn#%x*T9yq| z0ao8O8AjkVIl*DI0z^8F18T~+?Zy(+vMsA-c2a~jm6kOl0o#OE5Fz9#2ouY#i4%s! zJ;#`u-vQ-A;H+#L{F>36M8>6dXpH12j7pAekW`Kp1J9}{RT@Q6WVuu+F{NP!C_q(~ z>ZZk`Kru*MjH!l!QQTE$A4Fcw7;NT!rpv_^Xs zDjM8zDAHjW`Vl~(RE97JVj)8aVT^5?TQ)NaK{}wMk+mzV`b7Z3nGHe^5>dtsMnMz- zOO=qGYoVGx2$&vX4@BA_-P9EnK4u@eTxtNOC8zOe$Ps3gV)CK7}v z8zqPWCn2IlVHp^ujg7H`nJHE_*jC(g8x@K$k)UZdrifs~D7d6B^f87vLjXL&aKTMe z01XOl8wnu^5Dtk=38OLBgM@2#(?0zJ-Ti}wJ$Ks&Hb%%O&-Uu->f)YLt&{+u)>=fG zG8=dzRgFcq?H0>bP~Dj0Qf*>!7oM>p1WoeIvZN-K?J1?S464O3&viqE1a&#*pw(Cg zkiHS-C}L|uwU$w7%)-C{97uyOtu;asp#&Ld-*N_13i7kvSR@q01J3MfH6R4&K(O${ zc$L$5T|91afDl=(MX84oh!7(kO;k&!mX}izf#Fj8-*HJPfdWti;FU3ky#CfZk<^yW zG>Tf2>CVp1j?T7Ovzl5v=cF>(+57C7ZJC|QLJf3&Hk(b(Zfeb>Q>oULbZbjClS(JE z>11mv)s}5<%e2nvXzy(AoHJ)mCYx!_q??6TPmM|*o)M_X%Wdv<GZtTj!d>Am2OL=GtJ4CRI<4>ou1Pr`y`vnr6=i%$u5; z(%H=Hrk2?)Fe(iQv}V%_=Fd&GG|ig1cQ%vBX0z=bb5k`evNLDSOf}EWq>^pP=FYY` zO-(JC43M1JbLKv&bZSm}d$OfDo9$?BNy0sw&ZJYB*|VEr;W_i>r88Oh2WZSBo114f zwYPRa&#c+AT5DH(d$yxJ)!LfLB$F+fEO0K{(mX5K(zI~FymYFqr8(2qHm9YzIR(o% z?VU~ok2AnMkVR{@v%RggHJwhTlF4K<{3Vm=WJ@-ggqDU^gmim*JJ6QNq?($W+S@z# z-n(hxe)|K4&CSiNsSFH)nhxOBmT7HnYMwc(sdL_(bSm52+*0FV)9i%{7uHyjPQm!L z);Z11$(H2o_Vx^{36R@5I$D#h?XB(e=PrQPS-_N**`4jc{H82$xnoXC3RXyVfT-Ks znt|QTEr5Aj=N!NjQ10w#Yj1`AmQG-DGTGGB+BCa8n{8`tZEHz3b6N-mf?CzEPUCYxXmh%%d;ok=#QQ`uyuwI!WQrkdN5Ep17V zVY;JzE~rpbGL>!1z`9MdlF4LebE-X=O18E%b);J6cXp;)QZ1Rby=S-VGrI}cHn+30 zEt5^9Ga$0Ij@H)pj#*8a=47^`qocjOHJeN}?=v$E63Eu@OeNFJO|#)@&$ee;JDXZs zJ3IHC(>Z5eXGbQPYRgPgpJ_{_+h)yfNw&1qI$MFs*^bVR*-g!@t*vR0Wip$rwPfu| zB>}f@8>}*OR#Q_;GeRf}HZ^+F`MmSjt& zCE3y1)|$z-cg~;Hlx%HnZA+&CWDW8^?Jt#tCDJvVleJsw+l5j|(3aMg3`OAFC}WK5 zvd3N;GjMVovHrdus6!Tph6aXnEBc4}b3-G&D__g^_Cg_iIM>@ZP$)pTaA2^nyT6dj zkHD4B7$>$3B!I45?V8x0RgG0a#7(2Xd$&yvW!@0rSKt7*aJ<{9T zQz#Vjxyf0D-mcyiJ-N}o!fN0{q0m1(RLB8(wUzpFxm;ggcmF_PbYykDe{eXT%jX7$ zR}T%2PyfhZVQ8@Ssqoh;S19BF`nPYOj(vSS`N4snu5Re>?d=`R1M>#* z(AA&o9qjKP%=Px?SFG$F=yV1M6WVE_(pYK!&d2YL&I zTrOYe&E@+Ca{2t=aIUX*mNJ+J3c9+w`eFJ|_nOrMxxoUky{{LF+0-yqBz%oTbE`ul(tqpM!a z7e>3fySsXpkBs*8^e!77TGQV*I+TY=xk4U>3>1cXp$+E?L;2AGz#=!WCZFqvV)*Fl zzSXa;T)Fbq;h~XS|8RaVH=KXz<>yBS`d8-$SFL`1MK7$DD-;HDxg31V2LXwpo|WDGfX$j!y#xKAW`ljb zh5o*g+#oQl3xqt-J3Km^E9CM+!##leq$q)|p`l#Q$`yd(@K9m(nl(MSLRWWRZ}0M4 zuDh>)V9D|ogSp<3;lbP>U@Iy_haP8J3R`Ud*C2L}fS@}LI6)p2!SLM8axmTn;K$SFp5Lw3ur3<4%kd?JR!XYw+;R9P%MozUK^>QK4WmX z5+Yp7mQ^Gi4qtF>-^zIqhUJQnDFIffS^)*}e2Eby*iwc_VIU`pL>0D6UJUALuw#QP zo;hw@Ybj(XROHxR7z&_BBI$=!*w-Mf7~#Mtpn`HH72pm?C~9hZH(;mM2xF|2vMdJ> z4uTM4ihy7W2PRcN47d#hT1LYtEF)2y|JOhK*Wbw>m{J>oG3+{lWO#;dDKwA__^=xP zU=S%7(T&fN+`u0dvbLP#44qU;-f|2m;IE zKom@e&RRp00x;j+Cp!=#2x}t&D-r1^0>}uYX@Jwxz_zYdm#h(M#)=cMSd1u8PNR{L zuzxeP3u%S40ltMox-k#K!f@DCftr_wH>=9&000mGNklVpDT5HUc!siS z7;#{ulqym{9l=JakWvs5^Pv)iIViL1I8Yvd1qh!^J8-Q+5h+;-LNHlGnB#b$JeKVO zbrd7u4LoRL!bmHlMF`sX|6=bypd>4f{82dVHC5GSEZ!So1Omo%S5>?5gGYD}-b;YI zkU_!=ga?5z!h7Mp8Q-p|x@Yhp5c0w^uDh$tT$ASe-5R9T?tk|@?R)!n_d8EX^sO|J zk&zLRk&&5mB(CBZV#kQC?_n-+5P~28{NrmkNCRJ@VfN*6^6ytHh(acmx{j!hS2%N{ z5CX2do(SrZ6n+?67*!NS9%LJbRvXG3*TYLamT%o!olyR7|5HlAS41R&u>lxliXUUJ zXc?!>ATe$k_c%3SoltHB&hy4vjf*OxO%&BRqdGQ%O6!QoYD%$wX~sbh8$h&(DB*#d>cswQMC1T!X)IV5JZ z6x@eQD2o{}l!+Sb8JAg*IW|0rnv%%G+Tw1FNea?7 zR55o&Jq)zAoC;i`B^e3!h1Ibm3}+^e&@a)rGR9iWLIcw(OQ{v$BaRqjggLRYSfU6N z1ej)wq8a!`2}>Y(n~0ARLX0sG8pJE5G+GPFHdHdkIOpgah9R1er$&eM0C`Y~Aw4D< zT`glwsR#(5V~i1)GD|2+2i+5~C*~A~@QIWpT{tYrC`%Zn=p`zM+HkE<34#VZ z{Eq+_O86lTCISW+BiQs{?}^ZCGAUvyW7bsHempVd#8lKYcYPl-4C+-OSt^N!A_xdG zfcK-qjpHbet8rMP#5j%{YgmtfjS|l4^*VwR4C#p!fdCV6@bT)Hkk*$%5Na(6wXUg1 zdeY^D66K|m{l^*=)N8KiM+SZ>*~|ser~_%67!pSm13|_C?A3vKHYi3Zg$yMaFo7tF zzyMfvBxlr`s16h1!UY9Fai5qhIc)E+0AoxL1laHmC9$?)y#{>H6_ilJrS!(C5CeKc za|Cv;;~0F7jFtU#tKdGjR0;wGD}xq=zz3obl!8fZEl6=|7?;XW6@@NDZgdod6kbXv zUIONd&c-MZaRiS-g(-j~Oot~EO~-K(1A;@u3* z&137=A=<(m>a`GC6vRRZ+Q9`!-f;wafeo$WwD0;}S}O}rzzB^ri3rtkg!hf+v}cJL zuLqVp)=;o#3DX2_8>RWYsCRC9}856acrc*@Tt@?lbnbWm3~TNo3=F2bOeZfRXNI+k*v0b2_~ z>8B_XQ5;^xVntByIoy%p)+il?&A$%f;)u8N`{hzwyWHp~(o zt7;9;)7tg@I?RhvtRrIKT!oNsWC*+==hTO91IJ9lR&3JB@P%(u+IpVnFiQ#OM9jg~ z%NQYyaVgw53OE>KLQ|;A_@2i=I#$4jU3tC_?Q0cHXl)*^l$mt=bn-8JDCd|9rkH5T zSa2jn@9N=d@XVgF=t%5c>Gpz#E8aoVKt~X zyPnG#LT)NO*H1-Zkb)&!3{Dkws$momN^HJg;IKvt>6iG-!S;O$CXe6VxQK8GZ z3Tuw!^;i+^R)UaHj-w5QQW=Z{i@{@5C}m)mjsrvnAy_OS>4dSBzGNY8ONx& zTn%KZIf$^}ITlV(9~V?`<}|f5SL-z$!MZF|606Y9__d%)2rTJu)&tHNJQDy_aU5c; zR;$%0iZFF_Cyb&#<@rIi*4)$-X}r2BS9&HgVN?|^7t$w0gmExl8`s8at%(k-iN>mR zOl?BOSM{pq(3k5-ml+d`!#NVKxutG}ls>{)>7=l7925G25H1XL;uz;sDP0Hk+{TXN z*clZ|9FQxiiXeHre*GxtvbD9~K`NW6^;@DH|y;~63{Efa_~JR0*! zsFES0vPcvMmD+f0;o=$P4Eq)l?r5cs z3HmA7oN|f6R#+p10fH!W9N}WBkgoKt(k&SuHPtAfj&G6Dl9Br~zm5yE*a zC`tq+4pt799`^)>p_bBwU$|Qsq$b2dWyG@N`@i51hOd|fPYi#WGD8!lAVFKNy|!w& zqi6OXKKL|gqb-m}A4B z_WkdjgI5t0@m6xj9e0Q%Iib?7gGFm3qZAG?s(th8XLjbYv-4eZX3x9pz6TkXqoZZ) zgmD~y|NGxZ_Zc&${XYRi9agiIc;6b>X~OcoEz8z%L(i)G@z$)IG3wGTZ_lUY`!ClH@kfM z;uoH^%!$y|YKK|Rk=I;v?eyvGc+R^2zI)bw_R*?WU%^Vm3Zz!09MP1?Jo509ot^Xc z-+%wlR)6A93!ZPi`>ws(+B&B1amOt;#)ih4#X&vec~3m|!t`uUZpL0K7Cnn08h)Xg z@|`E1T{Nw|vt!0y%NM;6YZED=j84H7`My>bE|_!v#N$uRoH=*?f(3Ku^>lT0gW>t} z7v^(aH{N)o*80=cYbhg>)6Q!vizl3R#@cEWGKSgtQoQ)&6I~r`c*9+~tXCU>IEzy5 zN)N5pT4UpSFj}dM-FNS=KK^JOV=M>)to&5ULz9qn_3E_?7w*@Qp9Qn&%*}l1#pf*Z zBaM@|<=mzuyZ-8{_L`B;cg}k7-aFTP3i-T2aM59iMKaWLQ%$WcqwCjQf8Es`U7ZW( z%U)IIqdMx zd}ppbyJYz?MEz1G*Nz~oqnI%!r5gq@{56)2H6{!bYfpO)r}oBQ+}f4z>g<~N-S2%v zhzu1?mho8C3DtzcaR}@^gu-n^6dvU7O!9v=%fJ&j08dyi7RM)=9H*Ft_UQ1-uh^iv zqIVf#?)s6c(WUe|MAb-FeUbiwdQyufM*vIko87r@r&euWr8Gj!(R>xb)gBtrPBe z=+P5TI$2x7gcE7axw!PwpPhB~H~glSXJ342{`~py9-br4I^)zkZol!EuYUEWU*6ip z)I^uxcH4a?o%)U2?!R|=|I(Gkfy;h!?lFfR^6;-7(w_g&v(KLYqaWzp<{pbDUd*AuNPj0>Q zfk{&~y6D0m^{#m0xo014O1Iu~`-6qz;0-taJgCNLuL-`pUawHW363fxNzfD^$^G?@ zbK<&=)=F#bIL@`#UVHS>U%Be4s|N;)tA>W3dE~B}ueCTSR47}FK!+x zy}Z0Mgg4YlEiK0$^_9`F@$oRk-ln2Dt*<@$pnWg7@|Vvn9eV7s$F|vcf{1Ik+5!3yb<&QEVI-l9RwkByc=dHZJ?f|vuDIfs z{=Ol+l|KFWZ8!b=vTuLy65>owH~V3I&F#Oq@#W&m<;BvnQekR~f5MSpSwB`83k+$v zHl=hF#W1kR8%;jrj8mR{^5L}WIgCI2;6n&Py-fO<=bxJ~Gk4oB@3`^jzj*fPr~CUB z<#KJM!4*rEEv~_ph*Y|%^^QC5Jny`7&%fZ@d+xdGfPMCT{_%&VOlZ0Fz6TFD_>fqI z6g$BcmtFY7@1I7jcyw`ZE|+8QDU_Xg);E87``ss>a>|{z-k4%$bZq@m z$DXiaaCp2LVjGquas=T_{`iug-Tcct2Kttr|Ksmpdj9z@EnZZs*C8NCI1CX!Q`n4@ zE*7#?8iAK9(Mao+_19l}-P^zZ^Rr8q_YXX~pSPgsyPg;;|NCUj6fW&wMq0q zY25H6jQsCNY=e`<4^0>{guwM`WXEGt9C~H`{GOMK%Og#xlfvXv9*)~Ya5{C9EmP^% zbPAr%8biV`#u3Dt`1z-vd;HO7zW&|s?exXn;Ajw?x3*-SeCqKjQzqdS94@n39T!Fi zwfewtsb}t-CCisr%YiRbK`lsSnwncDv}N1lIQAVW86T?#>6Vt=cHgx* zX6mGCVZbDo2K(7hFZEohqcG*W+ikloR=%Z#OINynJqS7HK=K@^dRhw=KlL1Ip_S# zH`{s#CSY;#mYYpk^vq*hY`$?hj;h)?6o#Z+Uvfv9&~PIzyX0awC8;YTO19W|qdj-p z<)@ci@W(&?G1c5c1-N7;j)-t9b8(wHbLMnB9gmksEaTO>f*N+)ZTG2@Hd3KVdr1fe z>0x#o^aVAMf1NmI^*UaotPtYKC!c)yk%w=-`R3hr+YLK^xjZ^)%H-Sb_~pBAzJ1e; zzgRy$VmMv8cKNnF_yk=IM);toZPgwVaX%AGq(#@BF}To;b0||MB;}anJqt$Ck*X z{{FKX^^=6^Ub$>aknoq#~T?RpFCy4owwim+c)35^@d-R z$JS70mMva#+UaM81dqQiLhAeP`(?_9MSHQ*hEUg$zT<%Y=tx;9GkNmV2kyEf?TQzk zf0}Y8y!2fUJhEV)y{GLt9XN~%LD@E2Y&xxdkBct)$?tyu=a`6EV5H}(xazqSF|W%+ z9O7hZD?#XInvmdJ6j7iCrN=?&NQRkizT-}Y2}Z2eF{RWHR<2gI*kTJo2^VbBO*ehu zp$EVDo$vaYw7{5@N-5v{?Yj#XE}S}bs_*-A=FFOr%`RE81ZK}Uhg0KRY6Y8dC}nY^ zJTJvL#Xbrby%;L$LkRU z>Eia9JoD7k)k*~#f)T`Vj9Wa|9kf-cRFqPwRLWpJaSX$vkiU(wJW{FTkOFt9EftOz zDP5`7E#^ZAVs^$b6Bi*KBi3l;!{RK7wULfftF689hHJLpWv}+!LRX|5;Y1p~)%rd? z<%Hubfi0(uAz(Gsx>^gIkPR$aT2^DqQ<4%ML(b`|uDxN~jV7FV>X9F;UW4-#x74vj z#fETapMCfDeUCC+fW%U`j^m*ohI{y7M{C@2n7FAaT^=8Yi4%m@b2Ki z`{08Q-g)Pp9k$t$W33Us*_PXU_R$Bw|IIsp{_x|s-g$5PZMI^lr+o7*xBd9zkAM4{ z_cG~bI08#Ft^&ib?)&~edmjM5FgCVs<4q=pVJL(%Hdf(G9(LGa4kIoJ-dHuf%`SU1 zZL~FWo3TIH+PY|b?ZC=6rf#`2L5vnuzqsX;>Zk9&`-i{8PFfKoAVz3WJ330g^~N9f z+-nEQ$|ED|T3RN-LgLuoar>jY?z-oeTW=nlY8XeE2~&yR+B#`se&@}X{_2;t(Gl+W zQ@7me{L8LbJ5m!~ODMc8x8Gq-ex`_PRx?83St3SiQu1`B#q(ONVVg{CIp^D7z4@k_ ze*NorSHAq~(Q>q4!2%rTyi7|S3&Cg;)-U++cP38GeD(A*)|4aePl#gcN)p%C<03EZ zBW|!%I#^|qGWAN;7-I>Ev@#95(s4bGL+H~@H%kXwCqsfAG&kPauus<`TOO~JbzyHE6J6CGs=m;>zV3`mD{Md0E$V@2=hrNZxD#T8f zPPwnW`SQqk*%7TDe>8%FtW1&d+IT9JCKe7u7^(;&HS{nX1T8iA{%-(Ah+vk&_}~OA zVc^Ntu`p`rjdymPk)5{tPMc0n6$Xcubqv;@<3OcW#qbM6aPB&UQ3ju;6gHhd|LIT4 zZJOCV-w_t($Or%?LD{~+f(hUN;%M)Mb2gsRWK949krvDQS541#?6JolQ=7cf@)sS4 z$C}7gt1?nDM1DqvxcPQ8rCds_Rmu~BSU3pSC47k1x?ZoBhF2zbK>7GMb`OG;A4P#N zI+ga|5wN@oVQ_Oo2+%Y!`~@2yAA^zksWg^HP)mHG@B0SsL|aa5;{LR;mRcqiGFn-q z;r?I{_3=>~lRc)lHBZ{8Rt-o}FD*4eRGTwz_LNCe1;OrDkBx#rd_QfBS-yNZ^4cmv zwADtqEukVe-+Z;hf~&9iSxZX`c#E{c6fEN~CxpVV+Z5a}v7yq^^&n(xRN8f{QuSJ8 z(xgd|(oj$X7_ol^0!b4Hs2WtY)}MUxalKy0g`<=bZVpO_;#k3lI^OL3Od3@_S-q}q z#YtcLYNcK~eEoSe6zhYzSjNrGnGZjDf6clPOlop#6DN_S+-YiVYHs=X z!}sgsWmgK%PmhgP96x0V!9K*P$fVQdktoSE-9*JI2>Vy`&zie;8SC0; z!KiEEb)S5qt(>swHj!nSCeISa&Q0DV`+8We@~b zsamDXgwWO)6U8c|%<=ptZL#aYDl}(?I|;t)`mht&1ALaBPT^Sa?tAa;zyFuH<3yq2 zOqRRY7}A{>lrH< z(Tt)1lf<~NLjdys^T13%(oTvKFsBuR5QVQQzkPjZT*W)?xfgTjobHZC?|-N~R)=vX zs!|~yq(efhmQrRIfoei-Xo{xB)>S?!*UAj@4q6-sYm8WE$K}kmT!*IS2!=6MzWv9T zruN)v*CrA#=-%VW$M1fB^{0`ShN1;=co;ZJ2_~=_6a!mIa%uR9h2CYIPh4#=}}&3K!lDY`dQ`%JFD-FUrGBb)a`TVR{nqfZC3pV(8blV< zb7P{Ei5cNScvibHj;t7zTin9HKdPW&RW;*DZfzLGjKRHALKs{xfDqaMf)pu2sZ}~! zy>?BdlI-@zQcIbYGB%nM#D<310G9pPr|U7nZTHyy-iPnnB14|O`6V+VndT;jU*~1#dtNg(pQ{CDs~;gwI-pV zRv2QL!y_AWVTBD*fB(IY9&`L@T5E|KqVf3WQ=#i|Ol8D)Oi2(0=~i^ClUO^{<(7Dk z)SQRJzVX)UyL@pMnQF!ojumXt@~ASl=7V~@5^16g79r!pSRG0ugq4OyRiZ!sw5&z* zwtMbz|HJoemWiLefCQ57^$A-&@dsRx^X8)2OeRs#r zr!XpF0+zHfic{*qHz{iCu7#Em=2FUa%qcUF zg4LW+uCxv#Khvz41h>hz>bLmE#M8kz&gztX;qujETcw)N=^MRPn=g&Lj z``^C^80Ero9HaGcsW5Ne zEKPK5%$&IkNj-ddcqLqb>w5`)rOc(zgrjtTrPS=D1e3KoOc#Q*(vzO&tX{WTa)_Hq zCJ-)A!I_{zI4-5Yy>id|{Y+$CtM^^d69lz4e*KQ&ZfptTq{)#I=AwvUl28f8FpA_h z2P83r0%H`>(HjCD4S3u8eMR3c79OaZ>4dW{jv zIftvl0>IS%H86MsAqY74Qtsr*6H_T)2;q5N5Qd6aE`R8;3y^+tC(V zZ}ZF(Pv3g&6;0B)@cbX#a_jAyO4n^-lw5Gph0QH#F372;o@_?PUwiEh&-bsn{u&j> zv)c37{M@gf{cXbRrteCEcl1eKa?0lPSwkei+sLhsJZ}t2WkKK0d6)n=e@Vs+xzV%KlW@tfh z%91;oI%iHM(~51wGK>03Ex79X8;(Ej#McLwFMs|iH=T(I^W4EyPmS^^HmP zB#~$URt%CRmGX4r3T+sxR665%siz-*{IMsW^fUgUM;uxi9kH>(<`IUmrQk?G<`mq( z6evr6|JVFsNkjrGTHr*G*7ceWgOApX-T&C4pZ?_gbF+J9yAC|=)Nd0Zmc95ardg?t z8%A+OLX@^j!we|ZQKc5w6v;Giv+FJ!PoD6>yT7i6k!)&qU6)$}&jOGlO)2+N;t%h? zvwYd2i+}u+&W>5x{OprXIUAx_v3#&rsdE96^;&(@QYE|;8SXvLZo(jkn4LR_z;CC8Qyd~0p2 zjU!$3h{6C@MJi5~3U8#5awUwlU<4Z5Y3E%xo+^L$-fv7)ua!qt1lMP^wV6~(aI3XW zr<*W(wOWrNBe~Bqz|8Rz9(by!6a7I^ry~(RRCh>4g{XojvPIPd@PA`n5r&5(pRG*o0bH z!gt($=a$KnpyW`KNt({IstNAUHTAMN^LL3%YtE-A_vgNid8E5%R&j3>q zN~QCkkPqai$vz7f=5pCtJw0>h?f3B~tBnmAsmVCH@9z8O9DPdL!u`H}{Fm>%^ap?X z^ZT)rsmH3RxfusV=6F1+M&qMy>y*>J@!k9$yIudYi$7UA5;LbYEAFr-UbX^0ouM-1WWh{xGab7!53$uqt6SLNEYg2!>vW0R9S%(*Nj(Y3u=v zMGyv2p2bH zxU=8>^F5E(_XogzwmP+ijyjefr5qAYzQ6Ob9pq%Byc|I%N_<)QGuVa~AyimC`4Fd`}VL zH?>L*=W55s#~**{xnh5BSS=&^aA0w63e=2_4?p72R4ViQb1%aF$|G340q0C`*AOvb z(&Vq6b+#qsmRo-5I)d0(N)A)zoCiVR`A!hjQH0!*c?r%O29{ui|DLIUjM-3+83mYU z9G`K<86ST5;XCiV<2cD;00Ts;HEY(~`^clGeD%z&w%D{XvgXxNsa}ohilrt_@_l;5 zq5BfoRk8Wfp3~Er%o}gKmd^NPt$2&(Rhkw;KFtBXJ3OvlUwzfLH2M#HLDOv~G3F~+Qf)*mJ&i?w>3q!@lOBcQKYVUWy z@zu#&Z}aF&i*vK*Pu+a;-FMsOFTZ=kA;fhug;(Bd-e~j9H=RsW1y;ux3#wx}s_!+U zEr<=&K@d`Eg`umF36weW^iw~6{|}Ila2$&r#9H!?$w$M8D1Gj^XG<%KgDY3Qu(U7J zJh3GuU8|mc`svNK*=35dS*T&aXYC#Ys zu`te#{VN7H-)!r0c~nT-+~NyK7_5wWoO!isfW=K{R32aZ*4wX*tS`@-yU_RjPe1*5 z)ypffwxs0lhJ_O&=+utm5JDJ-5#lz4`F^@k9GWy~sz8$Ftg}yt9?RuwP*2<g#38jNUj66~zq#h7d**-n#Mt;&Gp(YuM-SUC=hNEL z&pls>7;&0~lm6t-e+bHBm~Xio?9kqhrRjvrajA@#00*O5IDj zK{$T%%{PvWj2y84!5@9R{>Go*am-gvB$mZ-=z0uM-2n$KY|1!KKK>{ojxZ**Amlk-Q>{fr^IKgKMbR4t*RW^T&b9;Q#Zf*x~mbq)vBW{ zY3!#8RzfKUheB{pwIieoBb-U$>=QL@R#Z-4D#%YmbemPNLE| z;iOY9KJVP}>NSp=`PE}j?m2V!ZFktBUQtb6YkhnaGQat*J1@HI3Pv>58qw~lr=I?+ z2kxwntzTb`@4V+%r=4(k+BM8+IsVjdpuSfAY-GHK`V&q#&U1x^i?J5#)>LhuMdRBxTw`q^izUGCuqfHOiJk2vCl;}3i2-djx+Mxnjt z7k3_e(ix5`EAL`)X6Q83 z?wtLn<@VZP#~nA>c#B$~w27~|`toyrc+O?#{%H2xInU0n;d+;YoPPCfZgfBMrY zr<}fe&B#IfAMoZIulecJ`mxbB-v0GjXPq^^=F^AoyzLv`_(ru7Vr?&4vUJ}=4*GQ6 zXWu>Rj9=b-V+e1@+=C82>V_Nd_{*PvKew~3XU6n-U0wU{w-4?CcinZ@3opFz>Z`Ag zV}0nMht8fgXZoJg=JfPzjI`+{ObWs%6VfpD!=GGm*=0YsmGa?x&uwp;-re23?|uhN zoIGWd&9(pd(uV`&)hS9groZj8lwPJASj(hHf5~+>@O`9i9zVX^C&;8yvuejiX zIi1}z+vnyx_uc6WyPR;sNkO%8;QsqvdDT_F`@^5+&!0PU=Cpb97UbJZ#+h;!W z%(ET&y;t-u+jsx{mi4X(BgJ4fe#z0mU~Ty);Kt}uks z0}eX)D@Pu+aPNiLj_yCc|G`f$xe)$n&DxQ!?%5FR&R^K>nP;AvywTL=Oo|%#5W4Gb zU;Od``^=lyz3%~sef6ww&FN|vHVlo}X}4(yAGpuLxt;s(f5_L){#H*{H@AuV1`l|l z!{$-1*Rb#qqQ-HI81RTAP8uICpK{zWcieHu`1m-2I4o?&Ob`c6EmI;zqFO}-{|w0ssII07*naRMt}Q(MO-8JhxUJ zgJDETz#bAt$HvAS$Dy2^bm}R;yzREHoqXcnJ^u;$cwAS?qhL6lX|{}F`*I}x-nYMZ z?X|ZQ3dJ+OezvYviHaY4`uXdA@k^qj$M3)U#FLJDAU;xCZDHA5tDiuvdr5ap! z#ibihYFUWO@2=TB-QB}O#k=mf4MrQ(L)%!bM;vkF<4->J`#=14-~IM}<&{@zwcxSG z9zXe%vl-kNJdlZrHQha(2*zRXkOnr7bUKY0LE7+ZP>R+X>QJ#kgnq?USGG<_&6(BR znVo(6FYmkd+N-&Yw5dZc#5%-ELKLA9Tp}#+e-$vQ$0xLS)j%ndn!4o|@4WBP;nF~< zuxQ5}Hgi3mO0_mm*z{MAzgR2{y|m=n2k*J{#$Vi07+f(l)W3ZBiz}A*m4=D~gQZKa zxHPQS8N%pPDlqD>gZAs~TZZfN;?T;zfxZI{__CCAi!C>K>glKZ`g(D;-FcVoE0uCO z)w=60ZO=Tlq_0?5QCxBJ%{Sl}$EdSl!QKOdgF~QPSOF`i7AnX*{OF5ImaZ5o4Gxz2 zdWQ>rrNWEPztG>?H)Yb~3op0;r`l4fgqq=%LyMO!TlvZ>S6p!g^n^74Ka#`(id=Bv zB}2pgrJ-W~U~h470BJ>k-{n_cS*z8cOXwAF?X}mw{@N=mkox*Bz2a)&ra-}!f?8b< zB0|}I`|mSYSTTsxd8vOzv2XsYPM?HsDh*R!v7!%YXejw#(^|4+$9W`h6{zlOTB&D z?z&SHS4zQ))TT;tKw=V(u4`;;Dh!X?C)E&bVWzc96_|C24^iQ zy+aN}{ffm)mvwf};nZ>lPKnaml`;x~lFTVc9XZrhkdsp0g-IaobOo{`KJn`v8y@RD<|G=_e-hS(mM;!&TEffd)R`t)@ zdmpYeTtc9&qWsHyFPPuih1a>c`yJ3XuzX;k4~BBWabH2)<+?r$QgTtN!WRoLY#5)= z;$M6DPx}T3R}@Mx;EOLfU+KES6(e^YnKqg~_`oB@LjRJbF92q??d3@S_+wA&@9SIi z(u;4s`9^>LioQbM#TQLQa0viY!Epyhjx~l=0FMU4N~JQ`KF6yyKjUA1#U-!3 z{_=`tEAP7P!HqVa7{z1KArLh+F2&kCgb=iAw(EdB)71#Sdm&?X-yr3v^KWHU^Qx(GZoqzLlxpAhmn@% z)^Y{Q#390=HU@QTBBdg{Z9(xMh%fYkujhG2*^Hm6*Q;?Hah@FCU}u&vE%=iUtzg`NDFoFrq$*M3+)_?CW8C5- zVwL7pfDJ@0lu{6c|HYL@!(L!Irja3pA_IU)k#c!lN(bH?0DSa<1mY;*oFj%2ep)il zjCF(*jvK@gxJBT=7#pkCL#>%nO}>M<2q~evk+CslO&rHGj^TJBqu?*mN{!_dzAwt8 z(_oJ~ZXD}aMXo2IQ-WkQXGGvN2K8|aQoffamRhR?C5$o91cy>`ScT(?D2l4}kTC%v zr_x{`0$IoLtfkdzHI9NLpdh?l3k26x)o}e(uh+S7$Ex*oy2*6}Bbw+)N}23E+Egob zCcR9{#C4y2;tS%s{>V7)-N;yF+?NuIGPW4aar zP$xrW2BfG8tXA5Xay@1)rmP@RAy{nUY89%HS`l0gGu%v3BV12g!maitH!kxV8A>hr-<_C=31^Hj$UKa}t`Iti94d*G)-X&}W0je}a&3)ano%m0wn9RB zvCEl?W9CRj49p#1tR;+cN(F&j6N`ajT-UYMVwu5}KpKhcjD_qdRx;y42m>FKtWN@) zu+Sy2L0KougHcSAh)f8h{0%d?2mP`59~UzRhB}KAUB_u`|)R)Of9oCp7g1gv(g%DQ9 zjDfC*47@WjI+WZR13q2#56H*FhVew>E>$!ND5aJ;k*3-bYArRI;dPvGBHTnQMpNw8 z+HlStPr~4t5t2&a8EO)ZTCjqyF|k-j;8I{ZoEpI_q|_jp@a8$L)|xP;v~@TaFdUL3 z-AEStGzkU9By13M5FR0#(!~2v!lm?xm0DBIVHI)0Bqc~-UMa;9D=?8{I1lPoVl|o) z<|&PpwuUk4GA1Yw3>o*mCaWE*Swet?1d*C$gm8382BjMe(lmSmxF7^sut#9@$=od`2?HG5QIbfHex5j? zEWxG!XG-FNIQDTh?ZOZl)QmkzsR$CL5CstwKzYI?iyM{DBh=ww&}0Z^8uQ|q%Z3p! zP$DRnaPlw15%l7a3~CsqiI7o~@Qea50cc4E!A~-7^1~_N_-#yT0|H7L0L2Z!35X?N zDI*lA(S;HW&k19V5m6Ph#G)ugmI_M++6mJXCe)A^Vcas{^9BOU0MrcqYiiI%f#Z)d zj7vGh3*i7D902{lln=UcN;xLZsM#R;BORTG*i+|M&gK2JV zMipa>z%LRS#46R)Og}f^h%(p`qr{|dv|o?XJ*^lx^wOM>Dk=$Y_>Dk-rdob&$s8Z+0M3HXEvA5=Cavr9+1yv z0r+&}@}0SCN3I?De70*wu4`tlJJ+7gw`a2ne!iog9Da_wy$?QNjkp6hALcOjG8P@ioF zLbfqbXLe>sd)v%>PkX)x4CS(I?Fo~e9qk~Je z$Y#5<+1c&+e0wen<}nUPH2^*HZP}joY)>|qPxx=gIOvFaKxeKU0GS~F`8UaBF%X7J z(3Cd0e8=?ZGiT0hZ)Di`=5o0#{!pLKW)n12c4QOr=Fm5nMMHzn&Rnjoqa6U^c~C%Qdm=#8&&cIw zj`lnNc|a})Eo4#5wddPGFpDu}bhgiI%XPM8yFk7%7G#y5nd_OEgDED4 zk%c{EyV`P{$ozxy0b2=qaE}oZ#`4H^WcTXGP0zM>gLr!`G4hV=jE+P#Sy1lCW&ycu z(zUZa$WXvt!b z{IqG)U^#Gbvu4lDcXaj4nzQF#)6uKZWdj4*TrQslpi}bgM85{03~0lQ@bmvFuFlT%1wb#_CQ?;@oiI*;3QtB@Z7K+8<;83Z*R4Np4 z`(0dFO42|nsp&5j3#DRdaA>$#DwT?j%3^7-Sn4Yk2TO%gX#kajL#u!=R4fgb`iDwO zOU3@d((phLT?$3u6boo7Hj0Iz-co7#aB%=NgQdbCeo7!;C?OR~Lxtg?!q586bi$`!!Nz`(#qkLc>gGZ6O09rBuS8fP`8hVJSfMQCzUWmf6-uR~h`B>6c%A8I}V>>hJGgwQAMUrAvp0SCvYIMwi}FslUNk0hAjx{Uy{S zt%XMMzv)vfCG$!+DJ7p`sga7M!NI|S;esJXYaQcqj9VVmf*_7KahSunBMBjK5Hh0y z3RfD`;%kV-p_LkjALOaQuf+{W@?&vhV3~=n)yOJD+Q2{#?Z#Ro(a|Ciobf|T0!ji) zfXu9MjBzv`jB!@5vBm2W!EHQHDKVPhk^xx&-jc00xO}s?K(HW5j7`|F_@#zWYiKeW zLi;3R8ws3fYH)ecfJW6{KS`IQm$e{5z@$x(O)?3(;R{UEWBSx;ZK+KtgP$ai*)?h` z0UyA#=$!NdPLc&Ou4y18g6UwI09=(Yt6f}GBzzKONt6KQYdA4%L+6B&p$)ERgR}O-OVl1vzxsIvPn$Vc?m?jh&l}ScZt55@KhFFUlpjoCcFU&Mx;U37)Rj(n#7bu zEV*mpib71F$%)|*o+U7Kje!6dy#e5pVo=mT2o2B)HwG0JMPgv~05GI!QinhMQf&bi zIcq5_1V9Zsf_S57(E>nGTY`?-8WcYVoy=NWNHKw=l9+@(NCS*bB!@5Za0e<5gL>7G z94}NbAv_pr2+U%sYMWTKu%BD6N(dTeK?(Fp0|6uwz!1sLfBzqj&)}I6mIP}kFpjHM z>cOKCtyNsBRZuBhT)PO%IL_0YLQ$GhLgBD*0Yo>Pr7e#7gmS|er8u=)Txa5{NHb}u zgBniY3@9gPW#~vLiU9NlBqw}Ifx!utXyw#0YCw=uZc#%yYB<$NFGe__jf9Q~6`(P& zM6evuA{tHq@&OWn(S#+`HrTMB!w9MqAQWG^Au)n+E!bu>p=NM3LnWb@wM9(=1bx90 z1%(DF3T`d#uo-YPYAof1ZXgIu`Y(wzDw#pYMkP3E)KCllY0?G74PEfHlrX}Wg?NG3 z=ji$q$=FFe40YVN`HfSc?QrK|Pms7%%UrHKZG;Jt0O8@O2 zI5jv^LI|#v@e<5x@b289MmZ$(7;!liPc-KNlXxlRI(BrO8%2ywwrj$$Z^K(-MrfW^Jp6VnHJ+tZOq>WJu!fr$U9hoIg8>k{D2!?~0yNJ;t7wCphxbXTQ2=XBE??N()p~m8OLwl0Neh+$Wu|$vOx$a+QuBQ`)NzC{~Kbg0SQBsAAIfSiTqt2RW#uWzyBvBG__KmhnFu_tyW>3 zh}Y8T^vKAF24(a>WMMVYjDl-|aUjN|7d4zDqoAk~9xT-u#zN4Vqs~xN##C!+s3u&~ z2CE26s6v>WpxJ~Lp@wJxYg{EOsue*%K~YTdRAUGLH5we)zb0ZV;IE~>{b~X}ZNl5< zRX`#JmS!xs*bogRiO>>rg5<%5v6LGOmvk{npCp4{5F%EgEAsyusI`E<)iv_}n0&y7 zPS~K#MuddKaBYNQ&}__=Ma+iy4IwQ|j{TJjYAA|^psb03@zD)3K|L`L%?6o3unjga z@dWd4yjg2#0@jjbZV)nlDGI2y7TEawyO0c*G<@EjS_?ph-tdFmU*YqL@$qp)I<710 z^$>m`lgV(-Q3Es#Nw7=|vVRX4;_r+9nf(6?xY*7CnqVC$7(Y`c##0(IFc)GeVXidB z*yLYn1(L*sdWNP<;_@wAFdQKns(j+t^)IkGDb{WnH6GU;MDP%=CVVr*M(K$(8 zuMigisAa@5SZK2A8YVPz4d;{@PGdopfyZD{5VRW0t>#=a&r%$ZwM&#Bpet;$JUPMJ z2Njf|l#ECzw^SG^!4IX$hY`vMV>C%%+aaNZC#7652jdb-K}He-2O|=6e1sAb;vh6> za!BOhTt>OU92qwWA;e>(|WyWxHl$N*zWkv)s30H}rEMhX9;Y~vB@+vSmTM!aPYtqvXLaQAlg!B0rn;cBu_j-F*I;3ry8xC5NsI32%^MIt7m}}Azf+H+pfKl+q z3D7vDoS=!w4lTfuw-H#^?kY5Nv#b(D?oQ(%CxKUvLf!rF6|6L!%YhaiYjxT_59vKx7;~J8xF;Q-~xs;8X zgHJzvYgIP4cj2AYp`WgpKw53;l^=fRs~y>{ES_3A=HGhz0~#L36`|H4fq{w%Je2j% z-gx7U_KxJ?slB87xMNQouf{jr^uWky>~Z3dP?LZ%_13DD^E!K8|Ml-`RtCh=l%(nS z;%D#a?wH<@$D7COe0E-bc27rFcP_W!=QrGO9UVR0`8ikr;%34L ziEB~^9x>nj`qw+M9o^ZkSsk;UUEUWFV^#H@o35CX>*;9E9e?T>W08)5FXC5UDa`6h z9-L-&bRB>CndMK%?!WPlN_q6aLk__6OlNm@M^|S@KHrtg&dTMFIr;QY){h=__(7dH zbm{u;w|{I&Dp1DIAP&|YbMOJ3?Qd>#yE*KW0GoJy!)>w;Q(~$!<%16wEZi^O-r3WE zhwQG!y-OqR1x7|1W@$Vf-*WZkT{+BS+U<8;`{Bob?j3wR)M>(`3aWxC6W3mN_L=rv zN6-9&KVBaYT}kuWE!SMr0Ts;7e&gJ4E0&3D3hO2gDk*JwJ$&)mr`vP6&UpuY3Vah~ z9Q*8}59hO;9kbe>UHVcG39X!C_TO)It}~a*cXZFsW@l%!b33y0zH-88qxDfM*CET2ZBm0w!vx zfs`z<5O`!D4PsFVuolAC4GI)_LlAILV?oeTqlMPg>WJblGN}Y94J3;MWVmx}2|`OM zG$mG}FX#Y}0ep@KG5~@umRcYuT^g+v)QC-rnow;S@)Q9nY7(%9z$B7Ekx4pROUz#( zK}Z-e1cN4MpCf>y2B3%|C!ri$A21O3D5W?f*vVvl?YZAR^RSc7T&vR|bwE6hL&lf| zca}pS7{%CRbZag0`2LRoSR#!?Da9`n%y7;OA(}8kEoV0I0>*fZJ^$pB()IDCqAV9q z3Nvr<-RrNq^rG{>!M&D;pM2rO6HYcNu2gD_OT&2bul&pFes$-aUp?#V*WY@_%dfmL z(6{39D=s_u;DaA|G(r)QpDzN|1ju=3?aOP6iC-PS4&FT3>O z@1OHM*Y_TN^4VjKKT-NPka?EzC{kKkN~!BOElsIQFZjWQKRlCg`N-0~Z=dsn@gU&7 z4->)ebjvSpIrsZNWUhDrQ%}yDGusmF`OYaP9(Tia=O2CIDYx8q7pKPM^s+0i{nj}@ zy7?D34VDIbhlhTA!G)(Bf81jaJy2J{W6wPG!yo)`>n*o@YS9b*!=+;Xz=~xnw%%$x z>3Fx_eOKR##dEr|!^MH6FRk$1R%MNsmiOLy^H0zJ{yCRiaqq95pqyNE(Klav`Nc;c zx_greTi$ug{k?t5uf6ta={gXsVHAghL|cquA4SIE@2@}`1+7Wi_aw*3DETM;*I$4A zAqO9P?ayy043?HJTmIsr$1b|~{O^40J3=_FC%j!oK>z>{07*naRE<@?xc=vFz53>| zz9la$etyc7iANmqm1;e9q#smACp7zUWDYs}*vqcC^4XUbJ@LZx8%>?;@%ZX1E_wO& zH(y$^Z29s<+ibDv*T4N;CfuO5c0#io#Nv>{PrTx1SG@S*bI-l-+~kcWnzi-4)1xmeT|QVS4G+J#blG;>Zmmp+mD=n# zjg6G!I1ca#LhSX|UU$chmvK#Qy7TU(Lqj*;`isF8%Z@naq>%YhjEzR8aH|+Z=UsRq zl`d=)6g;l4`Pn6_UjOy;OM3^FFWqkQO~3xF9~ha@l))QtcnU;wgjhm}We_2?_z;Uy z0>)A-1=KKV0fbPM0QtOwQRPnXx+FeB~x6x%;D4_Jak+;u)P1S`yTz?c^B`n+wR0FkJ-snTAq3Kv5h9A zsfmo|8pmyRd{r(F5B2A|+J|3WHCnDwf_=a>#7(7}vu$nlYQ>?F;ohPWx}5E?%eIb; zV^xiaaayJtx0Sg~xYSIg*hT06V8Vn6oZ+s}*>cM*n_DuT=frVXsZ_A%FeWJFlyInF z&6+joOsZb5ZM*&U4j0w(xO7uv#)-U^fbeQi$5P*E+byShG-E@-k}DHv(Qlr(-ELpf z)=U-Z`3D|&@|pf`oqN@`JMQR88inDOn{M*h!*_4AajS7fkZe{aB}GbF71xO69(^9(t&|bM$+ov+QrJAeOiXN3 zX2KW0xO;0$vyDSZ;m;`NJlT|R;3JGA%g;2vWJ6*UdvP2@qf*i*9)JGPho8Ic&O3M7 zX(z&^lWB$|9)Ijte|-DxyKlOw9*ow*>au0U!;Upg~Fd8ehRIYmPej@Y35;U^zYpS?eA-l&Yd5yl*g-9txNgx&U+vH`VTM3Ox$8hCVj#8zx~VGZ&jSuY!FeEYMLrU zv*XezTHEZ~i_iN(#&L4Fde<_urMkV~_vp8(%+}3mVpIY0rlR8kjn)?eDPZ-{t?8WEnzKuwoO| zEG}V~QUdlN_zQin?3JH=!chl&_LsLl{L5$6fG{B$)jF)ET#;^?6cWB}bVSDyr^4#k z)XU69SO4Oct+(H~yJt46vs@lkAmvCQ=r_+kg`27)c^pMn*(EP6owZ=$k;i=H{kPv( z^TA)Vw&hCXq$bUtz0ZWEmPzSURH-=3X=FcBoJx6d1WT625CG!0NmC~ULCx{pAdCrEQSH>Q^`?l@Au**5rTVj8oQ))+>lMsA5#0B$a`JRAt=adCOq%F0SL0<`MaBWzmNr7<2<2Z6X z7RBLx_ddMC_Fvp&lg%7QP)aMcz{T}RCbQ>G+dTcNd)BWX@mnTsyVDMr{_NuQ>(+&V z3S;(#op$f;%1f?vP`>q+o5rf)`IlU=cHL@DV%OqgObE|6lq~CA5>zWT7Hd8k&E;pd zw5H;){L7nf8U_BvSFBmLo)W`ErmkCdLwegxo=orV+PsK*FsJ8v)n-HSk z|KtOLT~o?eUVCTLEq2^!vn`mA1ojulP_dIY?!bk+#I(|A{bwJor|uWK z=Q@Vk@_2J|vz3lUH&=FbO`q7zb@{Ul=fuk8rB}C`-oDLFJ8eFt<@Mf|h|&IpsUgW! zYlH=%69=B4m3l3pB4#d=UL3=nR#Gl+$w(n0#&GMQ28LguA{`rUjc^>#63yXhh~bY;`@!XXwBK~%5Tl~T1@O*ovmZbZ4EJPcwUDPail(xHLLhk{1d=VMXbaU6~1UXQ0t znADP)8r04Bcy)YSwP(MS&Nv1W;Eqdqb-bbk@0!1NvuH{ahda6&kGPz8LRu;YhhJVl zzAgwyUB_r;ozzyfz`6I9pSH;L7hQTeOHGNDDUYs)BO4nVOSvgwAsJ1n4dGYe*t~SP zTxo7fh1GEqYgb5Z3{PeRzXkx`#!~XP6l*PnfSdT^AAeh~scC!WHr{ySpjKv7F=8U? zrc$l5vb#IF_Q_}UawNZe^!|pML-s%LmTPY(wpn^D)#@1H9ZKm?>E*+ZIO>GskJ@`~ z$KJDZ^>H0Wnf02T@tv>NKYi!t7yn?SEMMyT^@%4QAJyT=oS~tYzjFA2Cm(<4tOc{W z=gk|hhLN&sKU!N}y>^qS6D>nf#nY2Fl3aZD{$EsOtjQrQX(_oP3_F?~D7|h)%j)rv zrBZc5T`%2~YK|&3hnS|cY;MVfn&^7XV+potNQqO80HRtOTRJ$r;DAHJdZ1On9Lds| zF-6Y)#y9Jq{^9zIe!QkapC5ev#FLIz^|b;EQ~R3W@c~AG)1^*CXCcYt_n&|Nt^{CU zmNG+_6pSIJ(HbFwWwcfc{)+!M0m2{|@c&x>Km5xWVbl^z6d~4dPPxno{^#HR4tGx* zZ@mrW1@%~kj^lwtN4=5@5s>&&nI^s{QU?z(BmP2-gs?lp{S z(qTam2qCn#07^N+E9p2<6lGd6wIHGlXIi)j?YX=;ol$W-9@b+VlEZp)%CAbt$3QC53__8PQVI&; z!U3O*CudrCb7D2MjB_4_;Rbtw${HECHnSn{=YHESziexuDc``P6e^)2r``q0CF_}w28!qS=MmtT4F{ST_Ye(SZ{ zZ@+P447-j*0-d%)UnX^(>3L*Z@6{aFYY?0D<>uUn+7$yhpG%2qNxRH4LPWAkDWSx$#Ndsg5MV=) z|NQ(15)jgd7mK5SS_8SkK4D<4@Ba-QhWEF8Bf}cs|KShQhJaCFplL%KfyEKm;$<%` znmxCNxHP7+E!#z++MBBigflnO5-Z}lsqxCFpMtSPQGjC?b6wXkWd$J?_Ld6jWiLf1 zPMnC4%Mlz%sZaD(EcNA;tLApk(MlN|W%GLkDthzH-@5)}$4!NCq~OI2(N;Mw zt5rsDD0Z1@O1YFW=Ag{g=H3p-74t^IIK zMmPvGjU|CUWv`w&M;_e%(5=_M@WS$%ZYIp3NCe(fX=NE>UdlzRS__otr3nu5R+%tX z0d^Dzt>p8R>_(qwlOKamwO*qLTBMuy{S;2(v4V_og9P6V-{LwVVkRJDtL?Y0ht}wp zEjHcdnMWVG=eElk39r2Rf}3x>Uz3S`dSi!?tFF8-ld@q{|LPfM)@!vlUVS~P)TQw6 zdHUIVAAew?2v7dd=IyPR{G!?Uybuv@7-sXu#FZC8y^saajddvvQRBTn4X%>uIWC?Ydn+XYVo150x z^x3DJJh!8JpF@t{c8dA1Tn}2BnmM6iwFcMu(Bn@$ z_{bxkD~>wkkXofuE>|EQtUx$HOBgqVSz;KB-k|=U@E=J4a>6BspUPx>Ur>X!%ot%* zL{Wq;6w4id1di-~PoM_A5@4|&W*cDP) zq6qb*H@bG+)6YEj8CJoA&CRdvPYNkYJ#Ta*NV;Vw|*>k$ICgsuUrW;L#hcH%QQI)k#PiQ^+jN|8Y zZg_S;R!UKWaLh`cxGfmSx{;CQmKH~P7zQrMYSp;tG6?_x5CBO;K~$7UK{D1D zv{GWIMF{|V!k1WT2(g?KN-1Z~CYx>Hd1CpBMG8lBhC|(?7(P+g9ID^?bx8q}v-Fwub`+fIY-zJ9Dt2NJKBh|W-N_&!Sz3C`r8AKIJtj#=q0?9 z_Z9~FdrvuRzu&yPVtu(9@s#zNgV?}P`Gm%BS|&`<=)GURUHZ+ZfjjY_In&-9e&LO` zeyim~A%xKZ2_Xglp(meQyli=jIi(eYhkfPP-qO(0-u}LUB`b?h9CFCq-~9I1AAS0P zGO>`<@)%w=utZrW3E{UQhqyO~!8}GjTo*`n(%{ReA8j&)p~T@$2Apgyv1g!I`T%TIHh&-So_+S$A0zLurj90l|6R-f|pJWz4or<8KI)_ zHJ^o%-e`+0rfibgVdpJBSv?*Fj#Ib4d+qg>iJ8r|+fp-|$ToINFaH;4Lh^!uI?t0c5gmu=aQ_noRzqDeguw=M* z$vNlzXonqld2#9DedczB)$+>Wms=-o0- z2KoJe`nzHBut2yiDW%rhHWKzp%bieZ1Q0H#MrmR!&RHAq2{9x&-6tjbKP^VY2MHg9 zaL&O$tA!DzEKtf4<4U@2&FZVKz44&KjtZjyE7b9P%H@Ik?QNsl(@#IG39p1YGIY(S zA5=zGr(GvG<{15x3on|w@z%!5lTSV|-!|iGrySqEe3_-(SkB$l6_;N*Ix@0g{`|lE z@lOvt`0)OR9*ScShNmXkE)P5GFsf?(%U-06RKp;S;nQM2(-aXV98Vb%L=mA>NCz)m z9<$A!gP;k1%@}k3`R7laIu#4vTK&mKA6KhYOiw}Zu}0I*JMWCx4UYzxFqaOPVN9(1 zG z0^yzht?%r-{pR2Q#;GfoEUpKkhE6%Z;pSUE{OHpI7A|xt1-}qxxjrsjF?r&|@sY7B zFTG-7>qH$WYs~u}y)S%D98#-?T((S^vc&}#T)>Idam`774A^$ObfmO0a5aW9tKjDd zOQ)N()=?DUvaD9EqCNrouM%NYH#7=IP#!5Cdf0)-9edL-MSI2m^DogJov<(d+xmP#+g(`o_y*lSN!bKPe1;Q ziuA)zKDW!RJMOUKmRyLNI?mgwy6J3u;>EOP`rMAg;D3wu6l(FYsaK4vn zR*FP6Hbh}>2!bjQ7?uljV#BQC2;YrWm`=X9KV^jRdZ@S|o`5OwS_m;}&J2^zW}9!d z_=OjvTD2ZT@BHpPKjk*1J;;j@DhLNnODQahQVJ^g{u3YpAp~PEwsaiFQp!{+1+m7F zs)o^Te*62B?@<#O6+4cTN@WlwpvwjzltZv|Ln3^`?|=UnM>KFw2!S`i=&U*ATWb`- z!VrJ_!}}+laB?-O?svex@4Wq1CY2r=8U5&^kIwx1x9Tx@;PzXNI`YUfzy7`JZn!C^ zt~>I;d0l(%)zdj^&)IXf*k$LZK-I@54E3UunC*Qj4+^=V6ws+3kzkSxi?RVPk ztH&HS^3jLKo_z8LBWoAzv(KOZ^gb+*QTc~Y)*N@r>AbrBo}XWF(#a>s3|q2%?zv|c z9(?Ghqa$aZe)`?_-e3X}MfJ^q?=#?U~ipfiv#x?YG|^lT2lN=?celE7kBj-}~XEm;E9hTXW>Xomo8n*gc}pjO-*WVZ~x(Uzn+$qnb;D8XzPi` zpE>;S6URnYpMBP8cinNTpv3pm>(;JElkfZRZiv_5!R>}*D8j!DS$sJswIFmHx3zU* z5L8Y%^|%{<@$=J9IjOU4dRJH1;U}K`v+J(E{QPrRWsNYxP^WEP`(w{P_>I#~or8yt zxhF*Kra!yryCnLs90YUs+2_IeX>y{?n(yjW=FS?Wl3w3x0al)Fx-&u58b| z{ja#;wqM+EZOY?gK|F8oeNR7p-=hzl^QHWP->=r%kEW zu)6m9-}%}ZU;Rd;<>@D%c+R=s+> z@W`w_KIVHK!6}K59e4WD^Dita4fggfe{uKSc0&N)l=df2-RSY>Us&4Lx2$i)laD@h z-Oq2t5wch;4G#1c`+A28g_W$*!+wpbm6?Nmy1h#2L_h+4lZ4~Z2x`t z!)`En($wddEMMF^SQsAKV)IR0LMR~6BQvR~YIouBfIW%KslZ*Z`0 z)yqRKEPn2^6OZ9kSRx;PYSG}plHy?BU~xsU*#E+!mx{%qB}+t`udlga`Fkr7+iR_ zOq`^&uGK2oPz_G8mLUG8$rl*_BNlc>wIbMK8>U%<<#EoZ@3mKdp>Lqr-#b`X(!X-Y zUH44+d_r1AK`4Z`aGwRu6Pq8n@BV@1rRNs)UG&o{JZ4(c(#tgA9`Mu?k6bmdVxaiS z`IlS~RK`4yY3Ykh)0LN9Iy_Xw{O`W&-sYBc5Y^pGYXkr2mHo^6hgSaNk}GP}@suND zxD3Yko8R+t-$4K1EA#g~sL6MTQcpbf{J=n8p|E_Qu%f?EeDS3vrJ>;^OBSUZ4yabE zK@_)6m^50cdcKdFvcllXVrk`ym4!=wdOjnuloT!=3y)bcK2~9}$xk&Oe9(Tk{qn|^ zmKMeY;l7tj|LpRgt|}Fl_x9a+_q{F6ejHYqO+;qk5DBDBxHXo51_by|NF)H8!9yQR zu2QL_(`i(BxTY1(o%i1N(&8n9rNY39{Pno>+f;}V8t)09srN0H&W+2JGzYoTqL zxN&5)RrNHhdU3hMb5u-2lhUHqGH!?#z7!5uVZeydDvVW~8XeT?89${X?Kys>QbTfF z5dkTzO`JRl6|rLV5H|!m)`8=tDUmFSMXVg_M1jI8!jY)1HOFDegeI)Ij+1F_Vjj^Z zAk{d-)5`dPmd22j>&2SHT2r;&b;4MX&&DgR^fN5wY2i>=)nOo%FHBe-lbOlJZH4!d z%pmmh9Vw)A)0tXiEtQ^>aZu%gYHLDm(@m`oPdXkKAR9BIn*AooeE=mMNTl!>wnmp*5>XPt zGscRhs6!(gSrSmC4PvSQyi@MfDOb`X)WPM9=L%0^Ul^67+A66G!dAc8cT?-C>#55X zNmDT~)(p-L#^4Hr!zN)=DdjmX)utuW6j?e_590c`CrKRZIHqAGB$mfgmR0OIl0s@h zt+^#bh_TcthA)vCzzAUqE{>9aCP)Bb6+$*jDd!v#Hpbvsr?mFd%|hawz@wl-j74S2 z&m@=@od6VD1%3!^SYwj=pZQCt)8%rR6CN}Y^Zj%j!60I=)6~?G_@+1x!=P3f_Z=5G zEQ~M?eBaeEtd`*AF^pr!aZId|Nv6}WQBn%dT)cq#9(+Vi`l)iQ-qMt|anO|VK+I1! zk5=GS;z%K036UT^iABYIDN^+?LToFTaabbOa%J2Q3gVYVTloM05CBO;K~znyL*k%b zt$C?Tpy2crqm)rSR<4BFaL*x69Iup9DW6gm1`V_{n( zDASY#Iu79cV?`JwkV>syw;t1vqKGK%aS1Izxz^M@hfv&yV%~&lL+Y^^59)*&*W=}K zg;6I3r%gqy6&Dl}vLro881vTaJXrv>@fdaT>wpt#G0!10_J+wofLx^F7P)pe7Ym)pk{Y?UiC4?cq zT5I?<*L5kSQo6A+ajfgrYRdCCRId~~AYemBv*G7|!FOzI3|DMel~PJr6dSEYuz)7t zON_ZXKB1+xt_k-tzVDkT!>WPdhK1EyOFD(tFozU#nMz!h3UrEs;fqLJ3G zUkmkMp31@_11O;~iZzwa`t|Es;(xeNbz)*JeQRB9x$mb*95?$;tvcdL5!E0o&Lx9W z;vD{m7d!A;Hl;eVSW^&E26PjTHEY8QGGNF z#wB5b@k#|@cWv^7Da`UPGQ#0wtE*>Ddp6h8 z-8pOaf@#y*X3YYbo;~-PmP1o}dr!8#r@N=4rz_Wyn>D9v`pjgs*|TToa~=7%&aRGG zGuvi%bar-i&T4DR&YCr^yJz<9d+pKDmCLv1XLo|wthPO-b>(y2JzYrIY*)TxHjq*3 z27z{r(KR#MhU@!%7Vh1d@93H_6U>5@e0O)YEjM@eyqPm+?z{g!*^ajM+{|nitsR{m zT^;$(Z2OG%TzmKIIeSfSTQGNFZraTGbM~1zBcJc+ZqMi2a=?dJ@<8jHIlXh{%moYf z?(Cf3(XpVTV|K11*Pff6@5+KwSH64h?D@HAZTYsge8-GjCnSTLaSYqumG79_gIl%E zJ!i}W&3t?Nj2Scb*?-^Nr%lUuc64-hx6kb8$n{K{*|u=u+>WkXc4pgx*$ZdoXJxZ^ zDe1}PI`Nx8E}z3>vhBHS7NCvk>gwv~oVUjwP{Hh6zO$!iPBuHctv$cb-utz;P0P=i zJ}Z~+%5`_l%yweB9eE7bJ$rWdtXb3doH2jS-1+n8&)93vp03VpHs6+Q@965DF@0ta z$aLhpI&vUBckaBI)7xh5HKQ{rL7RJacXxDmcedrSZP{FRXLtMb>2o@}=62<~I`W;} z`5C!v*R0uHJ<$EEo}O9lZ8M>Tz4q9vtD`5^-qG1PySsZ<+n&?9a`~>V?mgP3wRK`j zx$bOsKJ+@XqqD1HMs~)WxwG>5d@k47+0i{`&g`zPuJ&yE^qDhJHD`9uyjk;R%*fAZ z@0>kv-|2f!n?H9R5a!IA+ctB?^l6}+o7L5|7l!Bp)qFOKPWfyu-=51RBK!Q4{bzy% zy1Tn!hjZr4fiHs$QPbYuK6~z*&d%<(_O{N>_Rf4;F5i)dU3GNM%6DgTc|b?5y#uJ( zuC{CstN>S4xAchWq=63jKX0z(9YY7f6GJR}010`&O)2RT>x`>?;oT z4i<6Y-CHR37y1jU3a|99D3*qX`UZOogUeP950nN=%liffSH03#D)tQy^!G1+d8k+@ z6nYE&O9%UghKG~?zmmd0p*S!wfZD<0z+kbjuWt~u7$}0#70ZW9#bv$AmM&d7l(17M zlvb7sgZ+I=Rt*>Wao>*@g_W=N_7{d$zSh@QC>4i`g~0;I4;T7y{Xej@R2*2*KQK7F zvVZB4LhllYV_9FZFjOqAEI};&g`vKcFF*g{vQ?#5iYvhBl2U2KtHT3>E0zro_6~sF z;BcWh+&4U&5Gt))j+X-96&4j&4J_+jQ7Eh`7FPBREL+z5VsUVJslRvSiXyNv!GYpn zaS&6*NQ1>094r-=4@ODj`wA-uhKB|U1O3Zi z8d%c1a^U5mQmMDFa_Hs0-hqL^{(+$Zp!GsV!^PfWVMSm6V6oUg&_CF>e4wwdR4PCb z1BKz`swKq& zD3mY~OucW}%Hqnw{!+1k{|50_gnk=cR3BV4H|PFeGWW@R+aN*ZTJ8v7aFC{3&-#xf?1wz086sGD1H zwz4Y58AVI!DP@#WIu4DADAPhPpfMqFQouov3D=;nwMqpk+``9E7zCc{TC1h&7$z$< zbTlc)t=B468(ac%E~5}<3y#AY;|bdcN;k{`1!@_$1hYX6AmvD$ueFIOV@(rVmA1wZ zjie%1vSbt-51EWDdNAx=(iLG;rdZacQgq4)<3E|)@A4QQdDpsN7%p|8;CyXO6Y(cirYOx7{w6)lS%-0R>_YcGyzP)f_qH`cNGqU6eSwR8kc3D!zpzrjq1s} z46(W?ox+SA*RNHBNGVN8WOT~)qVaJ@O3ryL420{r(os?DNc5(-&KE?~YBew!;>^<0 zY>0*EgyS;7f$uoNbA*ZNK6u3)A;pD)WQ^h5#|gKVGRbg+0bAHnDdiw#jCCEaRttif7bO+0&1lN}l%t?xLP&d#l z$Qi8#W0DIbOLP>4e)3P0aD8t%p-QQyR8xo*6~ zN|=zfTo_}S;Zg|D{|A9-X0Y0cr5F`AK`=lp#s~$@;yCsMua1?eVXl(`;mC&T$JeEs z@rYn-6t1sTM+23SO+Ixjr(;3c7?XCe7%FLBD#MKNgx@k=iGo`AX@)7L ze8;h&jRPSmrz)(MrRR=RYwLqpQAcpzlF6)F^GT)&zJNqg9cz_XR>OmqNOSbDHp7Ky zNgPHHD5Z(WAWBR-j^pw1ab*5oD36XcXPPV_k<#VyDi)RJ`3@I&@vt_LXKbu=y=py# z!*xAc3C6s%luX({Wn8yjscPm}<|WIkGOjE!j1sItRdWSypE4$fyRN5sXoImzr~=}R zR&>k6jhG`9v5|s%;?i>*NqlBlRC6fAuQ_qTz>cjS(@Jq>UDtv1w4urx=?cwhU@dNu zP$a}8@VQeXjf5KfDhMH+YK%T&50j3O0P{WPoFD2gp98y@gfQz~S2nkH-4f9ByqT)S~qtC*xS zxEHI(Q4Q)csv4?L)26W+gA6HXYb7iVVxu_^wFa*`xqGETQq72P(uDffz+5mth|k29 zX(~81lEu{21+z^}6UN8mRBEE@rafVq#fqr-sZ7h{O{s@Ab5L@JCd6hi+0KmBi+ z0VAZ@OKvK4O{u_2uVsCuJ~m$VJ;r(6;Q=K9V=Sy`-)pTaE7CrfOe00g!U+;19m*Z8 z%(#ilDNZx8xjJrQ;%nxv9b4yToK#wd)p4Ivp9#fC1xl<{nlGo4iUUd|6@Im@8240YZ3MJBnjFtXT%+qD27{rGRN*O1Q*%m1 z)#j9!N~bkUoY3m{xZl!Jw>Gw#al&jwbl|#pAxLShYSpQY5CQ-I5CBO;K~!-SX=*V~ z2$oqad+^uz!n?J!v?LSyKmKs{>BCJxutI7fQq3)n>l9IMrFiR3!Q+FB5$QW?-w zQ9UhfSS#1-VN>grDyC_*iR+Srv}tOcz-3EloO&F)Dc7plD&_ldO2PqJ6nM~smx`Gj ztHzMi z2w^aWvGu-Wl_0K#iTiehO#4n{d@PEUlWGd$2u8pg3Hbkn|0)SEYvS^_4(h(wL}fY% zjq9bFn$nT3g~3=V#cW)U>(!>FmKaXWORXO(E21435t9y9eas@ILWSf$}n>WuldQ{m7>o$2cUgs$z8L zAef+HU8qAZ9bwjlwEBVuW2Rm;ab!*8IF9d6z?&P`PGsSDVHgV`5VI(y@aX%mXU~Xb z8)^`nf&a)_WoR{w31@K_NdY;FIF5lsxxh{nYgHW|&p1xn>NKTZbL)rYah>tJX6dVH z3pNs>*H!9)N(niIiPmZ@k}ULiP3u|^1YxK>$0s&|e~BrmrzfRb;mjDOElj1Vtae&j zn(Fm2ro*(9VW1iH5Wq*Zack<9#Hmy(As$BnMYWen8!6X~jKNWYLqZK^{Z}BA7}S9I zD2mdl7Ncn@?PwDcB7C<=8jf%V0eD5#84Gn>=R|T)CNwcnVq$88dfAoKPc@b6aTR*C z#%Rx6G|YR!gEWYg6$A^;v6Jp?K&tQb#I)vR%uhrLNXEfM}j6$GjShc_JcV z)x$|trUD{~74=FrlXg`Y24F-PLqf+TDZdp?+Y$$o7mUM0QA#mQ3ms|8MROGDCP!s( zfk8EKQ!(+XxO)Cl;3{}z-o&O2{6%t^UOu#m68G;ihc*f044uYDBs;X9{MsrCFk1Y?wxK{_giHl7gHpPiVtLv64A6utt9jn)Mf;^i$UAlr%J|y!Y$3r%h{L`P$o7 zI<>IY+L9q!J^bJUot<5HC(F*v&g+@I@7#H_XSU7m?!4*d8~2_+YvJ4jXU(3Q?dZ;R z;QAZwK9;8vu%F+^yyb!b}<#O79!KEGQQ5E+)@0A zCthspn7v@(L1UvM9t+^;pL}l7v|LX$*&ir|EyJznWX>{jjFPJx{ zea2o#9d&dysE4sKhB5+2NMV#tm^1lj`Y)0IB?iITIp6r!DPKK%b-C)Ke8G%Fn4ZMctP;kDA9duO zd*!hVe)yelSSU^URJw5-AMxe=a~*rZjE_9#I7jj(&t+78{K@KB^XBLCxsJ|`p3aU} zR}MQcSueeM?V7Kie&RwbN;r&;Ic?catcae@uD4%%6P~ahLa|!gn85ZKGyjL>|GRT# z%)*3#Yj8kloN+AhI2HhPUs?4EsaKZ_EDfWmR>rd&^DF4-H;*!?nIAUVQ%P zubq9uX4~%a!ir*H)$pPvFZHijzS9mnP)aYk_|hN#;D->=^GlbWdg`fC@=CRwtbb}S z#NPqKiTldSE$(0_S6+MWx!-qv|G}po$5VEwV!_!D zzx&NwZvNR3r<{1}op)mCOvy~T;up7m{U;Y)bN#J-!!Iu$c=o!h&OK+wAhfvQ+~^r6r3N^)Fw# z(~esyYa&9l7BqI?FJXa%87nl-ESO@gT)y=Dizc^B4(pNUJC&ev)z5Dj7+STWzfdfd zw%d5}55N6Q#Kj|_(v$)JpYUHI0cOb&hkW^!S6?niiZ?ZnN0m6Lrc9i&f{?UvTOWG* z>E$aP+qYxptAmRdEm~5Ih_N`XlEsT2zxe!fzH#37etGvDOsRUga>FlfKlm%BTy?{3 z11nb*`Rf=$v!Db+%R>m#z2Sb;~!uea4nM@Ab^$p@G4{RsD;*W^R4fSx5c; z!%ynOcT*F5Hys6vTKFsSk0eAeaB3ScH6<}6FnYvqe0@0@TJ`#zeP#_VdyYDSIw@rs z+_yB5HSuQK>=YP>Qh3ie+59b0aozLX#~*w4kw;(n$z@mW`lT3gJ$_4V+lD-uS_Spxo`Z}~>t?K(ep+adsW5&!lRIRBDLxECi&91xdglG=I z3Mhb$m^;-thG20hyWqU@nlc&Jb%D6~=9>!vaT8oA;|d8=GWh$~0KdQpu5+R-w%#Gq z!cuOj!I76x9mL8~X=1barWOJU5+oy^NGD%#mshOC!V(X2Yn;Iep;X`;I*9 z$gy&b3m^NIQt|umzdv{Gd`(Ck>p9&$pMCOCgnh{K{w9-uX8tQAV4r&Wv9EvY>qI#9 zSotZ}aT$yd_C{F-c7cc*t8$}_C(qntkIOH<@GrmplVs_X-(0P&55f`QNlR#x>o0q0 z`2$Zpf6c9TY`fFW#!?-V9k$x)k-Khw@9mdwyYnF{nmu0ss7j7=I;BIeY-~g`0L;Q z?oR>5y#|B(;12R;>b?hT?$gv2q-iZ@>G6&9<4=-JO@bRu9IdpQ#$ko6={W zemt$Oo8&nut)tqyMN41EFPK07%SU|l+YdkZ!zYgLl`>lEefQpH(u9db#c{n3H_j|& zLUKxvIP?%0IyKfX5okj_hf4AI6Hf#|Aha5#H))zJ3aZ|h|;R3_*5 zIF2NVJ)(Ayw-hMHIy>k_O3$)pWKPD#LRECo^A zHNLAoqln75KfLt(O)? z#RQH60d{y}5FaKE@skhUAE}ehc?YSePF1bBIa97ztq@@t%$w7(*_4***g9=gy1BKm z>eXr4t}pJs`@|_N!+pyv;g)&^U>R3>>Vy_o@OrgwsSG0Rr_(VuDbGU?5yznhThftIa*iJ#PolNz$mm$LYxZpBc#e=Pjvd14;}tKH?wmV! z%0^Q?DOC^<6&o8$PmWiDfx;@pl^6n^tEMb-TeK0k-+a9wwV(a;63Fk)3 zjH?5v%yr$s7z9VN+uPEN{^jGfv6DLb#A9lKKJ0+~?!Dz^!df+HQBZD*xPrX!!t)0m ze(bTQozl}a{lNL%>sGI0P76)7oOs3=tN-%W&o21>*jW7X>%TwtgcCTkKIbn!zx2z8 zA9L)fr*_WTbKixXpR8NM-1KLkuCI?(x7cVSn5%N+#Lc&Wnm&8~0~N-ubi=R?&!u$? zJr1vWg>eV*sUy9S^{a(oRB%g}<2aC8SgQ{e3*9}Psk9$aiu-EpYiU3A-LIdu_T!I! za^AV+TD|bf8%G>{EcPrK$1IV{KmYz~B!CSlh6!=QB-7SfL!%&SX=xoFuM$J8MZ3V6 zB#2q2x%HMCu1SgLrx*W-Q;i*JJkS$brq-+B*xL1B81B{4NxhUMnxQ9=TA3D)&7ajl zl>Kz|dM}-Fd@l&XYNhU^o2qg2+~TF5epYXrF+JrvSiDT|AP5}c{(}=^^{9@)CNw1% z?U9v1WLg~h*2=*ewVQ0WZ6@XKGiTnS=a;WtGhPb=%k}q^{#}9rBMwjIl++`7AWpp&)x*F^yMOuUqiUT96Sy=6K`H&P9=VQJ4XAKa*3`r5 z+KCzYr{Dc<{(?FA+{^g7c$~Cf$%-9Msa;) zY^+)d;E@?)Dvn`Qmb2zbEpXV8s=&@-MYi2z+I_#eZPOO=*j;zb$aOxuc(7Wp!6IK- zRT?YDZ~f+vx8HHsaNjd~?6UcBN1yh`_s2)H+;*28Zn^5*HwSw6-S4PVzxET)Pb(d* zTKU%47IU*B=(O@sZ<@3i}t#~ydWpFddZQa72glTxuQM?p0X8PS3g-$jl2@DJ~P zdBN;iJ+tS{KkzS~d|ZpergWNWHMzCL8a-aC$8gfdaLVqv@1bLkIgZ(&Qd!F-tA?Rr zPCYOiPn`VoD}J_WpzrXb4m_1+BbK3*SF2S{nNc_@7$oV6(ec%eCrYc{*>C@2 zIK!PyJiB9ePU2Tzdy~lK&(@APuID&TYjZQ^fW?UdHP*(l@4DC`D3?3zy6aO*mOQt# zcS-NSgqEhJG!}oXbu#CXk&$#dEt2psM0fZyYpw757#a&3!AmNYg1>9YwA5>%l$>D= z5W^W0!VMxr5HdtjRIjvVQYP`QjBpki6DTVDX2%g$DMkq~L|RG}rWI2CF4OY z*&Z@!H>y>3*m{$t%kgrs^3jJM+HAAUINYBVn#)=g+gSOIs|{JW&)%nA6v)nwndqP(c);v8AkyB!j@K_ z$mqzU4<)tQ+i$%S8OxYcsnkL?tnCeir#7#DPhU3PtD$fNmCC$^4QZ)KOwC; z;(-0vuU~J8fM5wpqyd5a6aJq|06UY%c^wPck#J14dgM61BU~(b?vg-_3&CMsoFb@d z4&&&{2k(32Ve@Xg<^GpmSdmIi7TonbXR|FglDIun%A=fFCb-AobExG`TDWOK<+fXH zF`=c!TD{G7J3O1SU2$&Y{9k?rc} z=sf+bAJ-LG+B*PW_9&*SbbLY;TIdf({-??V>I*19L&JxAAb{M6W zMGBlrz_d^aWzbsgow`{-s@bDs8yySdnpLtZSMX$~~>bF~=U=+3}@Y zZu;fNAAZOQ6`U)JC|6od;8=Z6Ixf?MbKw#L?jqqjk%}>?1_)vi!!@#vj}$akp*3>r zt+sPq`tmEKk3Rg^_0#J{)+0Xktnh^U_Fw)2@3{45Q$$#O{Go>l@r*llhcE8&O5bB$ z(>K58raS8@T@Q#ODbt}N`M4&#&TN-0t&WK@s(jnES8u!P?DWPvKl;SY2OTi&>@&YX zb#oXHDVZ@wxT3CtJ*V%9@RAeNywL=AV(a>m@vsu|FeG6z@u{0{(lWs#iODERngnfi zWTt0!o8}|U6W#I3$h_J6?6ctD_V%7xJ@d=s>z{n)(I5Wg`!jPr?fE0Gx$^c;-hAuu zj{MT4i$}uXs#|WKu-R5yZoKhJkN)b|Lk_y|`{%4Jk6W)vQ`V5jf9dD{tHcoe0G2^% zzIv3pSS6H%*dv=-YSmz@URNCZdd=lls6fD48Pi^>5-4No*Uvt?E4%Y`S6uVS2cHP(#~-X83aSFcZr2|>tf^@>b6XoQgsY&kqgQ{R*pt*D$&$lGsxWk(TD#2?Uz4Uv);&bYzc?^wK@)?+Ss_qaomuvzWM7{-u<0otTVgE%L9x5@cVbA z?**Y{!gYlk$MF--JU37rb}4`JmDdhD_{hFjURz$kGktM*@bObmJn)T|UtYIvtzoRD zV&TZ~%BYvY@v{!k;yDg8h7wb))-9oqBcdodW;0C>IdDG{)qnM?Uqz@20(dk8K8RKv z#~B|VfBWsX-+lL8)I9OT69WSSgM)+1moJ|(Wg}~;@A`yBDyoc^M?C3K;=T6zJHPqu zd&cUGr%afbChI>NAv%fmRDou=m&E!%0kEn9tuQaNk(+}DN&UN7}VwJNlT$64#7 znCCz6zypQeWhxvGm7(&Xl9ynSO)*@QeV>sm^s$}3ebW%RlpQzSi^#Uj%07IzJ+9DcN z%Eqxi;l!hV^V>H*`|LBNNh*`kTALtP^V#Yr7cD;M=%XjKWTXy%{l@EKW8;K6fwGM2 zxT-1n{Bpz97`t6DW@F^UdKkO zyX?9v@K>!IR8g2|n)K1fpCLS(GG*eV%{Sg|*B##fwyIUe zsU_TX!&ph_Q$xRe(7syLe)Y)1e!Atk=U-g1WJ&L`U(k)ZBnCKH;5XFB_W=i1N{IanLxs-@h6?|wX^1Rf8qOQ9=@`#sH3!^ZovJEety@- zW5K@jvJ-v9Tp4Ie6(zC8eVdzcF8s+)5}h#XlK9QnhdtNPR8|5%&<}F}01yC4L_t&v z`82moxZ#GM2}0sp0MOb3Ff=E$sX0|1U+-m_Gp(&kMc6U}9R^X|Qqxc?BbE~a*VZV( z+gXBHXVMd_VMiT(@KHw}bm~c`y!V?w1W}BMkFH&F*ujT>aj%)Dp8YL^s7%L7R}Vd8 zzcn9!(Bw6ZYkB*FkL}SmW1~qKzr{QD_+zfS^3t$e4#&-X_dmAH_FI2(`pzuvZL#%M zkKKE>sZ=>{`Q4vB3suUk}xubl9eYp(h!@L?|x-1p4Z+wZXJwB4yM_Bmkw3s2m` z!|Hh5yZxSL4nE|7v_}QOLwZV4_;wSjDzPD+SiwWK*aU6KG0lNrFlxazwMR z99sy(G1&8z^jRuZuZJcGcHer7C+@qeQYnuH>dn7=%+eFFK~2dZhS(sV&&Bf3pZ_Nk zpoI9Y_ov_dK2025i{Z}7ajkA6=0Yi9i|f^c_V&G?UR5orNg`b5 zlkqSNW83uPv#&n>c;D_{`r;S1-iVTDtg>EH<#>{OZvX!m(_)k{in9|Fg2)d(_{)hW zpY_qYbqn`D;N5rLYw}WPL)7!Nv%Xr7Y7gFe)A7d~`_1qE-L_jc zr&92b)bW0D@g+NMw{3Svdv5w(vpTw$EM9icJ@-tR)Cxy3UekVR;^mi~|HJQ{_2ZwM zJ7?DXS?yi3b6q>`y2mjmoNRQs&)#z{x$LUnzW3ff3-_MY+11mtVCJ;8H(!5kuP^Ps z=*7j|JzriqT%5b0d-0Mb+7hj>nKgf5=iSfw{&xhi8J7v77$Z+T`_chNoUmriXW#ky z*KWD#2CZTXFHUqi)kG2dki?f!Y&eO6v4*XM^%2522|^8UUB6r|pLyn)x7>QusV5#k ztEVTQ?>_qIWA3=)j*Bn8SSbZJ=epkXY13YM>7|oSIb~Wt*U`PVrp`4#yO`;EtjyjA z9(d@%2kp1d-W{E@$JUpBe*NVtsw*QdyYjkCHl8|f{;ZkPb5~t?-2?aD!C4$?v+n^1 z9enTs`|dNhvt!Q4`pOO0{9J{Bp=L(gjDru^zjIc8-u(SfJ?-p64m>cdR}MP#*dJYd z{YSrfWsZ+z*H$GhG?QAt7FGW86vD^=~PR(9@nkawyL8F zjzwuFb?GHP-DsnYW-r{ovonAF4L9C!!}U$RSFel{5CEZn!heMXED`&D`6~}Rwe0tA zzjgdU3*UL`<>rh}D8+S%<9Kmoo?o=Iqvzn>6-y6VFz>nNo+XUJ5bHs>+q7xtp8ItY zj0+3%^_Vl^+u!`g&#$@Y^iz)Cdv;Gg+jZ=*C){|`?dM%|i7S~=;UPyJ^W%%I{q1{i z?Z04FcRrub^<4bZtGjyUU4QlEE{z4nc9y~tHYO(jSYnn2Mh6a+aLrAd?E1u##Y4lr zg9FcfY3E&aNN@(+Vyi75TQ<0?I5g0|`00D@y!z_f`igx6126WMo-Y)N%lmP{TXE&j z&X=)D@l9ifU_Z2rW zpS1OMzk2DVfx=*+xZ>`cu4{1+gNOzD9lWBjVxZX9TUd71$;V+<%t=4+%u7p)gZ(93 zDlRV#_6-;Mm-XZI07uJ7S6+E}Z=r9X(BEGe>>uba6ov|g($6lv+$d|H0i&^6uqcFN zim`LAx_())zp$dO(BD@o6w#|#Tzb`IKXHjdpj0!yO-;Js((_8i6@|fKp?Bcg%P-;Z z7%DcDxy&;W-VD5b4>+WViS#Wg6#8&RS~zzOrIbkjv1eZxC@vW&^%n>G2KxF-g~39h zxOB;jlc!9ayWl{Kn!v!4*$cZk;_ie!32`kr;LH2W>*nE@!|KLH^A9|91&D(}am5)Y z9V2xpX`)O-ofMIv6@)NC4aNGWnova&uSYE2E@Hx^Yltw`;ndyji#wG{y~Vy2#lqlA zy?tAM;R_xoB91uc+K|HzJz7Zbk>{UYQS2`i`mee4GHF6d6oh4X>Wr_Qg$Wi5gO^=; zF|Ch##9ERztogz#ujnuJ7mEE4+jMXVBb)oxVxgwbCQB#GV*3{9~5j>@o z!n7%IYDy@7;`{^lfAG%hruucE1B9GbWG=e$y58Zw<;A}HetE+rUm#9r(jgEIy8RRW zlM=vghl5@mCyoPwKZ+m_Gw-gamM zz0lvg-@?3LxCc-namK~eIr|-Y$gJrT?b?WtGEbMOzuUAtJV$?DU$Hp2Z29tCcG}iq zgc@9HG~f5+lgmoW3dLe^U=Y?(Ec6yi%P#%tj|2%N&RCYkfsuk(0`_1dVC~<6&?h~b7%OASFmM2ra=Nu!K)Es>0doCG9UQSgkw zGu&E^7=+T836O$$F`~HD)FvD-o8TylYcYa|)iGLF!z_;}4-ryP41}?jFosy6DS%lD zOrXV}pcArEQ7maxYw$*sZP_HW!C;anNWcUjgL-5D$Zr621Gk2f7?(p7iXq8ZsG_Kg zD2X`H%o0T%MLA*((kN0wXoI*#ju38u40qxx3Ly|ilG$-B&j9L6pWT=JK z3?Tr8FEBv|hXf(rFjC6sl;5lsrNmH72%QMA1ii7DT1s@If`N{qiKEAtkc3HLHQ2C3 zSdy@$X@W?t5f*wR*19p3mTE&WYsL*E0~Bp3D5DFIZNeZSAd)d$xj|n_!8t=lDdjc!mXM5}vdUt47z=xeISj~RFhQtF zfPe?Kfh4t9Bm^7~YDi+if2&WB2*L310gXx^!2MAJ`bl3D0Yq^_s3j211|X#20&G%A zKm+50d_pJbL@dJ(hR2Bb8j6mnAS5A0{!@wC&(T37$t9E%;z|BrhQp$wNlh{}s8S$L ziNU(!7J-{o#McOA;kgK**1D$d*wDfqSf5zQ;Nhv(pSLm~ps$4lDA)#N!7b(n`4|I9 zHO3(XbN<`#D1mGPP)C7=9-L6HjGpL}ApG55gMUgHV~#5jwqUc3q6nENQkFDY8`w#I zpxH)&n&jv6=_i(CX;Q(GY8G>oXoz6Dg3-at2*rqEhSEq{1hx*b4tTc=p2##h0*4dA z(3=v?h_(bp4r$Y53ffWy>dX?<;A`OxX@fDE*bjxAfkz2G1o!~dlZ1814K?UR(cgk5 zeh4bf280GdRM`XWhNEWH}46cYR)&dl+8=4}C zI;kcsuoRZ&YLbp9E}gNv8z68)xgl5@oP?T)n7J`516v$n)G}!!#{`rj1hY&_X1HO> zBo;-OWz=9GWZQ3*HYF13Iw_#k)#Kug#Qf~ z^0bkNB$RVXK?-O9io`4@G@(N{2BnlUg4%x{KJW5>G=d=NAUS+L2htb^^JSlNNH8ps zbVDMNlg2ZlQCRXQeNK~t ze8MMf3}sQv5?tC~6_tMjP6^*ou#_QVlTX3`IByh_)<$2j1VA0PG^wNvxTs0kM!6wy z6oHTcYB4Vhq-0V_P2&%Ujo%F)wgLZNzG&tNKOAyMSY^7wHBG1yN??Hv_8ODgK;oa@ z|C|J1Hd0C)MHyo-Bti%xAl%+i7&b$&%`9~&f)C1}KFTyiy}=TYA&d~T6Kr)Jp$?%~ zI~>Ck=!a2CH84ri4S7^0U&<^;CrZ#AErM`P&;_U=SPf|K_R1@-;F`I)xfz7!&!69(&1Ku$XU*!)WgDq8o6TqO>BbKrmu=5wlhods zZSTzG+Oqlf_FS$#mv7H@X0u(nY-dL{o6FA3=Gxk`xEAi3nd_RF@66`%xhzs!HVZ%| zKQo_iODgkul+gC~fSN4u0U!lH27nBpE!Up#(4Iv&2NTow~dKG}R{JJ{~rt9$NV9X;K-={>pW zxui=T(`nDQ&FJXFH1qBG?)F^A=bS@0ouHY|VU}(ATsD`@cVs(rxjZU6atRWu5&#`= zn46i)%}D-DA7q#m(UQ++JM&3CKQota&o#2ywj2bQ12fr1%7fbkC7Y$3badu&x%LGM z=5=&*ELgB$k3IH6xq$$*&TO_bmz|MID4<7YdoF=|dlrSZ9Qg0df^s(7p3kDHs||C> zgY_Bt&uco`@||s+`F5b?+w(I3xokdx_6^@GQhUND5Rgrv(VES*C;1J37^|~=W=B%f z*`Djl=JVMc{)1%lo$at3^v!4US-c9hUvm zVX3=4pUr{Ed=|J_P{8j$;Xf?_Jn_w#F=P7l>2PXu=FDkpYg@Qri^v-Q01yC4L_t(= zAu4n2UD<3WWDLmWJFz6Nv~!=6&!aV${6DsI<#PFKE}zSF0JXC{*U`Y9)|sEyk(gF{ z4l06qPw#Hab+tpoFyQ>meAmnzh@%N^qzykE?VX(%E|+b~w*e`e%Y#m?JwLN!#!S?- zcXqUQ<+3nijFm;oWzh-0$qxpfmG6dMgLlJuh3&cLp4ixp(u$~M%a#ok`c|zRUi9LN z#S+qRp-?ClN&}@*U#V0=6`=83LT#xqTu2JV;&8DvR4fgbN&`csUO=O@gjB@M`A`Ah zq2j<$vA;CbUmQXP*uw)u=sk?Tl?4?LljGe#_ur5mWs$121~;L)T205N-&E< zB><3ziv>WV5~b2$DS=`s$(J^yzZHt8OsEYdOb(!XgW(2Jak%jVJ_brd1EmtsR-v_6 zDqzG?u{gA0l;S{dX#fuvg~GtlzyLTel}baULaBs8@8A$>hF5~XAeb8-D6JYO4Ht(X zzW!3Nw^ZsMEDaA7SAy6OhAR|?inxp|3=S1A9HvkzCBT1_lORe);7kOP1go9;#fma@C3zeWg;NSSk&c&~*rXFqa_= zQ`|sfU}dp?WpSV|R2m%GfH6=k0ifC8Qen7QO5|KDp+l)uDwIkC!$sgGY!3{TN=3kM z2`Q-@D3ve}x(s20092P6^$ssaP5sEGBXvEEP%sR6=Y; zP#YL*FjFcO5^)s^y~SaOvREn}Un*h^LSKa<#9J)F28K)h4Yd}~R4Sl#V6X^;(qIv( zP%LfuuQXVKT@{Kjl~QS_(PgMOSSl8Vi?EjdLJ63qBo#}=VyRS2v|K9om!MM+O=?g% zjNif#ETB*-6@XJL6#%7T2?-wnGAO?C@+(XGmxFnnLlMfcSSwr^29>HHl)H}f+$gL! zr&Gk>UI@4S8s}4lq0~@ZglITJi(4_&qZP2B3><@lfi;ww7=ZBASlhs-#&T^rGZtVQ zsnHGBEi|H(SPgt?V~g8yyyG_z8XvNO0pvjkKn%v+Fn)sfdCpQG{2S0XlKq>izZQwr z)EWS~gJFa2D1op|{)jOE;3`4@$QYsxjqzogGcCE|sEn8mxYjgeCZ?Jb&AGzt48~Q| zn#Sk^KZXL?HYh-b)KFr$1)!EFLz4S1YA6JRxdRQ=Xr(yoVt%+TZLoxoA=Ho!WVIz= zd_z7#x8UD`tR==0OH!U&uU8#MG&MCryOGkkbl8Arh*iMAa43_|&{!K`jHEWCHh_YZ zbIS`4vAT!s8tlh8GI73U;sTWsxkaQG1fMwNvy>HmL#@;Yy(h746&GtY2YwzX(E!Oo)u`z%e*pi^yAwaZPMAi@!vryAmLrIp|q%RE2TB3CV zmTAf~^lKE=Cc&{BHfLZeI)bKQX(qAue^*swV`DgU#w2Epan6}^ojBGRH~Akx0U zGNqhZLam{eU?4+r{zVb4kXW3Dt%1uSV2d!405McsG@^|_B$iN(lA#PZ34%?~EDlfiwHOq*BuN$&2%(0NWK=>((kp2M4w?XjT2wc< zNqz|kHYys0fBm5t0+OZ-Hw1(vRLH+hAZ`c)pqdgx62M-n1GFbYGXf7m z(1da#F8tVJ@{PX4k_6vUgCaCfF&9fMH7Em-T5w>Hu>_*VZvqYBCz-$f8Nv-n5`rc| z6a2q5{VfB@*6Vd_Q8-6bt5w`GK>c_eMW?^v{JR-&VjB&XCO?=6C14L$i84(X#_R!! z;R;Gr0+un$fRBm5P6%3)uE}468Y5_Hl#UG?s8K|Vg}U*B!I&is_&}rJgg}NGVnHQo3_<>x{__&R{nQ4Vp_HOGF4tg7K@gw- zAw$}l!79)KXy|Q&f}o$|0+|y6AcSfd4}inJKv85v!ZNpsCJBX(fRWT%Xpq{*SSX?% zUq&zvF@#u38el}xivJKtT*8Odw`ok@GSAlY79fNxR@cNF#$uY@%^+V47)v3 zp~Gwt8%?<<@CF;j$}lduphm}pBhVvExGIL{hF^o56k!-6SkOAATo_9@=T^ap2~7%K zpmBxhN#O@UO-kdKD8+f8O~AONxM-v*uDJri4~2*k*kBG?Yh?|#4jrq+*BXr(d0tAX zNGY_yzH!$`QE7~U8t@K+FD9jRf{FTn1Jqi{iP14wSDG^6#0WAFYgh{kpaozI8xv}i zu7Wc0|6}jJ<18zx#c{OaPA7Et1csau$zf)?`-IMu$ypF2s)(YZpkzUipn!ro2|e9?&e^HbTW8Sw{odd8e!spy-ut|#x2)c$cI^r)uT`rAv^FBv z92f<#QAR+E5CM81JCX<-3gZR{r6a+(BQ$|!>vu^a1mqF$g>pYu+;Wf+oPcZqxs0Jq zXam8Nh(m&u#fdP)z%4j2$ViK0fCiSP%uy=F*kEE|Y}ZjnvJTeY{s=PUZ%q&d5Cp6- zfweJ*$Wm&~Y$Xj4lQD2Anwq)|kXlp1kv0@Xzy*o8G#p8RRLr;yP(@MT+7@9{DaDut z_ecstORNb2EGa;XFkD~}gIO$L0E^-pjHi?-i7l8wi82zT7-@_&!5AotwTTge!Il&n zmcT}8L@n17NJfsc4 z3xrY#!!UygLdX~cPmn-ZkZdaO`akvmKmj03VYbFhX+t=p z2$%{4u2Yy>aLm&fQy7d5;+ViYl@czCY=^`u&{T#hB7}e{#eo8jah5ciY6FU5Vyrbm zjDp#)MJTvq84SFJ9>*wT0hfs+%plBFUB8)>AV}yR7GU&O{rD>sBmlt~W5gh(gar6N zVhpAZ$Jj_>B_x8I{fMFZ!jV)W@>2;XQkvSHAH|O6+735b8mVktGpi%0dV)t%SjjUk%a?2@zCqSd)I0C6Xawk}@Do!X}YF0agz};`%=ps8XCZ~fqH;t0VECl{cjcMj<6PCE#i6uNHxO4}&uS~fC3W(_NN$%N%_KZr0gOvNdW#|HU^gpo!-5(MfMVqmcA2q{B9 zibLbt387-lG_z=>I+^qwf=whNLz(S0OjZM|701$|l42k<$Hd#PVPj)D!7z|CK*W}q zgEAW(#(oV%$6(tJrDc;C1VbXc$@C`@aG9+Uf?C(!I&uaYP&Foqz?P;Ce;n5-28cMG zn@AwLKdtKR)*UaY|)TR1+}VDl5-l=YEo*UV3ch!WJCn&0iF?Q?AqRBt;%gCf@;EZ zA|WTg;-hDCZXra3Qnr`Cy3RDMH82sjkg>o@JB(vWs(}yo%jHCBEDS{iyRI7q5mGV^ zs}{$umq5&tQj$#t7Eww80MG-g)oJxVfB$b&KqBQ&Z%W0&gfUiz0#$2aO@Sa`41|@j zZ-7@(&2wx5atUf>Bt;sj7^IH5t|W|G9%Ed{cuHfMV=}Q}1I6_WNo+K;-B@9vbX4$$YfLaA=l|@dGxu-l?&xmI1k-Di(BvM-8*Z=%>z6EYC z@~yLG{_s2Bp4hPd*EifW8EOzYi@Sa>nNC}u{N;@U=FBa<@~4oyk>Qh-8dBjv?@OIs zJ#Fo|mgfE1Ix=u!nQ3k9%;)dC{nistIBw>C`L3Qh9UYxrZEcy^vzuG8C!KuSWX(V4 zoO4<;t#jwjoxT75ci($YECpbM{p-fwRQmfa4g3}QHCcb zD(9bjK|a^n+0m7qx$pCfUxX|bHTw4Jf7LoW*WTHE{P%tmX;*{o62UvKugYfj%VkwFfqRNu!HBfwax9!cAa$U84o;o-`qJ}-Cf=Jd|M{l-rX~=tux=zk-zWW zha~LF*x1CF0b7eVA@lbKU{~+Z$YMN><8(R&2MVRs7i-r7t!B-f-P7H@a8Advm!1Xl zgfIu|W^)Rnbl07?=Q`(g&0Bcujn}XH?4#1~NQ_u5(qI-G9a1q-EElr5jsp)p{?pIK z8tgFbM!&rB+UD%M?#`Z{{^(306k&E0NJa=Ek<_(vX)u?|A9BcXpME|TMU`|KKk@Wq zxqN4P``qWBTS7UBV*jM$kDE2Kb$(Cxf{xDieB12VEzPa1C!chxk_N0KV+Rp56O~%5 zsb#xTN~5JQ=JnTKKk=kfU|Guo(^;pNL8ShJ5JnpPPx-%503)U1@w3kQ-f7=Hvs%NJ zoeU$9NF;!sgjyhD$9&`P?ylCJ?%Yq$`XQVps7Ba;b(%Q#=%c$j=e4zTo%rpuVB+LN zXpDIC&ub1ouxHVNo{oI`%$c)St{4hpY9*SgwcwQFzX4aOE!noN`HQkGxt{jU&V1&h z58vmB6t*3r3{{$PR`WxU|Nk4*_3wmY0ulfqYJ?!Lq6A*G)C%fruf2wZ7%rAV0l@_L zU#z9L@pspr_w(;FH}$~NFP`?j?>01~YqbFE1(J|~hM+3E{&zQ>^^>!2x%=MYP+_RA z_p(bbIp*jiUwq+ti4evVHu4<4al_hWi(f=amxhNWp_IFcbOSpFREb)04?0m^QSj{09|a1?T{2{{0Qto%{3eGS_?H>F2)d`7QSV01yC4L_t(@ z`u9?esj5E#Tf0u;iYu;u0;Npo*M5A)ckaCTila|E?Y6uA(BSg4 z%dfficW3?lqTBAhe_63GP#F5f#g`ucjbomF_PI)}_T;lqo_qc|yX?Hv&`@EpI8+=S zTD)Y*cH8a}2J*oN9~>R&?d;mSe_&|E(q0)6DYfgm&p!FsFE0G?PcFLbwma|HY{rbA zob|opz_O`@4oX#XZ~0zZNSm0;Lh9bczN{IXI^@7*Uu9a@nO9zw^=Br32-{z>;mZY`XZ8 zUn*=NEMdHo=;))4`^7~UEM5Gphx7;u=RAStE z=)wEXJLd=6?6T|Ay}gCu!suvepm%7y?RHqdem!6pZYoVpO=DwYVB@a*)s;6~cU?om zyXp2@mo8s&=dITd^$nbM>UXQv7+C!K8-I7_U3U)*^qqgs8Na^rs=mP@bv%$&&^jOq zc>9YlzC=n1>i|K}-;2SZdw+lVpWpu@1qjmLI^oFT(94x-kZPQv4TZqjV6t(1Tu99= z=aGl+U%BGNOzZ68&_JPYfME*hCbyyK!3XZS_=2DP^x{kIzUy8~$J5fuTW-JinswwN?tk(5C$78tvWw0=yW;!F#wqvTbKCjn{P1gg@AqO~acSS+z`#Ie_I@Xy za>CH?XaI=^ggpyRGh~x|{vRR!`$rfF%5DHwjHrepVyt73)JiCaN+Ug8`SQSWMOaM| z_?U31jH;ZH=`*%Yrl&(V8jAWqtj7tpEe)aQbI&e$=#i(-Iq&>!cHGu=6L9*NGNp0( z@}*mDF$1YEjH(u+N=VP~*8K6cd}rs#@G2c^h?R^+O2OIAnbq7{t5uqkF4)LeX<_gl zd+Y(z9YCype!`5qLO>!&V!|%I>Al*SttKY7o? z&-9;k=C8Kf=IanMfN9=-$IYL9@(?fl!{UH9kL z{`|9`>0rgu!DEg*Van75qVb{w4t?h7#cm?y*T$)-7#SRS`~Ua%|7rgN3h2ilzW?G2PH$?Ox?yZGR&^%< zGL}v^GG>96*)~gh_V(LuJ9FRtF2D5R*Is{9C%5>rh8>ricrsxT6iqg<%5#t1{lFtH z{rZ+Cx8H4+ot!dRlT#X-o`2}ZzpPn)_nmhUW;LW8Z6ZI?<5ktrI1RXV_BlUB$o%z# zPb@nr!HdNaY!^%Y4`BR9T|{fClpvTHM8M%AqdgAFMwSnbHs?E!I(W_(AO7W!Z@wEK zhg*!Q$l;0-O_?h+4Px-{24gB?6$X=1gbzIM@Qyovy*ZajH8xZ#6%bH6krXOE>6=H( zU?QEe42l?G&prQA`}{>c2ORX-TYvfF-FKTBQW{}qC%fh@f*e^Yk(6O*5lrAv49jDD zzyS-jj36}QZqkoq02mwd+zX3i0jF`>_n|MQ6k-hoPjLJ2{71;v`#7hRfX3KL<1mg0 zqo8I&M2uPqFAW5>I1eH}kpdM<_h~5d*J@Zj0l6;xW-5m;@GM4&O6_;%^7E$QmckC<|+o# z)tsbDEq>quhc%_A>Nqqi1f7?fAY&DHV6$b$b}- zpPh4&(V7xPIP#;~7oUFd=QrNndYhdnvj~m1-e&rTAAI!J_dZra8YL{p4I`lx1n~$= zu!t3qacpcXj$>$mRdRrO+F*oIj;D=@lvGAitasdYYeenW-*^YS-R^tsNhpn#6r#G@ z*LRMU=1u}(0&^kc-+Jq&%bWP15941U5;7#0rX$rK=CzeaE(6+h@xi z_g08P4CQ)Biq(uX-+%WVo_Xr&4?p^}QW@tKA=L5`jkTaI1C5R8ZMWX?vroSO$peoI zmPBg}oQ0MDnMw>&pv(k>5mAW@v#@32+Stbak=OQb?QGp==Petpf#FwZVuqAb#lDJb zGKORdVU|ZNq_DD>%?WQvSYLeh!Nhp2yJw-Bgu`7Wo$xH%4U`rJ9e&`v?WQL~f1N>b zqfJJTuR0Q_Wa<9KD9U`NFm zw!=hFh6F^g#7iZo7!wf^yKeou;~%57sn_!y`2Fm&&!Q;m?(T+VL8`D0;aLr-o18kY ztC{QS7hg{Jf*_s8D3^0IR$)s!WJ@0{?>V{BZrh<@sc7Z)vB^ur(iFq6y9n=_|U^C{u$ z)_#F>y!n<}hC%>sXUy0lkxGC3=_g3bbUNw#zCtF|kdEW1TpZR?0_0Y`)KL)iDFHk! z#*v0EKnl$q+sFu91j0PsFx?o0F@iX*{xs^Hzr1HN%X@~W+<>D|J8=tUTR~fC9G)ha* zF3OiIS+aKR7YpWgQ-qZUHE0CDWbDK9pQ)h3jA9Jo4_H`fkRe#rCO-S{Jt@hqd+g=d zB$t`_)RWJC{MiO=kY%xiZBdL6C6SUsQY;8H+NdxHtLw(cHUwdyuuG{+37A*|(nsMC zK%>Z~SlbptSibd_cfo+{x$jJ^^?`Fc?!NU#ka9QGC=81v##+G^5U5Z}*KMp?UJ@2j zBDN5jSU>jZhaVp?Z&CBiTvz+tFFyN_Q3L0WFp!{2Fbo!CgmT!C5`;DWN+%E$VlY97 zA%tDWBK6f#B!vMuB!YgWjP2U7intA+1{4!UZB7^=1XH-Glb-F#NPhnL=T#qhi3DuQ z2v$*;N++0Y!R52&OiKU~!}Eg=)^&7r_q4Sw?3uUri!X(UgbpL=6AGl_6Jxb4x7_@D z-#PJ>)rEWSy3J6l78}d)lF4)=q~j(0FaU-yZWGK1LeVOMTP$UgAO?I zM`xW22TVfHnl-QZ0ebht_iw!U_l4f&+2-a$7aj!VJrfVQj3t#k3QW{z2y)0 z@3hMf`|h(VQi@?3R4W>pFUP8p!rA7TE|CyHKK#&wM;(3`T&rng6vBkEAOwGezAAO< zZ6X&!gc$M_>Aw2(KhJ+a0d17j7-QSE;i)yWDZ>nWKczrRZ4ilsA(jid@9&-Q?KcZc z?!EH{kT+rIMAhfE^U)`t1{%S5E#fKZv`s7#2?V^0>)8eqtM@>9&sX-+VwEJQvt?g`!qHWKtOO=DnA?^`krqB7BnDb|VDGU| z!eQ7&IAtfc*?y=m=+on6X?(|A5T19{k!WxW}!5VN< z#Gp;Zu`m)wg>vgHw@fAyLJ02gSPIQtfHlD+jweAR6+&BYwWCxhKypKJmh4o^{d@ z2UMzlq%9b4Tj-pNE^OL-8W8;GBMye~e|+WD*a&3N5b_!rB2Qcy8~4FigFrE2d+v+1cNn3^$G-o)#3S7{i^dno?mr-^#mCHAN8yLf14*rKOuEz3hW`ECPZ5X zQ~_aZ6h^=rUxC*m#mMkrx&N#mo_NHeC){zz9h7lKj4>KSfgp|$ zLH|SnaE(GH(U3$443=S>yz}0N&%Lnp(u>cZ+to2Mv+zehxd0i_yYz)rx+wt7QP>y* z))z1X9j1sf6H}zH-7tOY9h$b9^6>|6!HO131VN2)Y;>GXCaQso1)9>(_`!ScJ^kWK z=U#M4zAfM0+H&?!engRe@rA{%(*P!4fNPM#Vs*bAOKm{mjCMUPWGEsDdr=To?trio z&T_5$a)=t^2o4$s1C<<%G3c`aeFxycp2k88dBhP%v}Rh{+uJ)jI;wsx5=tv%17z65 zaY!(xnqtF35eGU3?fUYwPuH&-w=It#Ob9W=srr&IATQc^=N-4)jK2TZHyuv6EAw~yY1`0 zzV5g0fAj@pC}aqMJ&{@nV<-dPNIAurXvV1$63_=UZQK4kPxV*U4IvHs4V`feY{5y_ zn>J+{G3e!&Uk1en8dm%e4zMPy*v!21$rqA)aN7uH&PN}8gxL%uvfn=Yt}4AayLtbo zo__ALwHqk2FhvC01T&!G-uv#+wAl<;ikSHR2kvc}w$0Yt?flq7e>nQEg=hcdoLT@d z+lT;^7Gi{9x&PjKG;Y2{6wB$GH38#3UpE$OoN&FUQlSiQz3oScXMB888H5?t7~OH(t-V9T%Ze}m;r>Ur*nFypHkc^D zMkYP)i6@@ec9*@rzSm5nq|3}xk3D+cc^3k==ggUN)#bl>_pk3AykNnK-jxU$^!Ebv z+0-N&kxh;NdHlB&2%-=Z0-A!g0lntjR!V8D2{HyO4JDRUmysGH22oAzcR%_BDYf;Mo5LauMso`cNfZS} z%YzO$pn28~k390&`t|D}@V9K($c{qs-vaudKM+JPW!A(*AW-aLABoy4Z+&vax6UY+ z;lQ!1Sn6Ndx8len4qRPa0UJnc8D>dMOsE+su@xI0VIkjs{k`GWKDHZXEa=#K)!>US z|LHFwPCJgLMuY2;_W~G<-`-e-8VE`8Xhf-^efX(G>(H<1jeG)A%`5uxL*9yv(@T^4GB1- zs(#3r#i*ksdHXN#|M~6rfDKPR`SdHVtQi>S@9kS|xt5zuG23IxKq3b_NHUFL`SxpX ze(>cN6%p^a?RGjqUw;0D!4zUO3#4ZnSUdpI==KW|rDbO6YXL zAv%8cxu=#bTZXwMB+>{2-?Y}TjE+3&C@?EeJn@teDv?McO2bGnZVQ8n<$U-1KU4}m zaPM6V2r8r2!5_C4iMo1aQ+8DxNs5V$(QVXO1%)bBiW^s~ArK;7cWm#vPb=GUI zz4qBBpHND@WEuv^+QxNXeE#_2{-aL(?$(=6b&UVso2x&3?|q-91#d!9pK{#cqBd?h zblV-b@lr`hfXWb4BR~J_;~J9N?7V{x;=UJ_Y_a8bfzaGV-#+d5(62^*wBvT$CzHwI z@G9u1Mt%9|r;#$-?zr<7)2HtKwVglu?6UwINgTZW*6VO#z1@yGAgT!k>9!&tM?eaO z4nAx?<7UOueufh-JhynbR9d$3*%kfIPoFkJLwwDg$RIb-z!;-MOW{{Gj=8{BW^Ag5 zONB4LST}#cJP_k|-v6*zUi0I#&*|;&UAb~aUtiz(7hkmXHd`%OxxBNZ4Z<;kbp2_7 z9`&m0kN@;%5LmqbWa(f$)c-W--|59*V!LSxCo#(sQI&B5aRXR2%L45oA~qV)FpM=^ zJR)h^wgFR;oO0@SzQ+x^^OhS8rgow+1nD~UWqAa!j_Pc{3uU)$~nQ|i;gi;X3{z>u^gOQZdOQkJj znYi}FXCMFe#@l-iI8+;Hb1bCMhMscLaVdv9_V}aRa$>_=FEzIAi`vHZHdA28!A@Ut z`88W?zP0N(-#_EqvzvE6>xXA9e&I!-42BQ}k(+P5ef`>X2P`pvi6k`RtZrfEM!Z7qKn-l6f3Bnw(2m}d>nS|%Xkp@d~ z;e{76hj8{+;(GOjHZ`ec4b4uRG0{h)M_k)HlGqzE)1S?);W(q_E@g9HJ{C%^sSS3+iM?S zE~XslZ&{WU0tja_Zc$3WsDT;+EjCpRCJYmU2{QkSlAFH#&*Oim0GX)9?|<-#%`wN4 zV$Ey@pJO1b?hy-)9b4dLCj)rzw`bXXPmv?zAdMnc#I4t;J79vqex6iap6}*Y#w{!rH7t)aqqqN z+-L7Sgp33PQ;gWIi~hMn7$KkuaSXX{^yz17zx%x()B^wTBaT?}${(5KD1_I2x%TKI zj;vND9=YePV~#oIlyCpwf=jN`)wQP_vuIB9tU29t_v>D;*^ayJFs)H-Smz_>vg>ZR z@MouAbJFRu~`@k`>PkH(HW z_S8!Ci)Ws__oNfQX%w6Z)k`luf8a6SSUWlS^K&k|=eBz*<3Y`j79MiQmDgSS-d|rn zWPYw~znMKJ1w<{QTTsUVZgVMopf0;*sr{?A*?IGuvA?+jjFU8XLL9f#AQo_IF!OX*jSu z*P3b0&zZNluW<8ickM7^+W2Rm8J3{Qsh9uiqH})!ylSh z(iPwR=CO0y+nd`Dtl`9OuDF<)N+4ACyoEBB$7UtRxT0Qz!KD&1Spg~{0 zV}o#9Y%onwim>9fzi1YBVh zLC(A}L@9kcgN%`82fZzyIqGyam+%_5Pn*7;GZa z|GDqq;!PuZ-0`PA@W`|8z4q!chb(&Kl~s^jN;V{81ug@~OBTPlJl{5dxIEa?nSJ%u zmxCzMgaTF+ zrORWBL<<)kb;AvJe)QfOJ|& zSv@c~c*PZ0QOcE4WK#j#ZKP^!oO0tWcl7r6FI~B8<+2xs2KpfLGO}j%mDl{*vmJ-p zhFU==et-S7Lw$hVV1KD}%}uvKcoI#HZQcm%q@kiflS2<&(BHSTG}OPkG(6ZhIRAh{ z2n33@{p>SO_Vx`7uX=f~SSpW>jEt0rhf4!}{RuZQZ_d1d{=QOqxVN|WfCCSVL`UxA$%dmm;i#C_4P`BSs3nBgMj!B`^Nqhi5uovTn{4(po0dsk%Oyzl9i} zrBI>AAfgZgM5R)gFoUU6&mS1s!s`r2-Lfu4s!C7JXfg>m%JM{{OB z@#qr+D~qKyuV4DBt2`GYRYR08ZvFTNXRH}1_7+Dkzv|bVXd`^?q%`8czT(p1q28f# z`IbBWz$kXXds9X%e%24ZyJmP`pfqyn)z?`dQz9gm3uo;Gow=7sivuI8+q&l`9XDay z&%dy2U})v=%fqG7p%wkTy(`x}_T4fAE)LP&Z?pa>a7=6_hG!y0C000mG zNklgL!T2wB+I54o{m6z8H77BwSBNtut3j#J# z!%er+1{;hP&0lce-S?zC*R~kgCLk0-T4RI^F_-|+3^d_&(}(|g{8tJ9i5`98*}J&u6aFq zEW`RMb&Qt#?77>^YX*i#2M31B2qCK`Y&W$z=a3?*LX70NNl;>; zO)QC2m?MEyv~j#574jIuvPLO2h-xVbAvEP}tk$d;iH#L(5#JZ1Z zJVcbz05(L!SV{@v9!1gk_&CslP{bIKvL1wjQQ({dFhHGH$cbtMx#*PbGNdhwXc9*v z1iD1A0#?=6aU3n`V89Bo6uvZ|V+lx!idrZovOEo7BI;R=4Ea(Q58I|v z>1wqKS`@(vFNAX?xGd~g7T8TCg^+QoAqm+8!XO1fge2OKAP7^gBjX^EPDzC)Dgg%T zf`#WXgOMKwpn|r=EJk2W=t2Kcu>RlKYzUPGNux2wobx!238TzQZkU*4N>ZdScQtkV zTBR{jM;``QsTpp=^vb%mwvLR3dqa$=0U{XUYHeW|8yQF>g+VF`EntJ2Hp~L5q+B@g z!axNE1AZiP1!6`DBm%vu053oX40D7wDy*7d5}=ld#9GEuN7dM$2rR}eml`6478J87 z>FFECCcQ*L;2@ShBLq5uJ(N;pl*MQqghnCTg=2(?K}dngi~+R?fG1;Yv_U{lnoKoR zYXK!Zk#yrI&`Q7)b|*$_{5O{Xum4dE`Ujo=@%29%z*DII@%r!40Doyq%|uv(Jc*K_ zHg#o31lx?udO;X5DI%o=CMJBGh(0qz$bvskmcf&=!nT0Oo)=t{a9`=Fmw$NI;U#n1pS| z!VqRnOpJR82O9+FQ^KVdm}$(wrYj>sA7~UxKM>4z2_j=NAcf+T0jRda z5itM_kPy_{wh}_&YSo9NAwilG*aj*zl?;JL(zP8}#P_RUm7_SU?`PSBIfPjlgGvHK zfdyP-c70PVjEX>F9Lu&WD+qj}B!hq!zHO>7W7F^79)KyJ$ruAVK!Xs%2o?g2u}G#H zY(^PEkq{KX#i*VYRRFnF4P$Ur)0!G>3hS6y#ae5^Ekmt9NKUY4aiJBnpb0G3u||

G9YR@u0y#^DWP=; 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

aSjVH6PQjL|dJiLD?aH!%4PUzj2 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 literal 0 HcmV?d00001 diff --git a/export_mails.py b/export_mails.py new file mode 100644 index 0000000..8286a2f --- /dev/null +++ b/export_mails.py @@ -0,0 +1,411 @@ +#!/usr/bin/env python3 +""" +Export emails from emailfiles/cur to Markdown. + +Output: emailfiles/output// + markitdown/body.md markitdown/.md + docling/body.md docling/.md + +Image OCR: vision LLM (llama-server via SSH tunnel) → Tesseract fallback +Tunnel: ssh -fNL 11436:127.0.0.1:11436 -J kai@192.168.171.2 root@172.25.57.233 +""" + +import email, email.policy, http.client, json, logging, os, re, shutil +import subprocess, sys, tempfile, uuid +from pathlib import Path +from tqdm import tqdm + +# .env loader +_env = Path(__file__).parent / ".env" +if _env.exists(): + for _l in _env.read_text().splitlines(): + _l = _l.strip() + if _l and not _l.startswith("#") and "=" in _l: + _k, _v = _l.split("=", 1) + os.environ.setdefault(_k.strip(), _v.strip()) + +logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s") +log = logging.getLogger(__name__) + +_WORKING = os.environ.get("WORKING_DIR", "emails") +MAILDIR = Path(__file__).parent / _WORKING / os.environ.get("WORKING_INPUT", "input") +OUTPUT = Path(__file__).parent / _WORKING / os.environ.get("WORKING_OUTPUT", "output") + +MARKITDOWN_HOST = "localhost" +MARKITDOWN_PORT = 8282 +DOCLING_HOST = "localhost" +DOCLING_PORT = 8383 +DOCLING_CONTAINER = "ai-markdown-api-docling-1" +API_TIMEOUT = 300 + +VISION_HOST = os.environ.get("VISION_HOST", "localhost") +VISION_PORT = int(os.environ.get("VISION_PORT", "11436")) + +PADDLE_HOST = os.environ.get("PADDLE_HOST", "localhost") +PADDLE_PORT = int(os.environ.get("PADDLE_PORT", "9999")) + +IMAGE_EXTS = {".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".tif", ".webp"} +DOCLING_SUPPORTED = {".pdf", ".docx", ".xlsx", ".pptx", ".html", ".htm"} | IMAGE_EXTS + + +# --------------------------------------------------------------------------- +# Multipart POST helper +# --------------------------------------------------------------------------- + +def _post(host, port, path, filepath, params="") -> str: + boundary = uuid.uuid4().hex + data = filepath.read_bytes() + body = ( + f"--{boundary}\r\n" + f'Content-Disposition: form-data; name="file"; filename="{filepath.name}"\r\n' + f"Content-Type: application/octet-stream\r\n\r\n" + ).encode() + data + f"\r\n--{boundary}--\r\n".encode() + url = path + (f"?{params}" if params else "") + conn = http.client.HTTPConnection(host, port, timeout=API_TIMEOUT) + try: + conn.request("POST", url, body=body, + headers={"Content-Type": f"multipart/form-data; boundary={boundary}", + "Content-Length": str(len(body))}) + resp = conn.getresponse() + raw = resp.read() + if resp.status != 200: + return f"" + d = json.loads(raw) + return d.get("markdown") or d.get("content") or str(d) + finally: + conn.close() + + +def convert_markitdown(src: Path) -> str: + try: + return _post(MARKITDOWN_HOST, MARKITDOWN_PORT, "/convert", src, "use_llm=true") + except Exception as e: + return f"" + + +# --------------------------------------------------------------------------- +# Vision LLM — llama-server via SSH tunnel +# --------------------------------------------------------------------------- + +def _vision_available() -> bool: + try: + conn = http.client.HTTPConnection(VISION_HOST, VISION_PORT, timeout=3) + conn.request("GET", "/health") + conn.getresponse().read() + conn.close() + return True + except Exception: + return False + + +def _vision_ocr(src: Path) -> str: + """Send image to llama-server, return markdown. Returns '' on failure.""" + import base64 + from PIL import Image + import io + + img = Image.open(src).convert("RGB") + if img.width < 1200: + scale = max(2, 1200 // img.width) + img = img.resize((img.width * scale, img.height * scale), Image.LANCZOS) + buf = io.BytesIO() + img.save(buf, "JPEG", quality=92) + b64 = base64.standard_b64encode(buf.getvalue()).decode() + + payload = json.dumps({ + "messages": [{"role": "user", "content": [ + {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}}, + {"type": "text", "text": ( + "Read every cell in this table carefully. " + "Output a Markdown table with ALL rows. " + "Do not skip or duplicate any row. " + "Return only the Markdown table." + )}, + ]}], + "max_tokens": 700, + "temperature": 0, + }).encode() + + conn = http.client.HTTPConnection(VISION_HOST, VISION_PORT, timeout=120) + try: + conn.request("POST", "/v1/chat/completions", body=payload, + headers={"Content-Type": "application/json", + "Content-Length": str(len(payload))}) + resp = conn.getresponse() + d = json.loads(resp.read()) + if resp.status != 200: + log.warning("vision %s: %s", resp.status, str(d)[:80]) + return "" + content = d.get("choices", [{}])[0].get("message", {}).get("content", "").strip() + return _dedup_rows(content) + except Exception as e: + log.warning("vision error: %s", e) + return "" + finally: + conn.close() + + +def _dedup_rows(md: str) -> str: + seen, out = set(), [] + for line in md.splitlines(): + key = line.strip() + if key.startswith("|") and key in seen: + continue + seen.add(key) + out.append(line) + return "\n".join(out) + + +def _is_data_image(src: Path) -> bool: + """True for wide landscape images likely to contain table/text data.""" + from PIL import Image + try: + w, h = Image.open(src).size + return w >= 300 and h >= 60 and w / h >= 1.5 + except Exception: + return False + + +# --------------------------------------------------------------------------- +# PaddleOCR fallback — lightweight HTTP call to paddleocr_server on AI server +# --------------------------------------------------------------------------- + +def _paddle_available() -> bool: + try: + conn = http.client.HTTPConnection(PADDLE_HOST, PADDLE_PORT, timeout=2) + conn.request("GET", "/") + conn.getresponse().read() + conn.close() + return True + except Exception: + return False + + +def _paddle_ocr(src: Path) -> str: + import base64 + data = base64.standard_b64encode(src.read_bytes()).decode() + payload = json.dumps({"image_base64": data}).encode() + conn = http.client.HTTPConnection(PADDLE_HOST, PADDLE_PORT, timeout=60) + try: + conn.request("POST", "/ocr", body=payload, + headers={"Content-Type": "application/json", + "Content-Length": str(len(payload))}) + resp = conn.getresponse() + d = json.loads(resp.read()) + return d.get("markdown", "") + except Exception as e: + log.warning("paddle error: %s", e) + return "" + finally: + conn.close() + + +# --------------------------------------------------------------------------- +# Tesseract OCR fallback via Docling docker container +# --------------------------------------------------------------------------- + +def _tesseract_ocr(src: Path) -> str: + from PIL import Image + img = Image.open(src) + scaled = src.with_suffix(".ocr.png") + img.resize((img.width * 3, img.height * 3), Image.LANCZOS).save(scaled) + + container_path = f"/tmp/{scaled.name}" + cp = subprocess.run(["docker", "cp", str(scaled), f"{DOCLING_CONTAINER}:{container_path}"], + capture_output=True) + if cp.returncode != 0: + return "" + script = f""" +from docling.document_converter import DocumentConverter, ImageFormatOption, PdfFormatOption +from docling.datamodel.pipeline_options import PdfPipelineOptions, TesseractCliOcrOptions +from docling.datamodel.base_models import InputFormat +opts = PdfPipelineOptions(do_ocr=True, ocr_options=TesseractCliOcrOptions()) +conv = DocumentConverter(format_options={{ + InputFormat.IMAGE: ImageFormatOption(pipeline_options=opts), + InputFormat.PDF: PdfFormatOption(pipeline_options=opts), +}}) +print(conv.convert('{container_path}').document.export_to_markdown()) +""" + run = subprocess.run(["docker", "exec", DOCLING_CONTAINER, "python3", "-c", script], + capture_output=True, text=True, timeout=120) + lines = [l for l in run.stdout.splitlines() if not l.startswith("Loading weights")] + return "\n".join(lines).strip() + + +# --------------------------------------------------------------------------- +# Docling convert (for non-image files) +# --------------------------------------------------------------------------- + +def convert_docling(src: Path) -> str: + if src.suffix.lower() not in DOCLING_SUPPORTED: + return f"" + try: + if src.suffix.lower() in IMAGE_EXTS: + # 1. Vision LLM for data images (tables/screenshots) + if _is_data_image(src) and _vision_available(): + result = _vision_ocr(src) + if result: + return result + # 2. PaddleOCR fallback (better than Tesseract for dense text) + if _paddle_available(): + result = _paddle_ocr(src) + if result: + return result + # 3. Tesseract last resort + return _tesseract_ocr(src) + return _post(DOCLING_HOST, DOCLING_PORT, "/convert", src, "use_llm=false") + except Exception as e: + return f"" + + +# --------------------------------------------------------------------------- +# Email helpers +# --------------------------------------------------------------------------- + +def _email_id(name: str) -> str: + return name.split(",")[0] + + +def _html_body(msg) -> str | None: + for part in msg.walk(): + if part.get_content_type() == "text/html": + p = part.get_payload(decode=True) + if p: + return p.decode(part.get_content_charset() or "utf-8", errors="replace") + for part in msg.walk(): + if part.get_content_type() == "text/plain": + p = part.get_payload(decode=True) + if p: + return p.decode(part.get_content_charset() or "utf-8", errors="replace") + return None + + +def _write_md(path: Path, content: str): + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(content, encoding="utf-8") + log.info(" wrote %s", path.relative_to(OUTPUT.parent)) + + +def _write_jpg(dest_dir: Path, src: Path): + dest_dir.mkdir(parents=True, exist_ok=True) + dest = dest_dir / (src.stem + ".jpg") + if src.suffix.lower() in {".jpg", ".jpeg"}: + shutil.copy2(src, dest) + else: + from PIL import Image + try: + Image.open(src).convert("RGB").save(dest, "JPEG") + except Exception: + shutil.copy2(src, dest_dir / src.name) + dest = dest_dir / src.name + log.info(" saved %s", dest.relative_to(OUTPUT.parent)) + + +# --------------------------------------------------------------------------- +# Process one email +# --------------------------------------------------------------------------- + +def process_email(filepath: Path, msg=None): + if msg is None: + with filepath.open("rb") as f: + msg = email.message_from_binary_file(f, policy=email.policy.compat32) + + eid = _email_id(filepath.name) + log.info("Processing [%s] %s", eid[:30], msg.get("subject", "")[:60]) + + md_dir = OUTPUT / eid / "markitdown" + doc_dir = OUTPUT / eid / "docling" + + with tempfile.TemporaryDirectory() as _tmp: + tmp = Path(_tmp) + + # Build CID map and extract all parts to tmp + cid_map: dict[str, str] = {} + for part in msg.walk(): + fn = part.get_filename() or part.get_param("name") + if not fn: + continue + payload = part.get_payload(decode=True) + if not payload: + continue + safe = "".join(c if c.isalnum() or c in "._-" else "_" for c in fn) + (tmp / safe).write_bytes(payload) + ext = Path(safe).suffix.lower() + out_name = Path(safe).stem + ".jpg" if ext in IMAGE_EXTS else safe + cid = part.get("Content-ID", "").strip("<>") + if cid: + cid_map[cid] = out_name + + def fix_cid(html: str) -> str: + return re.sub(r'cid:([^\s"\'>\)]+)', + lambda m: cid_map.get(m.group(1), f"cid:{m.group(1)}"), html) + + def fix_img_comments(md: str, html: str) -> str: + srcs = re.findall(r']+src=["\']?([^\s"\'>\)]+)', html, re.IGNORECASE) + it = iter(srcs) + return re.sub(r'', lambda _: f"![]({next(it)})" if (s := next(it, None)) else "", + md) if srcs else md + + # Body + body_html = _html_body(msg) + if body_html: + html_fixed = fix_cid(body_html) + html_file = tmp / "body.html" + html_file.write_text(html_fixed, encoding="utf-8") + _write_md(md_dir / "body.md", convert_markitdown(html_file)) + docling_body = convert_docling(html_file) + srcs = re.findall(r']+src=["\']?([^\s"\'>\)]+)', html_fixed, re.IGNORECASE) + it = iter(srcs) + docling_body = re.sub(r'', + lambda _: f"![]({next(it, 'image')})", docling_body) + _write_md(doc_dir / "body.md", docling_body) + else: + log.warning(" no body") + + # Attachments + for part in msg.walk(): + fn = part.get_filename() or part.get_param("name") + if not fn: + continue + payload = part.get_payload(decode=True) + if not payload: + continue + safe = "".join(c if c.isalnum() or c in "._-" else "_" for c in fn) + att = tmp / safe + att.write_bytes(payload) + ext = Path(safe).suffix.lower() + stem = Path(safe).stem + if ext in IMAGE_EXTS: + _write_jpg(md_dir, att) + _write_jpg(doc_dir, att) + ocr = convert_docling(att) + if ocr and not ocr.startswith(" +

+ + +
+ + +
+
+
+ +
+
+
+
+
+ + +
+ + +
+ +
+
+
+
+ + +
+ +
+ + +
+ +
+
+ + + + + + + + diff --git a/frontend/index.html b/frontend/index.html index d8a34d3..2a0da05 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,229 +1,322 @@ - - MarkItDown vs Docling — LLM Input Processing + MarkItDown vs Docling vs Unlimited-OCR — LLM Input Processing - + - +
+ - +
+
-
+ +
+
+
Tải lên tài liệu để so sánh
- -
-
-
Tải lên tài liệu để so sánh
+ +
- - - - -
-
- - -

Kéo thả hoặc click để chọn file

-
+ +
+
+ + +

Kéo thả hoặc click để chọn file

+
+
+
+ +
-
- PDF - DOCX - XLSX - PPTX - HTML - CSV - TXT - JPG/PNG - EPUB - TIFF - ASCIIDoc + +
+
+ + + +
+
+ + MarkItDown: yt-dlp  |  + Docling: transcript → markdown  |  + Unlimited-OCR: không hỗ trợ URL +
-
- -
-
- - - +
-
- - MarkItDown: dùng yt-dlp native  |  - Docling: trích transcript → convert markdown -
-
- -
-
- - -
- -
- - -
- - - -
- - -
-
- -
-
-
- Custom LLM - Prompt - -
- -
- MarkItDown: vision prompt  |  Docling: enrich prompt + +
+
+
+
+
+ Custom LLM Prompt + +
+ +
+ MarkItDown: vision  |  Docling: enrich  |  Unlimited-OCR: OCR +
-
- -
-
- -
- - -
-
- -
@@ -232,683 +325,155 @@
-
- -
-
- Cài đặt LLM (Ollama) -
-
-
-
- -
- - -
-
OpenAI-compatible endpoint
-
-
- - -
Convert + Docling enrich
-
+ +
+
-
- -
-
-
-
-
-  MarkItDown -
-
-
- Đang chờ... -
-
-
-
-
-
-
ms
-
-
-
-
-
-
-
ký tự
-
-
-
-
-
-
-
dòng
-
-
-
-
+ +
+
+
Tóm tắt so sánh
+ + + + + + + +
Tiêu chíMarkItDownDoclingUnlimited-OCRGhi chú
-
-
-
-
-  Docling -
-
-
- Đang chờ... -
-
-
-
-
-
-
ms
+ + +
+
-
- -
-
-
Tóm tắt so sánh
- - - - - - - - - - -
Tiêu chíMarkItDownDoclingGhi chú
-
-
- - -
-
-
-
- -  MarkItDown - -
- - -
+
- -
Lịch sử chuyển đổi gần đây
-
-
-
-
-  MarkItDown -
-
-
Chưa có lịch sử
-
-
-
-
-
-
-  Docling -
-
-
Chưa có lịch sử
-
-
-
-
- -
- - + + - - \ No newline at end of file + diff --git a/frontend/layout.js b/frontend/layout.js new file mode 100644 index 0000000..2de2fb0 --- /dev/null +++ b/frontend/layout.js @@ -0,0 +1,33 @@ +/* Shared layout — inject navbar, mark active tab by current pathname */ +(function () { + const NAV_LINKS = [ + { href: '/', icon: 'bi-upload', label: 'Upload File' }, + { href: '/email-convert.html', icon: 'bi-envelope', label: 'Email Convert' }, + ]; + + const path = location.pathname.replace(/\/$/, '') || '/'; + + const links = NAV_LINKS.map(L => { + const active = (L.href === '/' ? path === '/' : path.startsWith(L.href.replace('.html', ''))); + return ``; + }).join(''); + + const html = ` + `; + + const el = document.getElementById('app-nav'); + if (el) el.outerHTML = html; +})(); diff --git a/frontend/style.css b/frontend/style.css new file mode 100644 index 0000000..da1f076 --- /dev/null +++ b/frontend/style.css @@ -0,0 +1,63 @@ +/* ── Shared styles ─────────────────────────────────────────── */ +body { background: #f8f9fa; } + +/* Upload zone */ +#UploadZone { + border: 2px dashed #dee2e6; + border-radius: .5rem; + padding: 3rem 1.5rem; + text-align: center; + cursor: pointer; + transition: border-color .2s, background .2s; +} +#UploadZone:hover, #UploadZone.dragover { + border-color: #0d6efd; + background: #f0f6ff; +} +#UploadZone input[type="file"] { display: none; } + +/* Result panes */ +.ResultPre { + max-height: 460px; + overflow: auto; + white-space: pre-wrap; + word-break: break-word; + font-size: .78rem; + background: #f8f9fa; +} + +/* github-markdown-css handles table/code/blockquote — only constrain height */ +.PreviewPane { + max-height: 460px; + overflow: auto; + font-size: .85rem; +} + +/* Server file browser */ +.FileBrowser { + height: 560px; + overflow-y: auto; + font-size: .82rem; +} +.FileEntry { + display: flex; + align-items: center; + gap: .4rem; + padding: .25rem .5rem; + border-radius: .3rem; + cursor: pointer; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + user-select: none; +} +.FileEntry:hover { background: #e9ecef; } +.FileEntry.selected { background: #cfe2ff; color: #084298; font-weight: 500; } +.FileEntry.dir { color: #495057; } +.FileEntry.file { color: #212529; } +.indent-1 { padding-left: 1.4rem; } +.indent-2 { padding-left: 2.6rem; } +.indent-3 { padding-left: 3.8rem; } +.indent-4 { padding-left: 5rem; } + +.path-badge { font-size: .72rem; font-family: monospace; word-break: break-all; } diff --git a/laravel-app/.editorconfig b/laravel-app/.editorconfig new file mode 100644 index 0000000..6df8428 --- /dev/null +++ b/laravel-app/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[{compose,docker-compose}.{yml,yaml}] +indent_size = 4 diff --git a/laravel-app/.env.example b/laravel-app/.env.example new file mode 100644 index 0000000..c0660ea --- /dev/null +++ b/laravel-app/.env.example @@ -0,0 +1,65 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" diff --git a/laravel-app/.gitattributes b/laravel-app/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/laravel-app/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/laravel-app/.gitignore b/laravel-app/.gitignore new file mode 100644 index 0000000..7be55e2 --- /dev/null +++ b/laravel-app/.gitignore @@ -0,0 +1,27 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.codex +/.cursor/ +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/fonts-manifest.dev.json +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +_ide_helper.php +Homestead.json +Homestead.yaml +Thumbs.db diff --git a/laravel-app/.npmrc b/laravel-app/.npmrc new file mode 100644 index 0000000..495a6af --- /dev/null +++ b/laravel-app/.npmrc @@ -0,0 +1,2 @@ +ignore-scripts=true +audit=true diff --git a/laravel-app/README.md b/laravel-app/README.md new file mode 100644 index 0000000..5ad1377 --- /dev/null +++ b/laravel-app/README.md @@ -0,0 +1,58 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +In addition, [Laracasts](https://laracasts.com) contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals. + +## Agentic Development + +Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow: + +```bash +composer require laravel/boost --dev + +php artisan boost:install +``` + +Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices. + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/laravel-app/app/Http/Controllers/ApiProxyController.php b/laravel-app/app/Http/Controllers/ApiProxyController.php new file mode 100644 index 0000000..5197ce1 --- /dev/null +++ b/laravel-app/app/Http/Controllers/ApiProxyController.php @@ -0,0 +1,49 @@ + 'http://api-markitdown:8000', + 'docling' => 'http://api-docling:8000', + 'unlimited-ocr' => 'http://api-unlimited-ocr:8000', + ]; + + #[Any('/api/{service}/{path?}')] + #[Where('path', '.*')] + public function proxy(Request $request, string $service, string $path = '') + { + $base = self::SERVICES[$service] ?? abort(404, "Unknown service: $service"); + + $url = rtrim($base, '/') . '/' . ltrim($path, '/'); + if ($qs = $request->getQueryString()) { + $url .= '?' . $qs; + } + + $http = Http::timeout(300)->withoutVerifying(); + + if ($request->hasFile('file')) { + $file = $request->file('file'); + $response = $http + ->attach('file', file_get_contents($file->getRealPath()), $file->getClientOriginalName()) + ->post($url); + } else { + $contentType = $request->header('Content-Type', 'application/json'); + $response = $http + ->withHeaders(['Content-Type' => $contentType]) + ->withBody($request->getContent(), $contentType) + ->send($request->method(), $url); + } + + return response($response->body(), $response->status()) + ->header('Content-Type', $response->header('Content-Type', 'application/json')); + } +} diff --git a/laravel-app/app/Http/Controllers/BatchJobController.php b/laravel-app/app/Http/Controllers/BatchJobController.php new file mode 100644 index 0000000..21e27cd --- /dev/null +++ b/laravel-app/app/Http/Controllers/BatchJobController.php @@ -0,0 +1,125 @@ +db()->table('batch_jobs') + ->orderByDesc('created_at') + ->limit(20) + ->get() + ->map(fn($j) => [ + 'id' => $j->id, + 'dir_name' => $j->dir_name, + 'dir_path' => $j->dir_path, + 'output_base' => $j->output_base, + 'total' => $j->total, + 'done_count' => $j->done_count, + 'finished' => (bool)$j->finished, + 'settings' => json_decode($j->settings, true), + 'created_at' => $j->created_at, + ]); + + return response()->json($jobs); + } + + #[Post('/batch-jobs')] + public function store(Request $request) + { + $data = $request->validate([ + 'dir_path' => 'required|string', + 'dir_name' => 'required|string', + 'output_base' => 'nullable|string', + 'settings' => 'nullable|array', + 'files' => 'required|array', + ]); + + $id = $this->db()->table('batch_jobs')->insertGetId([ + 'dir_path' => $data['dir_path'], + 'dir_name' => $data['dir_name'], + 'output_base' => $data['output_base'] ?? null, + 'settings' => json_encode($data['settings'] ?? []), + 'files' => json_encode($data['files']), + 'results' => json_encode((object)[]), + 'total' => \count($data['files']), + 'done_count' => 0, + 'finished' => false, + 'created_at' => now(), + 'updated_at' => now(), + ]); + + return response()->json(['id' => $id]); + } + + #[Get('/batch-jobs/{id}')] + public function show(int $id) + { + $job = $this->db()->table('batch_jobs')->where('id', $id)->first(); + if (!$job) return response()->json(['error' => 'Not found'], 404); + + return response()->json([ + 'id' => $job->id, + 'dir_path' => $job->dir_path, + 'dir_name' => $job->dir_name, + 'output_base' => $job->output_base, + 'settings' => json_decode($job->settings, true), + 'files' => json_decode($job->files, true), + 'results' => json_decode($job->results, true), + 'total' => $job->total, + 'done_count' => $job->done_count, + 'finished' => (bool)$job->finished, + 'created_at' => $job->created_at, + ]); + } + + #[Patch('/batch-jobs/{id}')] + public function update(Request $request, int $id) + { + $job = $this->db()->table('batch_jobs')->where('id', $id)->first(); + if (!$job) return response()->json(['error' => 'Not found'], 404); + + $results = json_decode($job->results, true) ?? []; + $path = $request->input('path'); + $entry = $request->input('entry', []); + $done = $request->boolean('finished', false); + + if ($path && $entry) { + $results[$path] = $entry; + } + + $doneCount = \count(array_filter($results, fn($r) => isset($r['md']) || isset($r['dl']))); + + $this->db()->table('batch_jobs')->where('id', $id)->update([ + 'results' => json_encode($results), + 'done_count' => $doneCount, + 'finished' => $done, + 'updated_at' => now(), + ]); + + return response()->json(['ok' => true, 'done_count' => $doneCount]); + } + + #[Delete('/batch-jobs/{id}')] + public function destroy(int $id) + { + $this->db()->table('batch_jobs')->where('id', $id)->delete(); + return response()->json(['ok' => true]); + } +} diff --git a/laravel-app/app/Http/Controllers/Controller.php b/laravel-app/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/laravel-app/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ +query('path', ''); + $abs = realpath($path); + + if (!$abs || !str_starts_with($abs, '/workspace')) { + return response()->json(['error' => 'Access denied'], 403); + } + if (!is_file($abs)) { + return response()->json(['error' => 'File not found'], 404); + } + + $raw = file_get_contents($abs); + $content = mb_convert_encoding($raw, 'UTF-8', 'UTF-8'); + // strip non-UTF8 bytes that would break json_encode + $content = mb_convert_encoding($raw, 'UTF-8', mb_detect_encoding($raw, 'UTF-8,ISO-8859-1,Windows-1252', true) ?: 'UTF-8'); + return response()->json(['path' => $abs, 'content' => $content]); + } +} diff --git a/laravel-app/app/Models/User.php b/laravel-app/app/Models/User.php new file mode 100644 index 0000000..f6ba1d2 --- /dev/null +++ b/laravel-app/app/Models/User.php @@ -0,0 +1,32 @@ + */ + use HasFactory, Notifiable; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } +} diff --git a/laravel-app/app/Providers/AppServiceProvider.php b/laravel-app/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/laravel-app/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/laravel-app/bootstrap/app.php b/laravel-app/bootstrap/app.php new file mode 100644 index 0000000..7a2848f --- /dev/null +++ b/laravel-app/bootstrap/app.php @@ -0,0 +1,21 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // + }) + ->withExceptions(function (Exceptions $exceptions): void { + $exceptions->shouldRenderJsonWhen( + fn (Request $request) => $request->is('api/*'), + ); + })->create(); diff --git a/laravel-app/bootstrap/cache/.gitignore b/laravel-app/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/laravel-app/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/laravel-app/bootstrap/providers.php b/laravel-app/bootstrap/providers.php new file mode 100644 index 0000000..fc94ae6 --- /dev/null +++ b/laravel-app/bootstrap/providers.php @@ -0,0 +1,7 @@ +=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "shasum": "" + }, + "require": { + "php": "^8.2|^8.3|^8.4|^8.5" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:51:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:43:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.13.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/55901a76dfd2006a0cc012b9e3c5b487f796478d", + "reference": "55901a76dfd2006a0cc012b9e3c5b487f796478d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.5", + "guzzlehttp/psr7": "^2.12.3", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "guzzlehttp/test-server": "^0.6", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.13.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2026-06-29T20:14:18+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2026-06-02T12:23:43+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.12.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7ec62dc3f44aa218487dbed81a9bf9bc647be55d", + "reference": "7ec62dc3f44aa218487dbed81a9bf9bc647be55d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.12.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-06-23T15:21:08+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.8", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/9c19128923b05a5d7355e5d2318d7808b7e33bbd", + "reference": "9c19128923b05a5d7355e5d2318d7808b7e33bbd", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.25" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.8" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2026-06-23T13:02:23+00:00" + }, + { + "name": "laravel/framework", + "version": "v13.17.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "0802b7a81f3252d78200b8037ac183a686a529f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/0802b7a81f3252d78200b8037ac183a686a529f0", + "reference": "0802b7a81f3252d78200b8037ac183a686a529f0", + "shasum": "" + }, + "require": { + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.36", + "symfony/polyfill-php85": "^1.36", + "symfony/polyfill-php86": "^1.36", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/psr7": "^2.9", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "^2.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "13.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2026-06-23T19:42:45+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.21", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "7753c65c281c2550c7c183f14e18062073b7d821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/7753c65c281c2550c7c183f14e18062073b7d821", + "reference": "7753c65c281c2550c7c183f14e18062073b7d821", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.21" + }, + "time": "2026-06-26T00:11:25+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.13", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2026-04-16T14:03:50+00:00" + }, + { + "name": "laravel/tinker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "4faba77764bd33411735936acdf30446d058c78b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5|^11.5" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v3.0.2" + }, + "time": "2026-03-17T14:54:13+00:00" + }, + { + "name": "league/commonmark", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2026-03-19T13:16:38+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.35.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f23af6c5aafd958a7593029a271d77baf5ed793c", + "reference": "f23af6c5aafd958a7593029a271d77baf5ed793c", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.35.1" + }, + "time": "2026-06-25T06:52:23+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + }, + "time": "2026-01-23T15:30:45+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.13.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "40f6618f052df16b545f626fbf9a878e6497d16a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/40f6618f052df16b545f626fbf9a878e6497d16a", + "reference": "40f6618f052df16b545f626fbf9a878e6497d16a", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", + "kylekatarnls/multi-tester": "^2.5.3", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbonphp.github.io/carbon/", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2026-06-18T13:49:15+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.5" + }, + "time": "2026-02-23T03:47:12+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.5", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.1.4" + }, + "time": "2026-05-11T20:49:54+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.4.4 || ^8.0.4" + }, + "require-dev": { + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "It's like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2026-02-16T23:10:27+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.24", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.24" + }, + "time": "2026-06-29T15:41:09+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8", + "shasum": "" + }, + "require": { + "brick/math": ">=0.8.16 <=0.18", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.3" + }, + "time": "2026-06-18T03:57:49+00:00" + }, + { + "name": "spatie/laravel-route-attributes", + "version": "1.28.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-route-attributes.git", + "reference": "17cb15b40d31c0d7c3c9378948d3760135563020" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-route-attributes/zipball/17cb15b40d31c0d7c3c9378948d3760135563020", + "reference": "17cb15b40d31c0d7c3c9378948d3760135563020", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.63|^3.0", + "php": "^8.3", + "spatie/php-attribute-reader": "^1.0" + }, + "require-dev": { + "laravel/pint": "^1.25", + "orchestra/testbench": "^9.0|^10.0|^11.0", + "pestphp/pest": "^3.0|^4.0", + "pestphp/pest-plugin-laravel": "^3.0|^4.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\RouteAttributes\\RouteAttributesServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\RouteAttributes\\": "src", + "Spatie\\RouteAttributes\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Auto register routes using PHP attributes", + "homepage": "https://github.com/spatie/laravel-route-attributes", + "keywords": [ + "laravel-route-attributes", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-route-attributes/issues", + "source": "https://github.com/spatie/laravel-route-attributes/tree/1.28.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2026-03-06T08:25:46+00:00" + }, + { + "name": "spatie/php-attribute-reader", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/php-attribute-reader.git", + "reference": "46e7484d7b51f5b22d672745c541e48c5a385404" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/php-attribute-reader/zipball/46e7484d7b51f5b22d672745c541e48c5a385404", + "reference": "46e7484d7b51f5b22d672745c541e48c5a385404", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.0|^2.0|^3.0|^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Attributes\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A clean API for working with PHP attributes", + "homepage": "https://github.com/spatie/php-attribute-reader", + "keywords": [ + "attributes", + "php-attribute-reader", + "reflection", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/php-attribute-reader/issues", + "source": "https://github.com/spatie/php-attribute-reader/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-02-23T09:01:55+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/674fa3b98e21531dd040e613479f5f6fa8f32111", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87", + "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-16T11:50:14+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b75663ed96cf4756e28e3105476f220f92886cc4", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-18T13:18:21+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "4e1a093b481f323e6e326451f9760c3868430673" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/4e1a093b481f323e6e326451f9760c3868430673", + "reference": "4e1a093b481f323e6e326451f9760c3868430673", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:22:21+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "51fe3d170227be8d1772214b82ae506e15ed78ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/51fe3d170227be8d1772214b82ae506e15ed78ff", + "reference": "51fe3d170227be8d1772214b82ae506e15ed78ff", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-06T11:10:32+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "13b38720174286f55d1761152b575a8d1436fc25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/13b38720174286f55d1761152b575a8d1436fc25", + "reference": "13b38720174286f55d1761152b575a8d1436fc25", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-27T08:31:18+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "06db5ae1552177bf8572f8908839f12e3c06aed3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/06db5ae1552177bf8572f8908839f12e3c06aed3", + "reference": "06db5ae1552177bf8572f8908839f12e3c06aed3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-11T07:31:44+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "e99af79b1e776646eda0e1c23b7b45c184ff99be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e99af79b1e776646eda0e1c23b7b45c184ff99be", + "reference": "e99af79b1e776646eda0e1c23b7b45c184ff99be", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-27T09:14:35+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "f88ce03ae73e3edb5c176ce1f337709996e88495" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f88ce03ae73e3edb5c176ce1f337709996e88495", + "reference": "f88ce03ae73e3edb5c176ce1f337709996e88495", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-13T08:51:35+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "a845722765c4f6b2ce88beaf4f4479975b186770" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/a845722765c4f6b2ce88beaf4f4479975b186770", + "reference": "a845722765c4f6b2ce88beaf4f4479975b186770", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T16:22:37+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T05:58:03+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "dc21118016c039a66235cf93d96b435ffb282412" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412", + "reference": "dc21118016c039a66235cf93d96b435ffb282412", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T15:22:23+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:48:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.38.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-27T06:59:30+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.38.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "reference": "796a26abb75ce49f3a84433cd81bf1009d73d5f8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-27T06:51:48+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T02:25:22+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "reference": "fcec68d64f46dc84e1f6ffcf2c6dda40ff3143ad", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php86\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php86/tree/v1.38.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T11:52:35+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f5804be144caceb570f6747519999636b664f24c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c", + "reference": "f5804be144caceb570f6747519999636b664f24c", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T16:05:06+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/3a162171bb008e5e0f15dce6581373a4c0e8390d", + "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T11:20:33+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-16T09:55:08+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T15:23:29+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a1af4dacb24eb7ef4f1ca71b94da8ddbce572281" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a1af4dacb24eb7ef4f1ca71b94da8ddbce572281", + "reference": "a1af4dacb24eb7ef4f1ca71b94da8ddbce572281", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5.3|^3.3" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-06T09:33:19+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "2676b524340abcfe4d6151ec698463cebafee439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439", + "reference": "2676b524340abcfe4d6151ec698463cebafee439", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-30T15:19:22+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "9a3a56a4a1e65a5cb4f8d13801fe8ab0a170e358" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9a3a56a4a1e65a5cb4f8d13801fe8ab0a170e358", + "reference": "9a3a56a4a1e65a5cb4f8d13801fe8ab0a170e358", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-08T20:24:16+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.4", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2026-04-26T05:33:54+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/agent-detector", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/agent-detector.git", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "shasum": "" + }, + "require": { + "php": "^8.2.0" + }, + "require-dev": { + "laravel/pint": "^1.24.0", + "pestphp/pest": "^3.8.5|^4.1.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", + "phpstan/phpstan": "^2.1.26", + "rector/rector": "^2.1.7", + "symfony/var-dumper": "^7.3.3" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Laravel\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Detect if code is running in an AI agent or automated development environment", + "homepage": "https://github.com/laravel/agent-detector", + "keywords": [ + "Agent", + "ai", + "automation", + "claude", + "cursor", + "detection", + "devin", + "php" + ], + "support": { + "issues": "https://github.com/laravel/agent-detector/issues", + "source": "https://github.com/laravel/agent-detector" + }, + "time": "2026-04-29T18:32:34+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-05-20T22:24:57+00:00" + }, + { + "name": "laravel/pao", + "version": "v1.1.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/pao.git", + "reference": "41b3c61ebeddce52a446afe6d21e0b02983fb2f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pao/zipball/41b3c61ebeddce52a446afe6d21e0b02983fb2f6", + "reference": "41b3c61ebeddce52a446afe6d21e0b02983fb2f6", + "shasum": "" + }, + "require": { + "laravel/agent-detector": "^2.0.2", + "php": "^8.3" + }, + "conflict": { + "laravel/framework": "<12.0.0", + "nunomaduro/collision": "<8.9.3", + "pestphp/pest": "<4.6.3 || >=6.0.0", + "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.20.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench": "^10.11.0 || ^11.1.0", + "pestphp/pest": "^4.7.2 || ^5.0.0", + "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", + "phpstan/phpstan": "^2.2.2", + "rector/rector": "^2.4.5", + "symfony/process": "^7.4.8 || ^8.1.0", + "symfony/var-dumper": "^7.4.8 || ^8.1.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Laravel\\Pao\\Drivers\\Pest\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Laravel\\Pao\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Laravel\\Pao\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Agent-optimized output for PHP testing tools", + "keywords": [ + "Agent", + "PHPStan", + "ai", + "dev", + "paratest", + "pest", + "php", + "phpunit", + "rector", + "testing" + ], + "support": { + "issues": "https://github.com/laravel/pao/issues", + "source": "https://github.com/laravel/pao" + }, + "time": "2026-06-22T19:58:00+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.29.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "da1d1111a6aa2e082d2a388b194afe1ba0a05d14" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/da1d1111a6aa2e082d2a388b194afe1ba0a05d14", + "reference": "da1d1111a6aa2e082d2a388b194afe1ba0a05d14", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.95.8", + "illuminate/view": "^12.62.0", + "larastan/larastan": "^3.10.0", + "laravel-zero/framework": "^12.1.0", + "laravel/agent-detector": "^2.0.2", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.6" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "dev", + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2026-06-16T15:34:04+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.8 || ^8.0.8" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.6", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2026-04-21T14:04:20+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "12.5.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "186dab580576598076de6818596d12b61801880e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e", + "reference": "186dab580576598076de6818596d12b61801880e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.1.2", + "sebastian/lines-of-code": "^4.0.1", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.28" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2026-06-01T13:24:19+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" + } + ], + "time": "2026-02-02T14:04:18+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^12.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:58+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:16+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:38+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "12.5.30", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "900400a5b616d6fb306f9549f6da33ba615d3fbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/900400a5b616d6fb306f9549f6da33ba615d3fbb", + "reference": "900400a5b616d6fb306f9549f6da33ba615d3fbb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.7", + "phpunit/php-file-iterator": "^6.0.1", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.1", + "sebastian/comparator": "^7.1.8", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.1.2", + "sebastian/exporter": "^7.0.3", + "sebastian/global-state": "^8.0.3", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.4", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.30" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsoring.html", + "type": "other" + } + ], + "time": "2026-06-15T13:12:30+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "4.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" + } + ], + "time": "2026-05-17T05:29:34+00:00" + }, + { + "name": "sebastian/comparator", + "version": "7.1.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "7c65c1e79836812819705b473a90c12399542485" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", + "reference": "7c65c1e79836812819705b473a90c12399542485", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-05-21T04:45:25+00:00" + }, + { + "name": "sebastian/complexity", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "8.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.26" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:40:20+00:00" + }, + { + "name": "sebastian/exporter", + "version": "7.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2026-05-20T04:37:17+00:00" + }, + { + "name": "sebastian/global-state", + "version": "8.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^12.5.28" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" + } + ], + "time": "2026-06-01T15:10:33+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.7.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" + } + ], + "time": "2026-05-19T16:22:07+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:57:48+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:17+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:44:59+00:00" + }, + { + "name": "sebastian/type", + "version": "6.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "82ff822c2edc46724be9f7411d3163021f602773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", + "reference": "82ff822c2edc46724be9f7411d3163021f602773", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2026-05-20T06:45:45+00:00" + }, + { + "name": "sebastian/version", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T05:00:38+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-12-08T11:19:18+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.3" + }, + "platform-dev": {}, + "plugin-api-version": "2.9.0" +} diff --git a/laravel-app/config/app.php b/laravel-app/config/app.php new file mode 100644 index 0000000..423eed5 --- /dev/null +++ b/laravel-app/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/laravel-app/config/auth.php b/laravel-app/config/auth.php new file mode 100644 index 0000000..d7568ff --- /dev/null +++ b/laravel-app/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', User::class), + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the number of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/laravel-app/config/cache.php b/laravel-app/config/cache.php new file mode 100644 index 0000000..d7eec61 --- /dev/null +++ b/laravel-app/config/cache.php @@ -0,0 +1,136 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "storage", "octane", + | "session", "failover", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'storage' => [ + 'driver' => 'storage', + 'disk' => env('CACHE_STORAGE_DISK'), + 'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), + + /* + |-------------------------------------------------------------------------- + | Serializable Classes + |-------------------------------------------------------------------------- + | + | This value determines the classes that can be unserialized from cache + | storage. By default, no PHP classes will be unserialized from your + | cache to prevent gadget chain attacks if your APP_KEY is leaked. + | + */ + + 'serializable_classes' => false, + +]; diff --git a/laravel-app/config/database.php b/laravel-app/config/database.php new file mode 100644 index 0000000..c9ba1c9 --- /dev/null +++ b/laravel-app/config/database.php @@ -0,0 +1,224 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => env('DB_SSLMODE', 'prefer'), + ], + + // ── AI Markdown services ────────────────────────────────── + 'db_markitdown' => [ + 'driver' => 'pgsql', + 'host' => env('DB_MARKITDOWN_HOST', 'db-markitdown'), + 'port' => env('DB_MARKITDOWN_PORT', '5432'), + 'database' => env('DB_MARKITDOWN_NAME', 'markitdown'), + 'username' => env('DB_MARKITDOWN_USER', 'admin'), + 'password' => env('DB_MARKITDOWN_PASS', 'admin'), + 'charset' => 'utf8', + 'prefix' => '', + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'db_docling' => [ + 'driver' => 'pgsql', + 'host' => env('DB_DOCLING_HOST', 'db-docling'), + 'port' => env('DB_DOCLING_PORT', '5432'), + 'database' => env('DB_DOCLING_NAME', 'docling'), + 'username' => env('DB_DOCLING_USER', 'admin'), + 'password' => env('DB_DOCLING_PASS', 'admin'), + 'charset' => 'utf8', + 'prefix' => '', + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'db_unlimited_ocr' => [ + 'driver' => 'pgsql', + 'host' => env('DB_UNLIMITED_OCR_HOST', 'db-unlimited-ocr'), + 'port' => env('DB_UNLIMITED_OCR_PORT', '5432'), + 'database' => env('DB_UNLIMITED_OCR_NAME', 'unlimited_ocr'), + 'username' => env('DB_UNLIMITED_OCR_USER', 'admin'), + 'password' => env('DB_UNLIMITED_OCR_PASS', 'admin'), + 'charset' => 'utf8', + 'prefix' => '', + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + ], + +]; diff --git a/laravel-app/config/filesystems.php b/laravel-app/config/filesystems.php new file mode 100644 index 0000000..37d8fca --- /dev/null +++ b/laravel-app/config/filesystems.php @@ -0,0 +1,80 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + 'report' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage', + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + 'report' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/laravel-app/config/logging.php b/laravel-app/config/logging.php new file mode 100644 index 0000000..b09cb25 --- /dev/null +++ b/laravel-app/config/logging.php @@ -0,0 +1,132 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'handler_with' => [ + 'stream' => 'php://stderr', + ], + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/laravel-app/config/mail.php b/laravel-app/config/mail.php new file mode 100644 index 0000000..e32e88d --- /dev/null +++ b/laravel-app/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + 'retry_after' => 60, + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')), + ], + +]; diff --git a/laravel-app/config/queue.php b/laravel-app/config/queue.php new file mode 100644 index 0000000..79c2c0a --- /dev/null +++ b/laravel-app/config/queue.php @@ -0,0 +1,129 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + | "deferred", "background", "failover", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/laravel-app/config/route-attributes.php b/laravel-app/config/route-attributes.php new file mode 100644 index 0000000..1596302 --- /dev/null +++ b/laravel-app/config/route-attributes.php @@ -0,0 +1,46 @@ + true, + + /* + * Controllers in these directories that have routing attributes + * will automatically be registered. + * + * Optionally, you can specify group configuration by using key/values + */ + 'directories' => [ + app_path('Http/Controllers'), + /* + app_path('Http/Controllers/Api') => [ + 'prefix' => 'api', + 'middleware' => 'api', + // only register routes in files that match the patterns + 'patterns' => ['*Controller.php'], + // do not register routes in files that match the patterns + 'not_patterns' => [], + ], + */ + ], + + /* + * This middleware will be applied to all routes. + */ + 'middleware' => [ + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + /* + * When enabled, implicitly scoped bindings will be enabled by default. + * You can override this behaviour by using the `ScopeBindings` attribute, and passing `false` to it. + * + * Possible values: + * - null: use the default behaviour + * - true: enable implicitly scoped bindings for all routes + * - false: disable implicitly scoped bindings for all routes + */ + 'scope-bindings' => null, +]; diff --git a/laravel-app/config/services.php b/laravel-app/config/services.php new file mode 100644 index 0000000..6a90eb8 --- /dev/null +++ b/laravel-app/config/services.php @@ -0,0 +1,38 @@ + [ + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + +]; diff --git a/laravel-app/config/session.php b/laravel-app/config/session.php new file mode 100644 index 0000000..f574482 --- /dev/null +++ b/laravel-app/config/session.php @@ -0,0 +1,233 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => (int) env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug((string) env('APP_NAME', 'laravel')).'-session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain without subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | Session Serialization + |-------------------------------------------------------------------------- + | + | This value controls the serialization strategy for session data, which + | is JSON by default. Setting this to "php" allows the storage of PHP + | objects in the session but can make an application vulnerable to + | "gadget chain" serialization attacks if the APP_KEY is leaked. + | + | Supported: "json", "php" + | + */ + + 'serialization' => 'json', + +]; diff --git a/laravel-app/database/.gitignore b/laravel-app/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/laravel-app/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/laravel-app/database/factories/UserFactory.php b/laravel-app/database/factories/UserFactory.php new file mode 100644 index 0000000..c4ceb07 --- /dev/null +++ b/laravel-app/database/factories/UserFactory.php @@ -0,0 +1,45 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/laravel-app/database/migrations/0001_01_01_000000_create_users_table.php b/laravel-app/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..05fb5d9 --- /dev/null +++ b/laravel-app/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/laravel-app/database/migrations/0001_01_01_000001_create_cache_table.php b/laravel-app/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..06dc7a5 --- /dev/null +++ b/laravel-app/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->bigInteger('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->bigInteger('expiration')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/laravel-app/database/migrations/0001_01_01_000002_create_jobs_table.php b/laravel-app/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..edac6fe --- /dev/null +++ b/laravel-app/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,59 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedSmallInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->string('connection'); + $table->string('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + + $table->index(['connection', 'queue', 'failed_at']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/laravel-app/database/seeders/DatabaseSeeder.php b/laravel-app/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..6b901f8 --- /dev/null +++ b/laravel-app/database/seeders/DatabaseSeeder.php @@ -0,0 +1,25 @@ +create(); + + User::factory()->create([ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + } +} diff --git a/laravel-app/package-lock.json b/laravel-app/package-lock.json new file mode 100644 index 0000000..23ba8fc --- /dev/null +++ b/laravel-app/package-lock.json @@ -0,0 +1,1515 @@ +{ + "name": "html", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.2.tgz", + "integrity": "sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==", + "dev": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "5.21.6", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.2.tgz", + "integrity": "sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==", + "dev": true, + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.2", + "@tailwindcss/oxide-darwin-arm64": "4.3.2", + "@tailwindcss/oxide-darwin-x64": "4.3.2", + "@tailwindcss/oxide-freebsd-x64": "4.3.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.2", + "@tailwindcss/oxide-linux-x64-musl": "4.3.2", + "@tailwindcss/oxide-wasm32-wasi": "4.3.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.2.tgz", + "integrity": "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.2.tgz", + "integrity": "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.2.tgz", + "integrity": "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.2.tgz", + "integrity": "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.2.tgz", + "integrity": "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.2.tgz", + "integrity": "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.2.tgz", + "integrity": "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.2.tgz", + "integrity": "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.2.tgz", + "integrity": "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.2.tgz", + "integrity": "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.2.tgz", + "integrity": "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.2.tgz", + "integrity": "sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.2.tgz", + "integrity": "sha512-eHpMeX4JXfVNJDEcsouTeCBubJBTcTLigeaw/NTUW6PB5ATKKXdyonnXgTBX2VuRbjz1hjfz6C5XAhr52ImQXA==", + "dev": true, + "dependencies": { + "@tailwindcss/node": "4.3.2", + "@tailwindcss/oxide": "4.3.2", + "tailwindcss": "4.3.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.3.tgz", + "integrity": "sha512-ihjs0E2SxvDgq/MK418hX6YycQgKhsqxpbZuZbHo0yKfqDWdymWMjWYIpCIzqDDLLKClHlXev8whW/8WXmJ0BA==", + "dev": true, + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.4", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.21.6", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.6.tgz", + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-3.1.0.tgz", + "integrity": "sha512-Fzocl+X4eQ9jOi0RwdphYRGkUbPJ3ky1pTAST5Ot18cS2gw6d2vldK2eCrlKDVjtibCjCx5qptYDlA0373n7qg==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "tinyglobby": "^0.2.12", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "fontaine": "^0.5.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "fontaine": { + "optional": true + } + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "dev": true, + "dependencies": { + "@oxc-project/types": "=0.137.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.2.tgz", + "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/vite": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", + "dev": true, + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/laravel-app/package.json b/laravel-app/package.json new file mode 100644 index 0000000..49c869e --- /dev/null +++ b/laravel-app/package.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + } +} diff --git a/laravel-app/phpunit.xml b/laravel-app/phpunit.xml new file mode 100644 index 0000000..e7f0a48 --- /dev/null +++ b/laravel-app/phpunit.xml @@ -0,0 +1,36 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + + + + diff --git a/laravel-app/public/.htaccess b/laravel-app/public/.htaccess new file mode 100644 index 0000000..b574a59 --- /dev/null +++ b/laravel-app/public/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/laravel-app/public/favicon.ico b/laravel-app/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/laravel-app/public/index.php b/laravel-app/public/index.php new file mode 100644 index 0000000..ee8f07e --- /dev/null +++ b/laravel-app/public/index.php @@ -0,0 +1,20 @@ +handleRequest(Request::capture()); diff --git a/laravel-app/public/robots.txt b/laravel-app/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/laravel-app/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/laravel-app/resources/css/app.css b/laravel-app/resources/css/app.css new file mode 100644 index 0000000..54b247e --- /dev/null +++ b/laravel-app/resources/css/app.css @@ -0,0 +1,9 @@ +@import 'tailwindcss'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../storage/framework/views/*.php'; + +@theme { + --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; +} diff --git a/laravel-app/resources/js/app.js b/laravel-app/resources/js/app.js new file mode 100644 index 0000000..8337712 --- /dev/null +++ b/laravel-app/resources/js/app.js @@ -0,0 +1 @@ +// diff --git a/laravel-app/resources/views/email_convert.blade.php b/laravel-app/resources/views/email_convert.blade.php new file mode 100644 index 0000000..e0eecb8 --- /dev/null +++ b/laravel-app/resources/views/email_convert.blade.php @@ -0,0 +1,1314 @@ +@extends('layouts.app') +@section('title', 'Email Convert — AI Markdown Demo') + +@section('head') + +@endsection + +@section('content') +
+ + {{-- ── Col 1: Tree browser (col-3, full height) ─────────────── --}} +
+
+ + {{-- Header --}} +
+ + Server + +
+ + {{-- 3 select boxes --}} +
+ + {{-- INPUT --}} +
+
INPUT
+ +
+ + {{-- OUTPUT --}} +
+
OUTPUT
+ +
+ + {{-- PREVIEW --}} +
+
PREVIEW
+ +
+ +
{{-- /3 select boxes --}} + + {{-- Browse tree base path --}} +
+ +
+ + {{-- Tree --}} +
+
+

Đang tải... +
+
+
+
+ + {{-- ── Col 2: Context panel (col-3, full height) ─────────────── --}} +
+
+ + {{-- State: nothing selected --}} +
+ +
Chọn file hoặc thư mục
từ cây bên trái
+
+ + {{-- State: folder selected --}} +
+
+
+ +
+
+
+
+ +
+
+
+ {{-- Service checkboxes (stacked) --}} +
+
+ + +
+
+ + +
+
+ {{-- Docling format --}} +
+ + +
+ {{-- LLM toggle --}} +
+ + +
+
+ {{-- Output folder --}} +
+ + +
+ + +
+
+
{{-- /ctxPanelBody --}} +
+ +
+
{{-- /ctxDir --}} + + {{-- State: single file selected --}} +
+
+
+ +
+
+
+
+
+
+
+
+
Dịch vụ chuyển đổi
+
+ MarkItDown + Docling +
+
(dùng cài đặt từ cột bên)
+
+
+
+ +
+
{{-- /ctxFile --}} + +
+
+ + {{-- ── Col 3: Results area (col-6) ──────────────────────────── --}} +
+
+ + {{-- Empty placeholder --}} +
+
+ +
Kết quả sẽ hiển thị ở đây
+
+
+ + {{-- Restore panel injected here by JS (before #batchResult) --}} + + {{-- ── Tree inline preview (.md / .txt) ───────────────────── --}} + + + {{-- ── Single file result ─────────────────────────────────── --}} + + + {{-- ── Batch dir result ───────────────────────────────────── --}} + {{-- /batchResult --}} + +
{{-- /resultsCol --}} +
+ +
+@endsection + +@section('scripts') + + +@endsection diff --git a/laravel-app/resources/views/index.blade.php b/laravel-app/resources/views/index.blade.php new file mode 100644 index 0000000..6d5b5c5 --- /dev/null +++ b/laravel-app/resources/views/index.blade.php @@ -0,0 +1,427 @@ +@extends('layouts.app') +@section('title', 'Upload File — AI Markdown Demo') + +@section('content') + +{{-- ── Upload card ──────────────────────────────────────────────── --}} +
+
+
Tải lên tài liệu để so sánh
+ + {{-- Mode tabs --}} + + + {{-- File zone --}} +
+
+ + +

Kéo thả hoặc click để chọn file

+
+
+
+ @foreach(['PDF','DOCX','XLSX','PPTX','HTML','CSV','TXT','JPG/PNG','EPUB','TIFF','ASCIIDoc'] as $ext) + {{ $ext }} + @endforeach +
+
+ + {{-- YouTube zone --}} + + + {{-- Controls --}} +
+
+ + +
+
+ + +
+ + +
+ + {{-- Prompt panel --}} +
+
+
+ Custom LLM Prompt + +
+ +
+
+
+
+ +{{-- ── Status row ───────────────────────────────────────────────── --}} +
+ @foreach([['md','MarkItDown','bg-primary','text-primary'],['dl','Docling','bg-success','text-success'],['uo','Unlimited-OCR','bg-danger','text-danger']] as [$k,$label,$bg,$tc]) +
+
+
+
+  {{ $label }} +
+
+ + Đang chờ... +
+ +
+
+
+ @endforeach +
+ +{{-- ── Result cards ─────────────────────────────────────────────── --}} +
+ @foreach([['md','MarkItDown','bg-primary','text-primary'],['dl','Docling','bg-success','text-success'],['uo','Unlimited-OCR','bg-danger','text-danger']] as [$k,$label,$bg,$tc]) +
+
+
+ +   + {{ $label }} + + +
+ @if($k === 'md') + + @endif + + @include('partials.pane-tabs', ['k' => $k]) +
+
+
+ @include('partials.pane-body', ['k' => $k, 'tc' => $tc]) +
+
+
+ @endforeach +
+ +{{-- ── History ──────────────────────────────────────────────────── --}} +
Lịch sử chuyển đổi gần đây
+
+ @foreach([['md','MarkItDown','bg-primary'],['dl','Docling','bg-success'],['uo','Unlimited-OCR','bg-danger']] as [$k,$label,$bg]) +
+
+
+  {{ $label }} +
+
+
Chưa có lịch sử
+
+
+
+ @endforeach +
+ +@endsection + +@section('scripts') + +@endsection diff --git a/laravel-app/resources/views/layouts/app.blade.php b/laravel-app/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..9b6a1cf --- /dev/null +++ b/laravel-app/resources/views/layouts/app.blade.php @@ -0,0 +1,102 @@ + + + + + + @yield('title', 'AI Markdown Demo') + + + + + + @yield('head') + + + + + +
+ @yield('content') +
+ + + + + + + +@yield('scripts') + + diff --git a/laravel-app/resources/views/partials/pane-body.blade.php b/laravel-app/resources/views/partials/pane-body.blade.php new file mode 100644 index 0000000..1f25bf6 --- /dev/null +++ b/laravel-app/resources/views/partials/pane-body.blade.php @@ -0,0 +1,11 @@ +{{-- @include('partials.pane-body', ['k' => $k, 'tc' => $tc, 'idle' => '...']) --}} +@php $idle ??= 'Tải file lên để xem kết quả'; @endphp +
+ {{ $idle }} +
+ + + + diff --git a/laravel-app/resources/views/partials/pane-tabs.blade.php b/laravel-app/resources/views/partials/pane-tabs.blade.php new file mode 100644 index 0000000..0083098 --- /dev/null +++ b/laravel-app/resources/views/partials/pane-tabs.blade.php @@ -0,0 +1,11 @@ +{{-- @include('partials.pane-tabs', ['k' => $k]) --}} + diff --git a/laravel-app/routes/console.php b/laravel-app/routes/console.php new file mode 100644 index 0000000..3c9adf1 --- /dev/null +++ b/laravel-app/routes/console.php @@ -0,0 +1,8 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/laravel-app/routes/web.php b/laravel-app/routes/web.php new file mode 100644 index 0000000..df1554d --- /dev/null +++ b/laravel-app/routes/web.php @@ -0,0 +1,4 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/laravel-app/tests/TestCase.php b/laravel-app/tests/TestCase.php new file mode 100644 index 0000000..fe1ffc2 --- /dev/null +++ b/laravel-app/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/laravel-app/vite.config.js b/laravel-app/vite.config.js new file mode 100644 index 0000000..1fd66d5 --- /dev/null +++ b/laravel-app/vite.config.js @@ -0,0 +1,24 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import { bunny } from 'laravel-vite-plugin/fonts'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + fonts: [ + bunny('Instrument Sans', { + weights: [400, 500, 600], + }), + ], + }), + tailwindcss(), + ], + server: { + watch: { + ignored: ['**/storage/framework/views/**'], + }, + }, +}); diff --git a/markitdown-service/app/services/MarkitdownService.py b/markitdown-service/app/services/MarkitdownService.py deleted file mode 100644 index 2f1a7c8..0000000 --- a/markitdown-service/app/services/MarkitdownService.py +++ /dev/null @@ -1,219 +0,0 @@ -import os -import tempfile -import logging -from fastapi import UploadFile, HTTPException -from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import select -from markitdown import MarkItDown -from app.models.ConvertModel import Conversion - -logger = logging.getLogger(__name__) - -import openai as _openai - -OLLAMA_BASE_URL = os.getenv("OLLAMA_BASE_URL") or None -OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llava") -CLEANUP_MODEL = os.getenv("CLEANUP_MODEL", "") - -LLM_ACTIVE = False -_llm_client = None -md_plain = MarkItDown() -md = md_plain - - -def _init_llm(base_url: str | None, model: str) -> bool: - global OLLAMA_BASE_URL, OLLAMA_MODEL, LLM_ACTIVE, _llm_client, md - if not base_url: - OLLAMA_BASE_URL, OLLAMA_MODEL, LLM_ACTIVE, _llm_client, md = None, model, False, None, md_plain - return False - try: - client = _openai.OpenAI(base_url=base_url, api_key="ollama") - OLLAMA_BASE_URL = base_url - OLLAMA_MODEL = model - _llm_client = client - md = MarkItDown(llm_client=client, llm_model=model) - LLM_ACTIVE = True - logger.info("MarkItDown: LLM enabled via %s (model=%s)", base_url, model) - return True - except Exception as e: - logger.warning("MarkItDown: LLM init failed (%s)", e) - LLM_ACTIVE = False - return False - - -_init_llm(OLLAMA_BASE_URL, OLLAMA_MODEL) - -DEFAULT_CLEANUP_PROMPT = """You are a technical document formatter. \ -The text below was extracted from a multi-column PDF using OCR and is poorly structured: \ -columns are merged, headers are mixed with values, and content is out of order. - -Your task: -1. Identify the logical sections (e.g. PERFORMANCE, MEMORY, STORAGE, CONNECTIVITY, etc.) -2. Under each section, format specs as a clean two-column Markdown table: | Spec | Value | -3. Keep bullet lists where appropriate (e.g. ports, certifications) -4. Remove duplicate lines and OCR artifacts (e.g. stray "---", lone "|", empty rows) -5. Preserve all technical values exactly — do not paraphrase specs - -Return ONLY the cleaned Markdown. No code fences, no commentary, no preamble.""" - -import re as _re - -def llm_cleanup(text: str, prompt: str | None = None, model: str | None = None) -> str: - if not _llm_client or not text.strip(): - return text - try: - resp = _llm_client.chat.completions.create( - model=model or OLLAMA_MODEL, - messages=[ - {"role": "system", "content": prompt or DEFAULT_CLEANUP_PROMPT}, - {"role": "user", "content": text}, - ], - temperature=0, - ) - result = resp.choices[0].message.content or text - result = _re.sub(r"^```(?:markdown)?\s*\n?", "", result.strip()) - result = _re.sub(r"\n?```\s*$", "", result.strip()) - return result.strip() or text - except Exception as e: - logger.warning("MarkItDown: cleanup failed (%s)", e) - return text - - -ALLOWED_EXTENSIONS = { - "pdf", "docx", "xlsx", "pptx", - "html", "csv", "txt", "jpg", "jpeg", "png", "zip", "epub" -} - -YOUTUBE_PATTERN = _re.compile( - r"(https?://)?(www\.)?(youtube\.com/watch|youtu\.be/|youtube\.com/shorts/)" -) - - -async def convert_url( - url: str, - db: AsyncSession, - use_llm: bool = True, - llm_prompt: str | None = None, -) -> Conversion: - use_llm_now = LLM_ACTIVE and use_llm - if use_llm_now and llm_prompt: - try: - converter = MarkItDown( - llm_client=_llm_client, - llm_model=OLLAMA_MODEL, - llm_prompt=llm_prompt, - ) - except TypeError: - converter = md - elif use_llm_now: - converter = md - else: - converter = md_plain - - try: - result = converter.convert(url) - actual_llm = use_llm_now - except Exception as llm_err: - if use_llm_now and ("500" in str(llm_err) or "InternalServerError" in type(llm_err).__name__): - logger.warning("MarkItDown: LLM failed (%s), retrying without LLM", llm_err) - result = md_plain.convert(url) - actual_llm = False - else: - raise HTTPException(status_code=500, detail=str(llm_err)) - - # Use last segment of URL as filename - slug = url.rstrip("/").split("/")[-1].split("?")[0] or "youtube" - filename = f"{slug}.md" - - try: - record = Conversion( - filename=filename, - file_type="youtube", - markdown=result.text_content, - llm_enabled=actual_llm, - ) - db.add(record) - await db.commit() - await db.refresh(record) - return record - except Exception as e: - await db.rollback() - raise HTTPException(status_code=500, detail=str(e)) - - -def _allowed_file(filename: str) -> bool: - return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS - - -async def convert_file( - file: UploadFile, - db: AsyncSession, - use_llm: bool = True, - llm_prompt: str | None = None, -) -> Conversion: - if not _allowed_file(file.filename): - raise HTTPException( - status_code=422, - detail=f"File type not allowed. Allowed: {', '.join(sorted(ALLOWED_EXTENSIONS))}" - ) - - suffix = os.path.splitext(file.filename)[1] - file_type = suffix.lstrip(".").lower() - - with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: - tmp.write(await file.read()) - tmp_path = tmp.name - - # Choose converter: LLM only if enabled globally AND requested per-call - use_llm_now = LLM_ACTIVE and use_llm - - # If custom prompt provided, create a one-off MarkItDown with that prompt - if use_llm_now and llm_prompt: - try: - converter = MarkItDown( - llm_client=_llm_client, - llm_model=OLLAMA_MODEL, - llm_prompt=llm_prompt, - ) - except TypeError: - # older markitdown versions may not support llm_prompt kwarg - converter = md - elif use_llm_now: - converter = md - else: - converter = md_plain - - try: - try: - result = converter.convert(tmp_path) - actual_llm = use_llm_now - except Exception as llm_err: - # Ollama OOM / 500 — fallback to plain conversion without LLM - if use_llm_now and ("500" in str(llm_err) or "InternalServerError" in type(llm_err).__name__): - logger.warning("MarkItDown: LLM failed (%s), retrying without LLM", llm_err) - result = md_plain.convert(tmp_path) - actual_llm = False - else: - raise - record = Conversion( - filename=file.filename, - file_type=file_type, - markdown=result.text_content, - llm_enabled=actual_llm, - ) - db.add(record) - await db.commit() - await db.refresh(record) - return record - except Exception as e: - await db.rollback() - raise HTTPException(status_code=500, detail=str(e)) - finally: - os.unlink(tmp_path) - - -async def get_history(db: AsyncSession, limit: int = 20) -> list[Conversion]: - result = await db.execute( - select(Conversion).order_by(Conversion.created_at.desc()).limit(limit) - ) - return result.scalars().all() diff --git a/docling-service/.dockerignore b/services/docling-service/.dockerignore similarity index 100% rename from docling-service/.dockerignore rename to services/docling-service/.dockerignore diff --git a/docling-service/Dockerfile b/services/docling-service/Dockerfile similarity index 100% rename from docling-service/Dockerfile rename to services/docling-service/Dockerfile diff --git a/services/docling-service/app/config.py b/services/docling-service/app/config.py new file mode 100644 index 0000000..243f6f0 --- /dev/null +++ b/services/docling-service/app/config.py @@ -0,0 +1,11 @@ +"""Central config — single source of truth cho LLM/service settings. +Đổi base_url / model chỉ cần sửa file này.""" +import os + +# llama-server (Qwen2.5-VL) qua SSH tunnel; Docker reach host qua host.docker.internal +LLM_BASE_URL = "http://host.docker.internal:11436/v1" +LLM_MODEL = "ggml-org/Qwen2.5-VL-3B-Instruct-GGUF" +CLEANUP_MODEL = os.getenv("CLEANUP_MODEL", "") + +# Vision OCR gom về vision-service (container api-vision). Ảnh → POST {VISION_URL}/ocr +VISION_URL = os.getenv("VISION_URL", "http://api-vision:8000") diff --git a/docling-service/app/controllers/ConvertController.py b/services/docling-service/app/controllers/ConvertController.py similarity index 75% rename from docling-service/app/controllers/ConvertController.py rename to services/docling-service/app/controllers/ConvertController.py index b924fa2..29458ce 100644 --- a/docling-service/app/controllers/ConvertController.py +++ b/services/docling-service/app/controllers/ConvertController.py @@ -13,22 +13,26 @@ class UrlRequest(BaseModel): use_llm: bool = True llm_prompt: str | None = None +class PathRequest(BaseModel): + path: str + output_format: str = "markdown" + use_llm: bool = True + llm_prompt: str | None = None + class SettingsRequest(BaseModel): - ollama_base_url: str | None = None - ollama_model: str = "llava" cleanup_model: str | None = None class SettingsResponse(BaseModel): llm_enabled: bool - ollama_base_url: str | None - ollama_model: str + llm_base_url: str | None + llm_model: str cleanup_model: str | None = None default_prompt: str | None = None SUPPORTED_INPUT_FORMATS = sorted([ "pdf", "docx", "xlsx", "pptx", "html", "htm", "jpg", "jpeg", "png", - "tiff", "tif", "bmp", "md", "txt", "asciidoc", "adoc" + "tiff", "tif", "bmp", "md", "txt", "asciidoc", "adoc", "elm" ]) SUPPORTED_OUTPUT_FORMATS = ["markdown", "json", "html", "text"] @@ -38,34 +42,34 @@ SUPPORTED_OUTPUT_FORMATS = ["markdown", "json", "html", "text"] def get_settings(): return SettingsResponse( llm_enabled=docling_service.LLM_ACTIVE, - ollama_base_url=docling_service.OLLAMA_BASE_URL, - ollama_model=docling_service.OLLAMA_MODEL, + llm_base_url=docling_service.LLM_BASE_URL, + llm_model=docling_service.LLM_MODEL, cleanup_model=docling_service.CLEANUP_MODEL or None, default_prompt=docling_service.DEFAULT_ENRICH_PROMPT, ) @router.post("/settings", response_model=SettingsResponse) def update_settings(req: SettingsRequest): - docling_service._init_llm(req.ollama_base_url or None, req.ollama_model) + docling_service._init_llm() docling_service.CLEANUP_MODEL = req.cleanup_model or "" return SettingsResponse( llm_enabled=docling_service.LLM_ACTIVE, - ollama_base_url=docling_service.OLLAMA_BASE_URL, - ollama_model=docling_service.OLLAMA_MODEL, + llm_base_url=docling_service.LLM_BASE_URL, + llm_model=docling_service.LLM_MODEL, cleanup_model=docling_service.CLEANUP_MODEL or None, default_prompt=docling_service.DEFAULT_ENRICH_PROMPT, ) @router.get("/health", response_model=HealthResponse) def health(): - from app.services.DoclingService import LLM_ACTIVE, OLLAMA_MODEL + from app.services.DoclingService import LLM_ACTIVE, LLM_MODEL ocr = "tesseract" if _ocr_available() else "none" return HealthResponse( status="ok", supported_formats=SUPPORTED_INPUT_FORMATS, output_formats=SUPPORTED_OUTPUT_FORMATS, llm_enabled=LLM_ACTIVE, - llm_model=OLLAMA_MODEL if LLM_ACTIVE else None, + llm_model=LLM_MODEL if LLM_ACTIVE else None, ocr_engine=ocr, ) @@ -125,6 +129,26 @@ async def get_conversion(conversion_id: int, db: AsyncSession = Depends(get_db)) ) +@router.post("/convert-path") +async def convert_path(req: PathRequest, db: AsyncSession = Depends(get_db)): + import os + from fastapi import HTTPException as _HTTPException + abs_path = os.path.realpath(req.path) + if not abs_path.startswith("/workspace"): + raise _HTTPException(status_code=403, detail="Access denied") + if not os.path.exists(abs_path) or not os.path.isfile(abs_path): + raise _HTTPException(status_code=404, detail="File not found") + record = await docling_service.convert_path(abs_path, db, req.output_format, use_llm=req.use_llm, llm_prompt=req.llm_prompt) + return ConvertResponse( + id=record.id, + filename=record.filename, + output_format=record.output_format, + content=record.content, + page_count=record.page_count, + llm_enabled=record.llm_enabled, + ) + + @router.get("/history", response_model=list[ConversionRecord]) async def history(limit: int = 20, db: AsyncSession = Depends(get_db)): records = await docling_service.get_history(db, limit) diff --git a/docling-service/app/database.py b/services/docling-service/app/database.py similarity index 100% rename from docling-service/app/database.py rename to services/docling-service/app/database.py diff --git a/docling-service/app/models/ConvertModel.py b/services/docling-service/app/models/ConvertModel.py similarity index 100% rename from docling-service/app/models/ConvertModel.py rename to services/docling-service/app/models/ConvertModel.py diff --git a/services/docling-service/app/services/DoclingService.py b/services/docling-service/app/services/DoclingService.py new file mode 100644 index 0000000..ca1e7c7 --- /dev/null +++ b/services/docling-service/app/services/DoclingService.py @@ -0,0 +1,632 @@ +import os +import re +import json +import tempfile +import logging +from fastapi import UploadFile, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy import select +from docling.document_converter import DocumentConverter, PdfFormatOption, ImageFormatOption +from docling.datamodel.pipeline_options import PdfPipelineOptions, TesseractCliOcrOptions +from docling.datamodel.base_models import InputFormat +from app.models.ConvertModel import Conversion + +logger = logging.getLogger(__name__) + +import openai as _openai + +from app.config import LLM_BASE_URL, LLM_MODEL, CLEANUP_MODEL, VISION_URL + +def _build_converter() -> DocumentConverter: + try: + ocr_opts = TesseractCliOcrOptions() + pdf_opts = PdfPipelineOptions(do_ocr=True, ocr_options=ocr_opts) + logger.info("Docling: OCR enabled via Tesseract CLI") + except Exception as e: + logger.warning("Docling: Tesseract unavailable (%s) — OCR disabled", e) + pdf_opts = PdfPipelineOptions(do_ocr=False) + + # ImageFormatOption also uses StandardPdfPipeline — pass same pdf_opts + # to prevent docling from falling back to RapidOCR / PP-OCRv6 + return DocumentConverter(format_options={ + InputFormat.PDF: PdfFormatOption(pipeline_options=pdf_opts), + InputFormat.IMAGE: ImageFormatOption(pipeline_options=pdf_opts), + }) + +converter = _build_converter() + +_llm_client = None +LLM_ACTIVE = False + + +def _init_llm() -> bool: + global LLM_ACTIVE, _llm_client + try: + _llm_client = _openai.OpenAI(base_url=LLM_BASE_URL, api_key="none") + LLM_ACTIVE = True + logger.info("Docling: LLM enabled via %s (model=%s)", LLM_BASE_URL, LLM_MODEL) + return True + except Exception as e: + logger.warning("Docling: LLM init failed (%s)", e) + LLM_ACTIVE = False + return False + + +_init_llm() + + +DEFAULT_ENRICH_PROMPT = ( + "You are a document cleaning assistant. " + "Fix OCR errors, normalise whitespace, and improve the Markdown structure. " + "Return ONLY the raw Markdown text — no code fences, no commentary, no explanation." +) + + +def _llm_enrich(markdown: str, system_prompt: str | None = None) -> str: + """Text cleanup pass — DISABLED under OCRFlux (OCR-only model always emits its + JSON schema regardless of prompt, which corrupts non-image text). Passthrough.""" + return markdown + if not _llm_client or not markdown.strip(): + return markdown + # Rough token estimate: 1 token ≈ 4 chars. Reserve ~800 tokens for system + response. + max_chars = (4096 - 800) * 4 + truncated = markdown[:max_chars] + if len(markdown) > max_chars: + logger.warning("_llm_enrich: truncated input from %d to %d chars", len(markdown), max_chars) + try: + resp = _llm_client.chat.completions.create( + model=LLM_MODEL, + messages=[ + {"role": "system", "content": system_prompt or DEFAULT_ENRICH_PROMPT}, + {"role": "user", "content": truncated}, + ], + temperature=0, + ) + result = resp.choices[0].message.content or truncated + # llava tends to wrap output in code fences regardless of instructions — strip them + result = re.sub(r"^```(?:markdown)?\s*\n?", "", result.strip()) + result = re.sub(r"\n?```\s*$", "", result.strip()) + return result.strip() or markdown + except Exception as e: + logger.warning("Docling: LLM enrichment failed (%s) — returning raw output", e) + return markdown + + + +async def convert_url( + url: str, + db: AsyncSession, + output_format: str = "markdown", + use_llm: bool = True, + llm_prompt: str | None = None, +) -> "Conversion": + """Fetch a YouTube (or any URL) transcript via yt-dlp, then convert with Docling.""" + try: + import yt_dlp # noqa: PLC0415 + except ImportError: + raise HTTPException(status_code=500, detail="yt-dlp not installed") + + ydl_opts = { + "quiet": True, + "skip_download": True, + "writesubtitles": True, + "writeautomaticsub": True, + "subtitleslangs": ["vi", "en"], + "outtmpl": "%(id)s.%(ext)s", + } + + try: + with yt_dlp.YoutubeDL(ydl_opts) as ydl: + info = ydl.extract_info(url, download=False) + except Exception as e: + raise HTTPException(status_code=422, detail=f"yt-dlp error: {e}") + + title = info.get("title", "YouTube Video") + description = info.get("description", "") or "" + channel = info.get("channel", info.get("uploader", "")) + duration = info.get("duration_string", "") + upload_date = info.get("upload_date", "") + view_count = info.get("view_count") + chapters = info.get("chapters") or [] + + # Build markdown from available metadata + lines = [f"# {title}", ""] + meta_rows = [] + if channel: + meta_rows.append(f"**Kênh:** {channel}") + if duration: + meta_rows.append(f"**Thời lượng:** {duration}") + if upload_date and len(upload_date) == 8: + meta_rows.append(f"**Ngày đăng:** {upload_date[:4]}-{upload_date[4:6]}-{upload_date[6:]}") + if view_count is not None: + meta_rows.append(f"**Lượt xem:** {view_count:,}") + meta_rows.append(f"**URL:** {url}") + lines.extend(meta_rows) + lines.append("") + + # Subtitles/transcript + subtitles = info.get("subtitles") or {} + auto_subtitles = info.get("automatic_captions") or {} + + transcript_text = None + for lang in ("vi", "en"): + tracks = subtitles.get(lang) or auto_subtitles.get(lang) + if tracks: + # Find a json3 or srv3 track to extract plain text + for track in tracks: + if track.get("ext") in ("json3", "srv3", "ttml", "vtt"): + try: + import urllib.request + with urllib.request.urlopen(track["url"], timeout=15) as r: + raw = r.read().decode("utf-8", errors="ignore") + # Strip VTT timestamps for vtt format + if track.get("ext") == "vtt": + cleaned = re.sub(r"\d{2}:\d{2}:\d{2}\.\d+ --> .*", "", raw) + cleaned = re.sub(r"^\d+$", "", cleaned, flags=re.MULTILINE) + cleaned = re.sub(r"<[^>]+>", "", cleaned) + transcript_text = re.sub(r"\n{3,}", "\n\n", cleaned).strip() + else: + transcript_text = raw + break + except Exception: + pass + if transcript_text: + break + + if transcript_text: + lines += ["## Transcript / Phụ đề", "", transcript_text, ""] + elif description: + lines += ["## Mô tả", "", description[:3000], ""] + else: + lines += ["## Ghi chú", "", "_Không có transcript hoặc mô tả._", ""] + + if chapters: + lines += ["## Chapters", ""] + for ch in chapters: + start = ch.get("start_time", 0) + m, s = divmod(int(start), 60) + lines.append(f"- **{m:02d}:{s:02d}** — {ch.get('title', '')}") + lines.append("") + + markdown_text = "\n".join(lines) + + # Write temp file and run through Docling + video_id = info.get("id", "youtube") + with tempfile.NamedTemporaryFile(delete=False, suffix=".md", mode="w", encoding="utf-8") as tmp: + tmp.write(markdown_text) + tmp_path = tmp.name + + try: + result = converter.convert(tmp_path) + doc = result.document + page_count = None + + if output_format == "markdown": + content = doc.export_to_markdown() + elif output_format == "json": + content = json.dumps(doc.export_to_dict(), ensure_ascii=False, indent=2) + elif output_format == "html": + content = doc.export_to_html() + else: + content = markdown_text + + llm_used = False + if _llm_client and use_llm and output_format in ("markdown", "text"): + content = _llm_enrich(content, system_prompt=llm_prompt or None) + llm_used = True + + from app.models.ConvertModel import Conversion + record = Conversion( + filename=f"{video_id}.md", + file_type="youtube", + output_format=output_format, + content=content, + page_count=page_count, + llm_enabled=llm_used, + ) + db.add(record) + await db.commit() + await db.refresh(record) + return record + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + finally: + os.unlink(tmp_path) + + +# ----------------------------------------------------------------- +ALLOWED_EXTENSIONS = { + "pdf", "docx", "xlsx", "pptx", + "html", "htm", "jpg", "jpeg", "png", + "tiff", "tif", "bmp", "md", "txt", "asciidoc", "adoc", "elm" +} +OUTPUT_FORMATS = {"markdown", "json", "html", "text"} + + +def _allowed_file(filename: str) -> bool: + return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS + + +async def convert_file( + file: UploadFile, + db: AsyncSession, + output_format: str = "markdown", + use_llm: bool = True, + llm_prompt: str | None = None, +) -> Conversion: + if not _allowed_file(file.filename): + raise HTTPException( + status_code=422, + detail=f"File type not allowed. Allowed: {', '.join(sorted(ALLOWED_EXTENSIONS))}" + ) + if output_format not in OUTPUT_FORMATS: + raise HTTPException( + status_code=422, + detail=f"Output format not supported. Supported: {', '.join(sorted(OUTPUT_FORMATS))}" + ) + + suffix = os.path.splitext(file.filename)[1] + file_type = suffix.lstrip(".").lower() + + with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: + tmp.write(await file.read()) + tmp_path = tmp.name + + try: + result = converter.convert(tmp_path) + doc = result.document + + page_count = len(doc.pages) if hasattr(doc, "pages") and doc.pages else None + + if output_format == "markdown": + content = doc.export_to_markdown() + elif output_format == "json": + content = json.dumps(doc.export_to_dict(), ensure_ascii=False, indent=2) + elif output_format == "html": + content = doc.export_to_html() + elif output_format == "text": + content = doc.export_to_markdown() + content = re.sub(r"#{1,6}\s?", "", content) + content = re.sub(r"\*\*(.+?)\*\*", r"\1", content) + content = re.sub(r"\*(.+?)\*", r"\1", content) + + # LLM enrichment — only for markdown / text output, and only if requested + llm_used = False + if _llm_client and use_llm and output_format in ("markdown", "text"): + content = _llm_enrich(content, system_prompt=llm_prompt or None) + llm_used = True + + record = Conversion( + filename=file.filename, + file_type=file_type, + output_format=output_format, + content=content, + page_count=page_count, + llm_enabled=llm_used, + ) + db.add(record) + await db.commit() + await db.refresh(record) + return record + + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + finally: + os.unlink(tmp_path) + + +def _is_email_file(path: str, file_type: str) -> bool: + """Detect email files by extension OR by reading the first few bytes.""" + if file_type in ("eml", "msg"): + return True + try: + with open(path, "rb") as f: + head = f.read(2048).decode("utf-8", errors="ignore") + email_headers = ( + "from:", "to:", "subject:", "date:", "mime-version:", "message-id:", + "received:", "return-path:", "delivered-to:", "envelope-to:", + "x-mailer:", "content-type:", "x-spam-", "reply-to:", + ) + lines = [l.lower() for l in head.splitlines()[:30]] + hits = sum(1 for l in lines if any(l.startswith(h) for h in email_headers)) + return hits >= 2 + except Exception: + return False + + +_IMAGE_MIME = {"image/jpeg", "image/jpg", "image/png", "image/gif", "image/bmp", "image/webp", "image/tiff"} +_IMAGE_EXT = {".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp", ".tiff", ".tif"} +_DOCLING_EXT = {".pdf", ".docx", ".xlsx", ".pptx", ".html", ".htm", + ".jpg", ".jpeg", ".png", ".tiff", ".tif", ".bmp", + ".md", ".txt", ".asciidoc", ".adoc", ".eml"} + + +def _eml_to_html(path: str) -> tuple[str, list[tuple[str, bytes]]]: + """Parse email: extract HTML body, embed inline CID images as base64 data-URIs. + Returns (html_string, ordered_images) where ordered_images is [(mime, raw_bytes), ...] + in document appearance order — used to replace placeholders later.""" + import email as _email, email.policy as _policy, re as _re, base64 as _b64 + + with open(path, "rb") as f: + msg = _email.message_from_binary_file(f, policy=_policy.compat32) + + html_body = None + text_body = None + cid_uri: dict[str, str] = {} # cid → data-URI + cid_raw: dict[str, tuple[str, bytes]] = {} # cid → (mime, bytes) + loose: list[tuple[str, bytes, str]] = [] # (mime, bytes, filename) + + for part in msg.walk(): + ct = part.get_content_type() + data = part.get_payload(decode=True) + if not data: + continue + + if ct in _IMAGE_MIME or ct.startswith("image/"): + cid = part.get("Content-ID", "").strip("<>") + mime = ct if "/" in ct else "image/jpeg" + b64 = _b64.standard_b64encode(data).decode() + uri = f"data:{mime};base64,{b64}" + if cid: + cid_uri[cid] = uri + cid_raw[cid] = (mime, data) + else: + fname = part.get_filename() or "" + loose.append((mime, data, fname or "image")) + continue + + charset = part.get_content_charset() or "utf-8" + decoded = data.decode(charset, errors="replace") + if ct == "text/html" and html_body is None: + html_body = decoded + elif ct == "text/plain" and text_body is None: + text_body = decoded + + # Replace cid: src refs, tracking order of appearance + inline_images: list[tuple[str, bytes]] = [] + + def _replace_cid(html: str) -> str: + def _sub(m): + cid = m.group(2) + if cid in cid_raw: + inline_images.append(cid_raw[cid]) + return m.group(1) + cid_uri[cid] + m.group(3) + return m.group(0) + return _re.sub(r'(src=["\'])cid:([^\s"\'>\)]+)(["\'])', _sub, html) + + subject = msg.get("Subject", "") + sender = msg.get("From", "") + date = msg.get("Date", "") + header = f"

{subject}

From: {sender}
Date: {date}


" + + loose_html = "" + if loose: + parts = [] + for mime, data, alt in loose: + b64 = _b64.standard_b64encode(data).decode() + uri = f"data:{mime};base64,{b64}" + parts.append(f'
{alt}
{alt}
') + loose_html = "\n

Attachments

\n" + "\n".join(parts) + + if html_body: + html_body = _replace_cid(html_body) + if "]*>)", r"\1" + header, html_body, count=1, flags=re.IGNORECASE) + html_str = result.rstrip().rstrip("").rstrip() + loose_html + "\n" + else: + html_str = f"{header}{html_body}{loose_html}" + elif text_body: + escaped = text_body.replace("&", "&").replace("<", "<").replace(">", ">") + html_str = f"{header}
{escaped}
{loose_html}" + else: + html_str = f"{header}

No body content found.

{loose_html}" + + ordered_images = inline_images + [(m, d) for m, d, _ in loose] + return html_str, ordered_images + + +def _ocr_image_llm(mime: str, data: bytes) -> str: + """OCR a single image via the shared vision-service (OCRFlux) → Markdown/HTML. + '' on failure. Upscaling + prompt now live in vision-service.""" + import httpx + try: + resp = httpx.post( + f"{VISION_URL}/ocr", + files={"file": ("image", data, mime or "application/octet-stream")}, + timeout=300, + ) + resp.raise_for_status() + return resp.json().get("text", "") + except Exception as e: + logger.warning("Docling: vision OCR failed (%s)", e) + return "" + + +def _replace_image_placeholders(markdown: str, images: list[tuple[str, bytes]]) -> str: + """Replace Docling placeholders with OCRFlux output. + Each image is OCR'd; falls back to *[Image]* when nothing usable is extracted.""" + if not images or "" not in markdown: + return markdown + img_iter = iter(images) + def _sub(_m): + try: + mime, data = next(img_iter) + except StopIteration: + return "*[Image]*" + return _ocr_image_llm(mime, data) or "*[Image]*" + return re.sub(r"", _sub, markdown) + + +def _detect_ext(path: str, declared_ext: str) -> str: + """Return best-guess extension for file. Falls back to magic bytes.""" + if declared_ext and f".{declared_ext}" in _DOCLING_EXT: + return f".{declared_ext}" + try: + with open(path, "rb") as f: + hdr = f.read(16) + magic = { + b"\x89PNG": ".png", b"\xff\xd8\xff": ".jpg", + b"GIF8": ".gif", b"BM": ".bmp", + b"II*\x00": ".tiff", b"MM\x00*": ".tiff", + b"%PDF": ".pdf", + b"PK\x03\x04": ".docx", # zip-based (docx/xlsx/pptx — good enough) + } + for sig, ext in magic.items(): + if hdr.startswith(sig): + return ext + except Exception: + pass + return f".{declared_ext}" if declared_ext else "" + + +async def convert_path( + path: str, + db: AsyncSession, + output_format: str = "markdown", + use_llm: bool = True, + llm_prompt: str | None = None, +) -> Conversion: + import os as _os, shutil as _shutil + filename = _os.path.basename(path) + file_type = _os.path.splitext(filename)[1].lstrip(".").lower() + + if output_format not in OUTPUT_FORMATS: + raise HTTPException(status_code=422, detail=f"Output format not supported: {output_format}") + + actual_path = path + tmp_html = None + tmp_copy = None + email_images: list[tuple[str, bytes]] = [] + + # ── Email / Maildir ────────────────────────────────────────── + if _is_email_file(path, file_type): + file_type = "eml" + try: + html_content, email_images = _eml_to_html(path) + tmp_html = tempfile.NamedTemporaryFile(delete=False, suffix=".html", mode="w", encoding="utf-8") + tmp_html.write(html_content) + tmp_html.close() + actual_path = tmp_html.name + except Exception as e: + raise HTTPException(status_code=500, detail=f"Email parse error: {e}") + + # ── No / wrong extension → copy to temp file with detected ext ─ + elif not file_type or f".{file_type}" not in _DOCLING_EXT: + detected = _detect_ext(path, file_type) + if not detected or detected not in _DOCLING_EXT: + raise HTTPException( + status_code=422, + detail=f"Unsupported file format: '{file_type or 'no extension'}'" + ) + tmp_copy = tempfile.NamedTemporaryFile(delete=False, suffix=detected) + tmp_copy.close() + _shutil.copy2(path, tmp_copy.name) + actual_path = tmp_copy.name + file_type = detected.lstrip(".") + + # ── Standalone image file → OCRFlux directly (skip docling/Tesseract) ─ + if (f".{file_type}" in _IMAGE_EXT and use_llm and _llm_client + and output_format in ("markdown", "text")): + try: + with open(actual_path, "rb") as _f: + _img = _f.read() + _mime = "image/png" if file_type == "png" else "image/jpeg" + _ocr = _ocr_image_llm(_mime, _img) + if _ocr: + record = Conversion( + filename=filename, file_type=file_type, + output_format=output_format, content=_ocr, + page_count=1, llm_enabled=True, + ) + db.add(record); await db.commit(); await db.refresh(record) + for _t in (tmp_html, tmp_copy): + if _t: + try: os.unlink(_t.name) + except Exception: pass + return record + except Exception as e: + logger.warning("Docling: OCRFlux image path failed (%s) — falling back", e) + + try: + result = converter.convert(actual_path) + doc = result.document + page_count = len(doc.pages) if hasattr(doc, "pages") and doc.pages else None + + if output_format == "markdown": + content = doc.export_to_markdown() + elif output_format == "json": + content = json.dumps(doc.export_to_dict(), ensure_ascii=False, indent=2) + elif output_format == "html": + content = doc.export_to_html() + else: + content = doc.export_to_markdown() + content = re.sub(r"#{1,6}\s?", "", content) + content = re.sub(r"\*\*(.+?)\*\*", r"\1", content) + content = re.sub(r"\*(.+?)\*", r"\1", content) + + llm_used = False + if output_format in ("markdown", "text"): + images_replaced = False + # Step 1: replace placeholders via Vision LLM OCR + if email_images and use_llm and "" in content: + content = _replace_image_placeholders(content, email_images) + images_replaced = True + llm_used = bool(_llm_client) + # Step 2: fallback — any remaining → *[Image]* + if "" in content: + content = content.replace("", "*[Image]*") + # Step 3: text LLM enrichment — SKIP when we just OCR'd images, because the + # free-form cleanup model tends to summarise away the extracted tables. + if _llm_client and use_llm and not images_replaced: + content = _llm_enrich(content, system_prompt=llm_prompt or None) + llm_used = True + + record = Conversion( + filename=filename, + file_type=file_type, + output_format=output_format, + content=content, + page_count=page_count, + llm_enabled=llm_used, + ) + db.add(record) + await db.commit() + await db.refresh(record) + return record + except HTTPException: + raise + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + finally: + for tmp in (tmp_html, tmp_copy): + if tmp: + try: os.unlink(tmp.name) + except Exception: pass + + +async def get_conversion(conversion_id: int, db: AsyncSession) -> Conversion: + result = await db.execute(select(Conversion).where(Conversion.id == conversion_id)) + record = result.scalar_one_or_none() + if not record: + raise HTTPException(status_code=404, detail="Conversion not found") + return record + + +async def get_history(db: AsyncSession, limit: int = 20) -> list[Conversion]: + result = await db.execute( + select(Conversion).order_by(Conversion.created_at.desc()).limit(limit) + ) + return result.scalars().all() + + +async def delete_conversion(conversion_id: int, db: AsyncSession) -> dict: + result = await db.execute(select(Conversion).where(Conversion.id == conversion_id)) + record = result.scalar_one_or_none() + if not record: + raise HTTPException(status_code=404, detail="Conversion not found") + await db.delete(record) + await db.commit() + return {"message": f"Conversion {conversion_id} deleted"} diff --git a/docling-service/main.py b/services/docling-service/main.py similarity index 100% rename from docling-service/main.py rename to services/docling-service/main.py diff --git a/docling-service/requirements.txt b/services/docling-service/requirements.txt similarity index 87% rename from docling-service/requirements.txt rename to services/docling-service/requirements.txt index 1a82484..c81a45f 100644 --- a/docling-service/requirements.txt +++ b/services/docling-service/requirements.txt @@ -5,5 +5,6 @@ python-multipart asyncpg sqlalchemy[asyncio] openai +httpx yt-dlp ffmpeg \ No newline at end of file diff --git a/markitdown-service/.dockerignore b/services/markitdown-service/.dockerignore similarity index 100% rename from markitdown-service/.dockerignore rename to services/markitdown-service/.dockerignore diff --git a/markitdown-service/Dockerfile b/services/markitdown-service/Dockerfile similarity index 100% rename from markitdown-service/Dockerfile rename to services/markitdown-service/Dockerfile diff --git a/services/markitdown-service/app/config.py b/services/markitdown-service/app/config.py new file mode 100644 index 0000000..243f6f0 --- /dev/null +++ b/services/markitdown-service/app/config.py @@ -0,0 +1,11 @@ +"""Central config — single source of truth cho LLM/service settings. +Đổi base_url / model chỉ cần sửa file này.""" +import os + +# llama-server (Qwen2.5-VL) qua SSH tunnel; Docker reach host qua host.docker.internal +LLM_BASE_URL = "http://host.docker.internal:11436/v1" +LLM_MODEL = "ggml-org/Qwen2.5-VL-3B-Instruct-GGUF" +CLEANUP_MODEL = os.getenv("CLEANUP_MODEL", "") + +# Vision OCR gom về vision-service (container api-vision). Ảnh → POST {VISION_URL}/ocr +VISION_URL = os.getenv("VISION_URL", "http://api-vision:8000") diff --git a/markitdown-service/app/controllers/ConvertController.py b/services/markitdown-service/app/controllers/ConvertController.py similarity index 57% rename from markitdown-service/app/controllers/ConvertController.py rename to services/markitdown-service/app/controllers/ConvertController.py index 099839e..454dd84 100644 --- a/markitdown-service/app/controllers/ConvertController.py +++ b/services/markitdown-service/app/controllers/ConvertController.py @@ -19,14 +19,12 @@ class CleanupResponse(BaseModel): text: str class SettingsRequest(BaseModel): - ollama_base_url: str | None = None - ollama_model: str = "llava" cleanup_model: str | None = None class SettingsResponse(BaseModel): llm_enabled: bool - ollama_base_url: str | None - ollama_model: str + llm_base_url: str | None + llm_model: str cleanup_model: str | None = None default_prompt: str | None = None @@ -38,7 +36,7 @@ def health(): return HealthResponse( status="ok", llm_enabled=markitdown_service.LLM_ACTIVE, - llm_model=markitdown_service.OLLAMA_MODEL if markitdown_service.LLM_ACTIVE else None, + llm_model=markitdown_service.LLM_MODEL if markitdown_service.LLM_ACTIVE else None, ) @@ -66,11 +64,11 @@ async def convert_url( @router.get("/models") def list_models(): - if not markitdown_service.OLLAMA_BASE_URL: + if not markitdown_service.LLM_BASE_URL: return {"models": []} try: import httpx, re - base = re.sub(r"/v1/?$", "", markitdown_service.OLLAMA_BASE_URL.rstrip("/")) + base = re.sub(r"/v1/?$", "", markitdown_service.LLM_BASE_URL.rstrip("/")) resp = httpx.get(f"{base}/api/tags", timeout=5) resp.raise_for_status() names = [m["name"] for m in resp.json().get("models", [])] @@ -82,20 +80,20 @@ def list_models(): def get_settings(): return SettingsResponse( llm_enabled=markitdown_service.LLM_ACTIVE, - ollama_base_url=markitdown_service.OLLAMA_BASE_URL, - ollama_model=markitdown_service.OLLAMA_MODEL, + llm_base_url=markitdown_service.LLM_BASE_URL, + llm_model=markitdown_service.LLM_MODEL, cleanup_model=markitdown_service.CLEANUP_MODEL or None, default_prompt=markitdown_service.DEFAULT_CLEANUP_PROMPT, ) @router.post("/settings", response_model=SettingsResponse) def update_settings(req: SettingsRequest): - markitdown_service._init_llm(req.ollama_base_url or None, req.ollama_model) + markitdown_service._init_llm() markitdown_service.CLEANUP_MODEL = req.cleanup_model or "" return SettingsResponse( llm_enabled=markitdown_service.LLM_ACTIVE, - ollama_base_url=markitdown_service.OLLAMA_BASE_URL, - ollama_model=markitdown_service.OLLAMA_MODEL, + llm_base_url=markitdown_service.LLM_BASE_URL, + llm_model=markitdown_service.LLM_MODEL, cleanup_model=markitdown_service.CLEANUP_MODEL or None, default_prompt=markitdown_service.DEFAULT_CLEANUP_PROMPT, ) @@ -108,6 +106,66 @@ async def cleanup(req: CleanupRequest): return CleanupResponse(text=cleaned) +class PathRequest(BaseModel): + path: str + use_llm: bool = True + llm_prompt: str | None = None + + +@router.get("/browse") +def browse(path: str = Query("/workspace")): + import os + abs_path = os.path.realpath(path) + if not abs_path.startswith("/workspace"): + raise HTTPException(status_code=403, detail="Access denied") + if not os.path.exists(abs_path): + raise HTTPException(status_code=404, detail="Path not found") + if os.path.isfile(abs_path): + return {"type": "file", "path": abs_path, "name": os.path.basename(abs_path)} + entries = [] + try: + for name in sorted(os.listdir(abs_path)): + full = os.path.join(abs_path, name) + entries.append({ + "name": name, + "path": full, + "type": "dir" if os.path.isdir(full) else "file", + "ext": os.path.splitext(name)[1].lower() if os.path.isfile(full) else None, + }) + except PermissionError: + raise HTTPException(status_code=403, detail="Permission denied") + return {"type": "dir", "path": abs_path, "entries": entries} + + +@router.post("/convert-path") +async def convert_path(req: PathRequest, db: AsyncSession = Depends(get_db)): + import os + abs_path = os.path.realpath(req.path) + if not abs_path.startswith("/workspace"): + raise HTTPException(status_code=403, detail="Access denied") + if not os.path.exists(abs_path) or not os.path.isfile(abs_path): + raise HTTPException(status_code=404, detail="File not found") + record = await markitdown_service.convert_path(abs_path, db, use_llm=req.use_llm, llm_prompt=req.llm_prompt) + return record + + +class WriteFileRequest(BaseModel): + path: str + content: str + + +@router.post("/write-file") +def write_file(req: WriteFileRequest): + import os + abs_path = os.path.realpath(req.path) + if not abs_path.startswith("/workspace"): + raise HTTPException(status_code=403, detail="Access denied") + os.makedirs(os.path.dirname(abs_path), exist_ok=True) + with open(abs_path, "w", encoding="utf-8") as f: + f.write(req.content) + return {"path": abs_path, "bytes": len(req.content.encode())} + + @router.get("/history", response_model=list[ConversionRecord]) async def history(limit: int = 20, db: AsyncSession = Depends(get_db)): records = await markitdown_service.get_history(db, limit) diff --git a/markitdown-service/app/database.py b/services/markitdown-service/app/database.py similarity index 100% rename from markitdown-service/app/database.py rename to services/markitdown-service/app/database.py diff --git a/markitdown-service/app/models/ConvertModel.py b/services/markitdown-service/app/models/ConvertModel.py similarity index 100% rename from markitdown-service/app/models/ConvertModel.py rename to services/markitdown-service/app/models/ConvertModel.py diff --git a/services/markitdown-service/app/services/MarkitdownService.py b/services/markitdown-service/app/services/MarkitdownService.py new file mode 100644 index 0000000..0b098c6 --- /dev/null +++ b/services/markitdown-service/app/services/MarkitdownService.py @@ -0,0 +1,370 @@ +import os +import tempfile +import logging +from fastapi import UploadFile, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy import select +from markitdown import MarkItDown +from app.models.ConvertModel import Conversion + +logger = logging.getLogger(__name__) + +import openai as _openai + +from app.config import LLM_BASE_URL, LLM_MODEL, CLEANUP_MODEL, VISION_URL + +LLM_ACTIVE = False +_llm_client = None +md_plain = MarkItDown() +md = md_plain + + +def _init_llm() -> bool: + global LLM_ACTIVE, _llm_client, md + try: + client = _openai.OpenAI(base_url=LLM_BASE_URL, api_key="none") + _llm_client = client + md = MarkItDown(llm_client=client, llm_model=LLM_MODEL) + LLM_ACTIVE = True + logger.info("MarkItDown: LLM enabled via %s (model=%s)", LLM_BASE_URL, LLM_MODEL) + return True + except Exception as e: + logger.warning("MarkItDown: LLM init failed (%s)", e) + LLM_ACTIVE = False + return False + + +_init_llm() + +DEFAULT_CLEANUP_PROMPT = """You are a technical document formatter. \ +The text below was extracted from a multi-column PDF using OCR and is poorly structured: \ +columns are merged, headers are mixed with values, and content is out of order. + +Your task: +1. Identify the logical sections (e.g. PERFORMANCE, MEMORY, STORAGE, CONNECTIVITY, etc.) +2. Under each section, format specs as a clean two-column Markdown table: | Spec | Value | +3. Keep bullet lists where appropriate (e.g. ports, certifications) +4. Remove duplicate lines and OCR artifacts (e.g. stray "---", lone "|", empty rows) +5. Preserve all technical values exactly — do not paraphrase specs + +Return ONLY the cleaned Markdown. No code fences, no commentary, no preamble.""" + +import re as _re + +def llm_cleanup(text: str, prompt: str | None = None, model: str | None = None) -> str: + if not _llm_client or not text.strip(): + return text + try: + resp = _llm_client.chat.completions.create( + model=model or LLM_MODEL, + messages=[ + {"role": "system", "content": prompt or DEFAULT_CLEANUP_PROMPT}, + {"role": "user", "content": text}, + ], + temperature=0, + ) + result = resp.choices[0].message.content or text + result = _re.sub(r"^```(?:markdown)?\s*\n?", "", result.strip()) + result = _re.sub(r"\n?```\s*$", "", result.strip()) + return result.strip() or text + except Exception as e: + logger.warning("MarkItDown: cleanup failed (%s)", e) + return text + + +# ── Vision-LLM image OCR — gom về vision-service (container api-vision) ─────── +def _ocr_image_llm(mime: str, data: bytes) -> str: + """OCR a single image via the shared vision-service (OCRFlux) → Markdown/HTML. + '' on failure. Upscaling + prompt now live in vision-service.""" + import httpx + try: + resp = httpx.post( + f"{VISION_URL}/ocr", + files={"file": ("image", data, mime or "application/octet-stream")}, + timeout=300, + ) + resp.raise_for_status() + return resp.json().get("text", "") + except Exception as e: + logger.warning("MarkItDown: vision OCR failed (%s)", e) + return "" + + +def _ocr_cid_images(markdown: str, cid_map: dict[str, tuple[str, bytes]]) -> str: + """Replace MarkItDown ![..](cid:CID) image links with OCRFlux OCR of each image. + Falls back to *[Image]* when nothing usable is extracted.""" + if not cid_map or "cid:" not in markdown: + return markdown + def _sub(m): + entry = cid_map.get(m.group(1).strip()) + if not entry: + return "*[Image]*" + return _ocr_image_llm(*entry) or "*[Image]*" + return _re.sub(r"!\[[^\]]*\]\(cid:([^)]+)\)", _sub, markdown) + + + +ALLOWED_EXTENSIONS = { + "pdf", "docx", "xlsx", "pptx", + "html", "csv", "txt", "jpg", "jpeg", "png", "zip", "epub" +} + +YOUTUBE_PATTERN = _re.compile( + r"(https?://)?(www\.)?(youtube\.com/watch|youtu\.be/|youtube\.com/shorts/)" +) + + +async def convert_url( + url: str, + db: AsyncSession, + use_llm: bool = True, + llm_prompt: str | None = None, +) -> Conversion: + use_llm_now = LLM_ACTIVE and use_llm + if use_llm_now and llm_prompt: + try: + converter = MarkItDown( + llm_client=_llm_client, + llm_model=LLM_MODEL, + llm_prompt=llm_prompt, + ) + except TypeError: + converter = md + elif use_llm_now: + converter = md + else: + converter = md_plain + + try: + result = converter.convert(url) + actual_llm = use_llm_now + except Exception as llm_err: + if use_llm_now and ("500" in str(llm_err) or "InternalServerError" in type(llm_err).__name__): + logger.warning("MarkItDown: LLM failed (%s), retrying without LLM", llm_err) + result = md_plain.convert(url) + actual_llm = False + else: + raise HTTPException(status_code=500, detail=str(llm_err)) + + # Use last segment of URL as filename + slug = url.rstrip("/").split("/")[-1].split("?")[0] or "youtube" + filename = f"{slug}.md" + + try: + record = Conversion( + filename=filename, + file_type="youtube", + markdown=result.text_content, + llm_enabled=actual_llm, + ) + db.add(record) + await db.commit() + await db.refresh(record) + return record + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + + +def _allowed_file(filename: str) -> bool: + return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS + + +async def convert_file( + file: UploadFile, + db: AsyncSession, + use_llm: bool = True, + llm_prompt: str | None = None, +) -> Conversion: + if not _allowed_file(file.filename): + raise HTTPException( + status_code=422, + detail=f"File type not allowed. Allowed: {', '.join(sorted(ALLOWED_EXTENSIONS))}" + ) + + suffix = os.path.splitext(file.filename)[1] + file_type = suffix.lstrip(".").lower() + + with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: + tmp.write(await file.read()) + tmp_path = tmp.name + + # Choose converter: LLM only if enabled globally AND requested per-call + use_llm_now = LLM_ACTIVE and use_llm + + # If custom prompt provided, create a one-off MarkItDown with that prompt + if use_llm_now and llm_prompt: + try: + converter = MarkItDown( + llm_client=_llm_client, + llm_model=LLM_MODEL, + llm_prompt=llm_prompt, + ) + except TypeError: + # older markitdown versions may not support llm_prompt kwarg + converter = md + elif use_llm_now: + converter = md + else: + converter = md_plain + + try: + try: + result = converter.convert(tmp_path) + actual_llm = use_llm_now + except Exception as llm_err: + # LLM OOM / 500 — fallback to plain conversion without LLM + if use_llm_now and ("500" in str(llm_err) or "InternalServerError" in type(llm_err).__name__): + logger.warning("MarkItDown: LLM failed (%s), retrying without LLM", llm_err) + result = md_plain.convert(tmp_path) + actual_llm = False + else: + raise + record = Conversion( + filename=file.filename, + file_type=file_type, + markdown=result.text_content, + llm_enabled=actual_llm, + ) + db.add(record) + await db.commit() + await db.refresh(record) + return record + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + finally: + os.unlink(tmp_path) + + +def _is_email_file(path: str, file_type: str) -> bool: + if file_type in ("eml", "msg"): + return True + try: + with open(path, "rb") as f: + head = f.read(2048).decode("utf-8", errors="ignore") + email_headers = ( + "from:", "to:", "subject:", "date:", "mime-version:", "message-id:", + "received:", "return-path:", "delivered-to:", "envelope-to:", + "x-mailer:", "content-type:", "x-spam-", "reply-to:", + ) + lines = [l.lower() for l in head.splitlines()[:30]] + return sum(1 for l in lines if any(l.startswith(h) for h in email_headers)) >= 2 + except Exception: + return False + + +async def convert_path(path: str, db: AsyncSession, use_llm: bool = True, llm_prompt: str | None = None) -> Conversion: + import os, shutil + filename = os.path.basename(path) + file_type = os.path.splitext(filename)[1].lstrip(".").lower() + + # Standalone image → OCRFlux directly (bypass MarkItDown's caption prompt, + # which OCRFlux answers with raw JSON wrapped in "# Description:") + if file_type in {"png", "jpg", "jpeg", "gif", "bmp", "webp", "tiff", "tif"} \ + and LLM_ACTIVE and use_llm and _llm_client: + try: + with open(path, "rb") as _f: + _img = _f.read() + _mime = "image/png" if file_type == "png" else "image/jpeg" + _ocr = _ocr_image_llm(_mime, _img) + if _ocr: + record = Conversion(filename=filename, file_type=file_type, + markdown=_ocr, llm_enabled=True) + db.add(record); await db.commit(); await db.refresh(record) + return record + except Exception as e: + logger.warning("MarkItDown: OCRFlux image path failed (%s) — falling back", e) + + # Email files (with or without .eml extension) — extract HTML body → temp .html for MarkItDown + tmp_eml = None + actual_path = path + cid_map: dict[str, tuple[str, bytes]] = {} # cid → (mime, raw_bytes) for vision OCR + if _is_email_file(path, file_type): + import tempfile, email as _email, email.policy as _policy, re as _re + file_type = "eml" + try: + with open(path, "rb") as f: + msg = _email.message_from_binary_file(f, policy=_policy.compat32) + html_body = text_body = None + for part in msg.walk(): + ct = part.get_content_type() + payload = part.get_payload(decode=True) + if not payload: + continue + if ct.startswith("image/"): + cid = part.get("Content-ID", "").strip("<>") + if cid: + cid_map[cid] = (ct, payload) + continue + charset = part.get_content_charset() or "utf-8" + decoded = payload.decode(charset, errors="replace") + if ct == "text/html" and html_body is None: + html_body = decoded + elif ct == "text/plain" and text_body is None: + text_body = decoded + subject = msg.get("Subject", "") + sender = msg.get("From", "") + date = msg.get("Date", "") + header = f"

{subject}

From: {sender}
Date: {date}


" + body = html_body or (f"
{text_body}
" if text_body else "No body") + if html_body and "]*>)", r"\1" + header, html_body, count=1, flags=_re.IGNORECASE) + else: + html_out = f"{header}{body}" + tmp_eml = tempfile.NamedTemporaryFile(delete=False, suffix=".html", mode="w", encoding="utf-8") + tmp_eml.write(html_out) + tmp_eml.close() + actual_path = tmp_eml.name + except Exception as e: + logger.warning("Email parse failed, falling back to raw: %s", e) + + use_llm_now = LLM_ACTIVE and use_llm + if use_llm_now and llm_prompt: + try: + converter = MarkItDown(llm_client=_llm_client, llm_model=LLM_MODEL, llm_prompt=llm_prompt) + except TypeError: + converter = md + elif use_llm_now: + converter = md + else: + converter = md_plain + + try: + try: + result = converter.convert(actual_path) + actual_llm = use_llm_now + except Exception as llm_err: + if use_llm_now and ("500" in str(llm_err) or "InternalServerError" in type(llm_err).__name__): + logger.warning("MarkItDown: LLM failed (%s), retrying without LLM", llm_err) + result = md_plain.convert(path) + actual_llm = False + else: + raise HTTPException(status_code=500, detail=str(llm_err)) + content = result.text_content + # Email inline images: replace ![](cid:..) links with Vision-LLM OCR text + if cid_map and use_llm_now and "cid:" in content: + content = _ocr_cid_images(content, cid_map) + actual_llm = True + record = Conversion(filename=filename, file_type=file_type, markdown=content, llm_enabled=actual_llm) + db.add(record) + await db.commit() + await db.refresh(record) + return record + except HTTPException: + raise + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + finally: + if tmp_eml: + import os as _os + try: _os.unlink(tmp_eml.name) + except Exception: pass + + +async def get_history(db: AsyncSession, limit: int = 20) -> list[Conversion]: + result = await db.execute( + select(Conversion).order_by(Conversion.created_at.desc()).limit(limit) + ) + return result.scalars().all() diff --git a/markitdown-service/main.py b/services/markitdown-service/main.py similarity index 100% rename from markitdown-service/main.py rename to services/markitdown-service/main.py diff --git a/markitdown-service/requirements.txt b/services/markitdown-service/requirements.txt similarity index 100% rename from markitdown-service/requirements.txt rename to services/markitdown-service/requirements.txt diff --git a/services/unlimited-ocr-service/.dockerignore b/services/unlimited-ocr-service/.dockerignore new file mode 100644 index 0000000..e10b1f8 --- /dev/null +++ b/services/unlimited-ocr-service/.dockerignore @@ -0,0 +1,5 @@ +__pycache__ +*.pyc +*.pyo +.env +.git diff --git a/services/unlimited-ocr-service/Dockerfile b/services/unlimited-ocr-service/Dockerfile new file mode 100644 index 0000000..0916b82 --- /dev/null +++ b/services/unlimited-ocr-service/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.11-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update && apt-get install -y \ + libgl1 libglib2.0-0 \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY main.py . +COPY app/ ./app/ + +EXPOSE 8000 + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/services/unlimited-ocr-service/app/controllers/ConvertController.py b/services/unlimited-ocr-service/app/controllers/ConvertController.py new file mode 100644 index 0000000..78339af --- /dev/null +++ b/services/unlimited-ocr-service/app/controllers/ConvertController.py @@ -0,0 +1,114 @@ +from fastapi import APIRouter, UploadFile, File, Depends, Query +from sqlalchemy.ext.asyncio import AsyncSession +from app.models.ConvertModel import ConvertResponse, HealthResponse, ConversionRecord +from app.services import UnlimitedOcrService as ocr_service +from app.database import get_db +from pydantic import BaseModel + +router = APIRouter() + +SUPPORTED_INPUT_FORMATS = sorted([ + "pdf", "jpg", "jpeg", "png", "tiff", "tif", "bmp", "webp" +]) + + +class SettingsRequest(BaseModel): + ocr_base_url: str | None = None + ocr_api_key: str | None = None + ocr_model: str = "Unlimited-OCR" + ocr_dpi: int = 300 + + +class SettingsResponse(BaseModel): + ocr_enabled: bool + ocr_base_url: str | None + ocr_model: str + ocr_dpi: int + default_prompt: str | None = None + + +@router.get("/health", response_model=HealthResponse) +def health(): + return HealthResponse( + status="ok", + supported_formats=SUPPORTED_INPUT_FORMATS, + output_formats=["markdown"], + ocr_enabled=ocr_service.OCR_ACTIVE, + ocr_model=ocr_service.OCR_MODEL if ocr_service.OCR_ACTIVE else None, + ) + + +@router.get("/settings", response_model=SettingsResponse) +def get_settings(): + return SettingsResponse( + ocr_enabled=ocr_service.OCR_ACTIVE, + ocr_base_url=ocr_service.OCR_BASE_URL, + ocr_model=ocr_service.OCR_MODEL, + ocr_dpi=ocr_service.OCR_DPI, + default_prompt=ocr_service.DEFAULT_OCR_PROMPT, + ) + + +@router.post("/settings", response_model=SettingsResponse) +def update_settings(req: SettingsRequest): + ocr_service._init_ocr(req.ocr_base_url or None, req.ocr_model, req.ocr_api_key or "none") + ocr_service.OCR_DPI = req.ocr_dpi + return SettingsResponse( + ocr_enabled=ocr_service.OCR_ACTIVE, + ocr_base_url=ocr_service.OCR_BASE_URL, + ocr_model=ocr_service.OCR_MODEL, + ocr_dpi=ocr_service.OCR_DPI, + default_prompt=ocr_service.DEFAULT_OCR_PROMPT, + ) + + +@router.post("/convert", response_model=ConvertResponse) +async def convert( + file: UploadFile = File(...), + llm_prompt: str | None = Query(default=None, description="Custom OCR prompt"), + db: AsyncSession = Depends(get_db), +): + record = await ocr_service.convert_file(file, db, llm_prompt=llm_prompt) + return ConvertResponse( + id=record.id, + filename=record.filename, + output_format=record.output_format, + content=record.content, + page_count=record.page_count, + llm_enabled=record.llm_enabled, + ) + + +@router.get("/history", response_model=list[ConversionRecord]) +async def history(limit: int = 20, db: AsyncSession = Depends(get_db)): + records = await ocr_service.get_history(db, limit) + return [ + ConversionRecord( + id=r.id, + filename=r.filename, + file_type=r.file_type, + output_format=r.output_format, + page_count=r.page_count, + llm_enabled=r.llm_enabled, + created_at=str(r.created_at), + ) + for r in records + ] + + +@router.get("/conversions/{conversion_id}", response_model=ConvertResponse) +async def get_conversion(conversion_id: int, db: AsyncSession = Depends(get_db)): + record = await ocr_service.get_conversion(conversion_id, db) + return ConvertResponse( + id=record.id, + filename=record.filename, + output_format=record.output_format, + content=record.content, + page_count=record.page_count, + llm_enabled=record.llm_enabled, + ) + + +@router.delete("/conversions/{conversion_id}") +async def delete_conversion(conversion_id: int, db: AsyncSession = Depends(get_db)): + return await ocr_service.delete_conversion(conversion_id, db) diff --git a/services/unlimited-ocr-service/app/database.py b/services/unlimited-ocr-service/app/database.py new file mode 100644 index 0000000..3c9bc9c --- /dev/null +++ b/services/unlimited-ocr-service/app/database.py @@ -0,0 +1,18 @@ +import os +from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession +from sqlalchemy.orm import sessionmaker, DeclarativeBase + +DATABASE_URL = os.getenv("DATABASE_URL", "postgresql+asyncpg://admin:secret@db:5432/unlimited_ocr") +DATABASE_URL = DATABASE_URL.replace("postgresql://", "postgresql+asyncpg://") + +engine = create_async_engine(DATABASE_URL, echo=False) +AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) + + +class Base(DeclarativeBase): + pass + + +async def get_db(): + async with AsyncSessionLocal() as session: + yield session diff --git a/services/unlimited-ocr-service/app/models/ConvertModel.py b/services/unlimited-ocr-service/app/models/ConvertModel.py new file mode 100644 index 0000000..ef4ac74 --- /dev/null +++ b/services/unlimited-ocr-service/app/models/ConvertModel.py @@ -0,0 +1,50 @@ +from typing import Optional +from pydantic import BaseModel +from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, func +from app.database import Base + + +class Conversion(Base): + __tablename__ = "conversions" + + id = Column(Integer, primary_key=True, index=True) + filename = Column(String(255), nullable=False) + file_type = Column(String(50)) + output_format = Column(String(20), default="markdown") + content = Column(Text) + page_count = Column(Integer, nullable=True) + llm_enabled = Column(Boolean, default=True) + created_at = Column(DateTime, server_default=func.now()) + + +class ConvertResponse(BaseModel): + id: int + filename: str + output_format: str + content: str + page_count: Optional[int] = None + llm_enabled: bool = True + + class Config: + from_attributes = True + + +class ConversionRecord(BaseModel): + id: int + filename: str + file_type: Optional[str] = None + output_format: str + page_count: Optional[int] = None + llm_enabled: bool = True + created_at: str + + class Config: + from_attributes = True + + +class HealthResponse(BaseModel): + status: str + supported_formats: list[str] + output_formats: list[str] + ocr_enabled: bool = False + ocr_model: Optional[str] = None diff --git a/services/unlimited-ocr-service/app/services/UnlimitedOcrService.py b/services/unlimited-ocr-service/app/services/UnlimitedOcrService.py new file mode 100644 index 0000000..f12651b --- /dev/null +++ b/services/unlimited-ocr-service/app/services/UnlimitedOcrService.py @@ -0,0 +1,178 @@ +import os +import base64 +import logging +import tempfile +from fastapi import UploadFile, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy import select +import openai as _openai +from app.models.ConvertModel import Conversion + +logger = logging.getLogger(__name__) + +OCR_BASE_URL: str | None = os.getenv("OCR_BASE_URL") or None +OCR_API_KEY: str = os.getenv("OCR_API_KEY", "none") +OCR_MODEL: str = os.getenv("OCR_MODEL", "Unlimited-OCR") +OCR_DPI: int = int(os.getenv("OCR_DPI", "300")) + +_ocr_client: _openai.OpenAI | None = None +OCR_ACTIVE: bool = False + +DEFAULT_OCR_PROMPT = ( + "Please perform OCR on this image and extract all text content. " + "Format the output as clean Markdown, preserving headings, tables, lists, and logical structure. " + "Return ONLY the extracted content — no explanations, no preamble, no code fences." +) + + +def _init_ocr(base_url: str | None, model: str, api_key: str = "none") -> bool: + global OCR_BASE_URL, OCR_API_KEY, OCR_MODEL, _ocr_client, OCR_ACTIVE + if not base_url: + OCR_BASE_URL, OCR_MODEL, _ocr_client, OCR_ACTIVE = None, model, None, False + return False + try: + client = _openai.OpenAI(base_url=base_url, api_key=api_key or "none") + OCR_BASE_URL = base_url + OCR_API_KEY = api_key or "none" + OCR_MODEL = model + _ocr_client = client + OCR_ACTIVE = True + logger.info("Unlimited-OCR: enabled via %s (model=%s)", base_url, model) + return True + except Exception as e: + logger.warning("Unlimited-OCR: init failed (%s)", e) + OCR_ACTIVE = False + return False + + +_init_ocr(OCR_BASE_URL, OCR_MODEL, os.getenv("OCR_API_KEY", "none")) + + +def _ocr_image(image_bytes: bytes, prompt: str | None = None) -> str: + if not _ocr_client: + raise HTTPException(status_code=503, detail="Unlimited-OCR server not configured. Set OCR_BASE_URL.") + b64 = base64.b64encode(image_bytes).decode() + resp = _ocr_client.chat.completions.create( + model=OCR_MODEL, + messages=[{ + "role": "user", + "content": [ + {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}}, + {"type": "text", "text": prompt or DEFAULT_OCR_PROMPT}, + ], + }], + max_tokens=32768, + temperature=0, + ) + return resp.choices[0].message.content or "" + + +def _pdf_to_images(pdf_path: str, dpi: int = 300) -> list[bytes]: + try: + import fitz + except ImportError: + raise HTTPException(status_code=500, detail="PyMuPDF not installed") + doc = fitz.open(pdf_path) + scale = dpi / 72 + mat = fitz.Matrix(scale, scale) + images = [] + for page in doc: + pix = page.get_pixmap(matrix=mat) + images.append(pix.tobytes("jpeg")) + doc.close() + return images + + +ALLOWED_EXTENSIONS = {"pdf", "jpg", "jpeg", "png", "tiff", "tif", "bmp", "webp"} + + +def _allowed_file(filename: str) -> bool: + return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS + + +async def convert_file( + file: UploadFile, + db: AsyncSession, + llm_prompt: str | None = None, +) -> Conversion: + if not _allowed_file(file.filename): + raise HTTPException( + status_code=422, + detail=f"File type not allowed. Allowed: {', '.join(sorted(ALLOWED_EXTENSIONS))}" + ) + if not OCR_ACTIVE: + raise HTTPException( + status_code=503, + detail="Unlimited-OCR server not configured. Set OCR_BASE_URL in settings." + ) + + suffix = os.path.splitext(file.filename)[1] + file_type = suffix.lstrip(".").lower() + + with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: + tmp.write(await file.read()) + tmp_path = tmp.name + + try: + parts: list[str] = [] + page_count: int | None = None + + if file_type == "pdf": + images = _pdf_to_images(tmp_path, dpi=OCR_DPI) + page_count = len(images) + for i, img_bytes in enumerate(images, 1): + text = _ocr_image(img_bytes, prompt=llm_prompt) + parts.append(f"\n\n{text}" if page_count > 1 else text) + else: + with open(tmp_path, "rb") as f: + img_bytes = f.read() + parts.append(_ocr_image(img_bytes, prompt=llm_prompt)) + + content = "\n\n---\n\n".join(parts) + + record = Conversion( + filename=file.filename, + file_type=file_type, + output_format="markdown", + content=content, + page_count=page_count, + llm_enabled=True, + ) + db.add(record) + await db.commit() + await db.refresh(record) + return record + + except HTTPException: + await db.rollback() + raise + except Exception as e: + await db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + finally: + os.unlink(tmp_path) + + +async def get_history(db: AsyncSession, limit: int = 20) -> list[Conversion]: + result = await db.execute( + select(Conversion).order_by(Conversion.created_at.desc()).limit(limit) + ) + return result.scalars().all() + + +async def get_conversion(conversion_id: int, db: AsyncSession) -> Conversion: + result = await db.execute(select(Conversion).where(Conversion.id == conversion_id)) + record = result.scalar_one_or_none() + if not record: + raise HTTPException(status_code=404, detail="Conversion not found") + return record + + +async def delete_conversion(conversion_id: int, db: AsyncSession) -> dict: + result = await db.execute(select(Conversion).where(Conversion.id == conversion_id)) + record = result.scalar_one_or_none() + if not record: + raise HTTPException(status_code=404, detail="Conversion not found") + await db.delete(record) + await db.commit() + return {"message": f"Conversion {conversion_id} deleted"} diff --git a/services/unlimited-ocr-service/main.py b/services/unlimited-ocr-service/main.py new file mode 100644 index 0000000..e73e12e --- /dev/null +++ b/services/unlimited-ocr-service/main.py @@ -0,0 +1,29 @@ +from contextlib import asynccontextmanager +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +from app.controllers.ConvertController import router +from app.database import engine, Base + + +@asynccontextmanager +async def lifespan(app: FastAPI): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + yield + + +app = FastAPI( + title="Unlimited-OCR API", + version="1.0.0", + description="OCR service powered by Baidu Unlimited-OCR vision model via OpenAI-compatible API.", + lifespan=lifespan, +) + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_methods=["*"], + allow_headers=["*"], +) + +app.include_router(router) diff --git a/services/unlimited-ocr-service/requirements.txt b/services/unlimited-ocr-service/requirements.txt new file mode 100644 index 0000000..754127c --- /dev/null +++ b/services/unlimited-ocr-service/requirements.txt @@ -0,0 +1,8 @@ +fastapi +uvicorn +python-multipart +asyncpg +sqlalchemy[asyncio] +openai +pymupdf +Pillow diff --git a/services/vision-service/Dockerfile b/services/vision-service/Dockerfile new file mode 100644 index 0000000..a9a8b00 --- /dev/null +++ b/services/vision-service/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3.11-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update && apt-get install -y \ + libjpeg62-turbo \ + zlib1g \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY main.py . +COPY app/ ./app/ + +EXPOSE 8000 + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/services/vision-service/app/config.py b/services/vision-service/app/config.py new file mode 100644 index 0000000..a6e95c0 --- /dev/null +++ b/services/vision-service/app/config.py @@ -0,0 +1,20 @@ +"""Central config cho Vision OCR service — nơi DUY NHẤT giữ cấu hình OCRFlux. +Đổi base_url / model / prompt chỉ cần sửa file này (docling & markitdown gọi qua HTTP).""" +import os + +# llama-server (OCRFlux-3B) qua SSH tunnel; Docker reach host qua host.docker.internal +LLM_BASE_URL = os.getenv("LLM_BASE_URL", "http://host.docker.internal:11436/v1") +LLM_MODEL = os.getenv("LLM_MODEL", "ggml-org/Qwen2.5-VL-3B-Instruct-GGUF") + +# OCRFlux page-to-markdown prompt (model fine-tuned để trả lời đúng prompt này bằng JSON) +OCRFLUX_PROMPT = ( + "Below is the image of one page of a document. Just return the plain text " + "representation of this document as if you were reading it naturally.\n" + "ALL tables should be presented in HTML format.\n" + "Present all titles and headings as H1 headings.\n" + "Do not hallucinate.\n" +) + +# Ảnh nhỏ hơn ngưỡng này (px chiều rộng) sẽ được upscale để model đọc rõ email crop nhỏ +MIN_WIDTH_PX = int(os.getenv("VISION_MIN_WIDTH_PX", "1200")) +MAX_TOKENS = int(os.getenv("VISION_MAX_TOKENS", "1500")) diff --git a/services/vision-service/app/controllers/VisionController.py b/services/vision-service/app/controllers/VisionController.py new file mode 100644 index 0000000..c3d9cab --- /dev/null +++ b/services/vision-service/app/controllers/VisionController.py @@ -0,0 +1,38 @@ +from fastapi import APIRouter, UploadFile, File, Form +from pydantic import BaseModel + +from app.services import VisionService as vision_service + +router = APIRouter() + + +class HealthResponse(BaseModel): + status: str + llm_enabled: bool + llm_model: str | None = None + + +class OcrResponse(BaseModel): + text: str + llm_used: bool + + +@router.get("/health", response_model=HealthResponse) +def health(): + return HealthResponse( + status="ok", + llm_enabled=vision_service.LLM_ACTIVE, + llm_model=vision_service.LLM_MODEL if vision_service.LLM_ACTIVE else None, + ) + + +@router.post("/ocr", response_model=OcrResponse) +async def ocr( + file: UploadFile = File(...), + upscale: bool = Form(default=True), +): + """OCR 1 ảnh qua OCRFlux → Markdown/HTML. Trả text rỗng khi không đọc được.""" + data = await file.read() + mime = file.content_type or "image/png" + text = vision_service.ocr_image(data, mime=mime, upscale=upscale) + return OcrResponse(text=text, llm_used=bool(text) and vision_service.LLM_ACTIVE) diff --git a/services/vision-service/app/services/VisionService.py b/services/vision-service/app/services/VisionService.py new file mode 100644 index 0000000..0507fc5 --- /dev/null +++ b/services/vision-service/app/services/VisionService.py @@ -0,0 +1,88 @@ +"""Vision OCR — nơi DUY NHẤT gọi OCRFlux (Vision LLM). +Trước đây logic này bị copy y hệt trong docling-service và markitdown-service; +giờ gom về đây, hai service kia gọi qua HTTP (POST /ocr).""" +import base64 +import io +import json +import logging +import re + +import openai as _openai + +from app.config import LLM_BASE_URL, LLM_MODEL, OCRFLUX_PROMPT, MIN_WIDTH_PX, MAX_TOKENS + +logger = logging.getLogger(__name__) + +_llm_client = None +LLM_ACTIVE = False + + +def _init_llm() -> bool: + global _llm_client, LLM_ACTIVE + try: + _llm_client = _openai.OpenAI(base_url=LLM_BASE_URL, api_key="none") + LLM_ACTIVE = True + logger.info("Vision: LLM enabled via %s (model=%s)", LLM_BASE_URL, LLM_MODEL) + except Exception as e: # pragma: no cover - defensive + logger.warning("Vision: LLM init failed (%s)", e) + _llm_client = None + LLM_ACTIVE = False + return LLM_ACTIVE + + +_init_llm() + + +def _ocrflux_extract(content: str) -> str: + """OCRFlux trả JSON {natural_text: ...}; unwrap nó. Figure-only / rỗng → ''.""" + content = (content or "").strip() + if not content: + return "" + try: + txt = (json.loads(content).get("natural_text") or "").strip() + except Exception: + return content # không phải JSON (vd markdown thuần) — dùng nguyên + # trang chỉ có figure reference thì không có text hữu ích + if not txt or re.fullmatch(r"(?:[^<]*\s*)+", txt): + return "" + return txt + + +def _to_data_uri(data: bytes, mime: str, upscale: bool) -> str: + """Chuẩn hoá ảnh → data-URI. Upscale ảnh nhỏ để email crop nhỏ đọc rõ hơn.""" + try: + from PIL import Image + img = Image.open(io.BytesIO(data)).convert("RGB") + if upscale and img.width < MIN_WIDTH_PX: + scale = max(2, MIN_WIDTH_PX // img.width) + img = img.resize((img.width * scale, img.height * scale), Image.LANCZOS) + buf = io.BytesIO() + img.save(buf, "JPEG", quality=92) + return "data:image/jpeg;base64," + base64.standard_b64encode(buf.getvalue()).decode() + except Exception: + # PIL không đọc được → gửi nguyên bytes với mime khai báo + return f"data:{mime};base64," + base64.standard_b64encode(data).decode() + + +def ocr_image(data: bytes, mime: str = "image/png", upscale: bool = True) -> str: + """OCR 1 ảnh qua OCRFlux → Markdown/HTML. '' khi lỗi hoặc không có text.""" + if not _llm_client: + return "" + uri = _to_data_uri(data, mime, upscale) + try: + resp = _llm_client.chat.completions.create( + model=LLM_MODEL, + messages=[{ + "role": "user", + "content": [ + {"type": "image_url", "image_url": {"url": uri}}, + {"type": "text", "text": OCRFLUX_PROMPT}, + ], + }], + max_tokens=MAX_TOKENS, + temperature=0, + ) + return _ocrflux_extract(resp.choices[0].message.content) + except Exception as e: + logger.warning("Vision: OCR failed (%s)", e) + return "" diff --git a/services/vision-service/main.py b/services/vision-service/main.py new file mode 100644 index 0000000..ba37753 --- /dev/null +++ b/services/vision-service/main.py @@ -0,0 +1,14 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +from app.controllers.VisionController import router + +app = FastAPI(title="Vision OCR API", version="1.0.0") + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_methods=["*"], + allow_headers=["*"], +) + +app.include_router(router) diff --git a/services/vision-service/requirements.txt b/services/vision-service/requirements.txt new file mode 100644 index 0000000..82cb1f7 --- /dev/null +++ b/services/vision-service/requirements.txt @@ -0,0 +1,5 @@ +fastapi +uvicorn +python-multipart +openai +pillow