← Commit history

Publish IN-S42ATA characterization with datasheet-verified specs

AravK ·0909341a2a ·4mo ago ·parent bec445f
9 files changed +5828
IN-S42ATA-fpview.htmladded+790
@@ -0,0 +1,790 @@+<!DOCTYPE html>+<html lang="en">+<head>+<meta charset="UTF-8">+<meta name="viewport" content="width=device-width, initial-scale=1.0">+<title>IN-S42ATA</title>+<style>+  * { margin: 0; padding: 0; box-sizing: border-box; }+  body {+    background: #0d1117;+    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;+    overflow: hidden;+    height: 100vh;+    display: flex;+    flex-direction: column;+    color: #e6edf3;+  }++  .toolbar {+    display: flex;+    align-items: center;+    gap: 6px;+    padding: 8px 14px;+    background: #161b22;+    border-bottom: 1px solid #21262d;+    flex-shrink: 0;+    font-size: 13px;+  }+  .toolbar .title {+    font-weight: 600;+    color: #00b8b0;+    font-size: 15px;+    letter-spacing: 0.02em;+    overflow: hidden;+    text-overflow: ellipsis;+    white-space: nowrap;+    min-width: 0;+  }+  .toolbar .badge {+    font-size: 10px;+    padding: 2px 6px;+    border-radius: 4px;+    background: rgba(0, 184, 176, 0.12);+    color: #00b8b0;+    border: 1px solid rgba(0, 184, 176, 0.25);+    margin-left: 6px;+  }+  .toolbar .spacer { flex: 1; }+  .toolbar .sep {+    width: 1px;+    height: 22px;+    background: #21262d;+    margin: 0 4px;+    flex-shrink: 0;+  }+  .toolbar .btn-group {+    display: flex;+    align-items: center;+    gap: 2px;+    flex-shrink: 0;+  }+  .toolbar button {+    background: rgba(0, 184, 176, 0.12);+    border: 1px solid rgba(0, 184, 176, 0.25);+    border-radius: 4px;+    padding: 4px 10px;+    cursor: pointer;+    font-size: 12px;+    color: #8b949e;+    transition: all 0.15s;+  }+  .toolbar button:hover { background: rgba(0,184,176,0.18); color: #e6edf3; border-color: rgba(0,184,176,0.4); }+  .toolbar button:active { background: rgba(0,184,176,0.28); }+  .toolbar button.active { background: rgba(0,184,176,0.2); color: #00b8b0; border-color: rgba(0,184,176,0.4); }+  .toolbar .zoom-level {+    font-size: 11px;+    color: #8b949e;+    min-width: 44px;+    text-align: center;+    font-variant-numeric: tabular-nums;+  }++  .canvas-wrap {+    flex: 1;+    overflow: hidden;+    position: relative;+    cursor: grab;+    background-color: #0d1117;+    background-image:+      linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),+      linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);+    background-size: 20px 20px;+  }+  .canvas-wrap.dragging { cursor: grabbing; }+  .canvas-wrap.no-grid { background-image: none; }++  .canvas {+    position: absolute;+    transform-origin: 0 0;+  }+  .canvas svg { display: block; }++  .tooltip {+    display: none;+    position: fixed;+    background: #21262d;+    backdrop-filter: blur(12px);+    color: #e6edf3;+    padding: 10px 14px;+    border-radius: 8px;+    border: 1px solid rgba(0, 184, 176, 0.25);+    font-size: 12px;+    line-height: 1.6;+    pointer-events: none;+    z-index: 100;+    max-width: 280px;+    box-shadow: 0 8px 24px rgba(0,0,0,0.4);+  }+  .tooltip.visible { display: block; }+  .tooltip .tt-pad { font-weight: 700; font-size: 15px; color: #00e6dc; }+  .tooltip .tt-signal { color: #f0c040; font-size: 13px; margin-left: 6px; font-weight: 600; }+  .tooltip .tt-dims {+    display: inline-block;+    margin-top: 4px;+    padding: 2px 8px;+    border-radius: 4px;+    font-size: 11px;+    font-weight: 500;+    background: rgba(200,52,52,0.15);+    color: #C83434;+    border: 1px solid rgba(200,52,52,0.3);+  }+  .tooltip .tt-desc {+    margin-top: 6px;+    padding-top: 6px;+    border-top: 1px solid #21262d;+    color: #8b949e;+    font-size: 11px;+    line-height: 1.5;+  }+  .tooltip.sticky {+    pointer-events: auto;+    user-select: text;+    border-color: #00e6dc;+  }+  .tooltip .tt-hint {+    margin-top: 6px;+    font-size: 9px;+    color: #484f58;+    text-align: center;+  }+  .tooltip .tt-source {+    margin-top: 6px;+    padding-top: 4px;+    border-top: 1px solid #21262d;+    font-size: 9px;+  }+  .tooltip .tt-source-label { color: #8C6BF7; }+  .tooltip .tt-source a { color: #58a6ff; text-decoration: none; }+  .tooltip .tt-source a:hover { text-decoration: underline; }++  .edit-btn {+    position: absolute; top: 10px; right: 10px; z-index: 100;+    display: flex; align-items: center; gap: 6px;+    padding: 5px 10px;+    background: rgba(22,27,34,0.75);+    backdrop-filter: blur(8px);+    border: 1px solid rgba(140,107,247,0.2);+    border-radius: 6px;+    color: #8b949e; font-size: 11px;+    cursor: pointer; text-decoration: none;+    transition: all 0.2s; opacity: 0.7;+  }+  .edit-btn:hover {+    opacity: 1;+    background: rgba(140,107,247,0.12);+    border-color: rgba(140,107,247,0.4);+    color: #C5B3FF;+  }+  .edit-btn svg { width: 12px; height: 12px; }++  /* Regen prompt modal */+  .regen-overlay {+    display: none;+    position: fixed; inset: 0;+    background: rgba(0,0,0,0.6);+    z-index: 2000;+    align-items: center; justify-content: center;+  }+  .regen-overlay.visible { display: flex; }+  .regen-modal {+    background: #161b22;+    border: 1px solid #21262d;+    border-radius: 10px;+    padding: 20px 24px;+    max-width: 520px;+    width: 90%;+    box-shadow: 0 12px 40px rgba(0,0,0,0.5);+  }+  .regen-modal h3 {+    margin: 0 0 12px;+    font-size: 14px;+    font-weight: 600;+    color: #00b8b0;+  }+  .regen-modal .prompt-text {+    background: undefined;+    border: 1px solid #21262d;+    border-radius: 6px;+    padding: 12px 14px;+    font-size: 13px;+    line-height: 1.5;+    color: undefined;+    white-space: pre-wrap;+    word-break: break-word;+    user-select: all;+  }+  .regen-modal .modal-footer {+    display: flex;+    align-items: center;+    justify-content: space-between;+    margin-top: 14px;+  }+  .regen-modal .copy-status {+    font-size: 11px;+    color: #484f58;+  }+  .regen-modal .copy-status.copied { color: #00b8b0; }+  .regen-modal .modal-btns { display: flex; gap: 8px; }+  .regen-modal .modal-btns button {+    padding: 6px 14px;+    border-radius: 6px;+    border: 1px solid #21262d;+    background: #161b22;+    color: #8b949e;+    font-size: 12px;+    cursor: pointer;+  }+  .regen-modal .modal-btns button:hover { background: rgba(255,255,255,0.06); }+  .regen-modal .modal-btns .copy-btn {+    background: rgba(0,184,176,0.12);+    border-color: rgba(0,184,176,0.3);+    color: #00b8b0;+  }+  .regen-modal .modal-btns .copy-btn:hover { background: rgba(0,184,176,0.22); }++  /* Pad highlight */+  .pad-highlight {+    stroke: #00b8b0 !important;+    stroke-width: 0.15 !important;+    fill-opacity: 0.6 !important;+  }++  .bottom-panel {+    background: #161b22;+    border-top: 1px solid #21262d;+    flex-shrink: 0;+  }+  .info-row {+    display: flex;+    align-items: baseline;+    flex-wrap: wrap;+    gap: 1px 0;+    padding: 5px 8px;+    font-size: 10px;+  }+  .info-item {+    display: inline-flex;+    align-items: baseline;+    gap: 5px;+    padding: 1px 0;+    margin-right: 8px;+  }+  .info-item::after {+    content: '';+    display: inline-block;+    width: 1px;+    height: 10px;+    background: #21262d;+    margin-left: 8px;+    vertical-align: middle;+  }+  .info-item:last-child::after { display: none; }+  .info-item:last-child { margin-right: 0; }+  .info-label {+    color: #484f58;+    text-transform: uppercase;+    letter-spacing: 0.04em;+    font-size: 9px;+  }+  .info-value { color: #8b949e; }+  .info-value a { color: #00b8b0; text-decoration: none; }+  .info-value a:hover { text-decoration: underline; }+  .info-divider {+    height: 1px;+    background: #21262d;+    margin: 0 8px;+  }+  .coord-row {+    display: flex;+    align-items: center;+    justify-content: space-between;+    padding: 4px 8px;+    font-size: 10px;+    color: #8b949e;+    font-variant-numeric: tabular-nums;+  }+</style>+</head>+<body>++<div class="toolbar">+  <span class="title">IN-S42ATA</span>+  <span class="badge">Footprint</span>+  <span class="badge" style="background:rgba(248,81,73,0.15);color:#f85149;border-color:rgba(248,81,73,0.3);">Local Render</span>+  <div class="spacer"></div>+  <div class="btn-group">+    <button onclick="zoomOut()">&#x2212;</button>+    <span class="zoom-level" id="zoom-level">100%</span>+    <button onclick="zoomIn()">&#x2b;</button>+  </div>+  <div class="sep"></div>+  <button onclick="zoomFit()">Fit</button>+  <button onclick="zoomReset()">1:1</button>+  <button onclick="toggleGrid()" id="grid-btn" class="active">Grid</button>+  <button onclick="toggleSolder()" id="solder-btn" class="active" title="250µm solder jet blobs for Adom InstaPCB paste jetting. Adom uses this placement data for its jetting sequence. Blob count, position, and size (250–600µm) are adjustable. Placement accuracy: ±50µm.">Solder</button>+  <button onclick="toggleLabels()" id="labels-btn">Labels</button>+  <div class="sep"></div>+  <button onclick="showRegenPrompt()" id="regen-btn" title="Show regeneration prompt to paste into Claude Code">Regen</button>+</div>++<div class="regen-overlay" id="regen-overlay" onclick="if(event.target===this)closeRegenPrompt()">+  <div class="regen-modal">+    <h3>Regeneration Prompt</h3>+    <div class="prompt-text" id="regen-prompt-text"></div>+    <div class="modal-footer">+      <span class="copy-status" id="regen-copy-status">Copied to clipboard</span>+      <div class="modal-btns">+        <button onclick="closeRegenPrompt()">Close</button>+        <button class="copy-btn" onclick="copyRegenText()">Copy</button>+      </div>+    </div>+  </div>+</div>++<div class="canvas-wrap" id="canvas-wrap">+  <div class="canvas" id="canvas">+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"><text x="5" y="5" text-anchor="middle" font-size="1" fill="#888">No geometry</text></svg>+  </div>+  <a class="edit-btn" href="https://coder.john-service-wiki-a054078430ce38e4.containers.adom.inc/proxy/8785/wiki/components/in-s42ata/edit?field=content" target="_blank" title="Suggest corrections on Adom Wiki">+    <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">+      <path d="M11.5 1.5l3 3L5 14H2v-3L11.5 1.5z"/>+      <path d="M9.5 3.5l3 3"/>+    </svg>+    Suggest edit+  </a>+</div>++<div class="tooltip" id="tooltip"></div>++<div class="bottom-panel">+  <div class="info-row">+    <div class="info-item"><span class="info-label">Pads</span><span class="info-value">0</span></div>+  </div>+  <div class="info-divider"></div>+  <div class="coord-row">+    <span id="cursor-pos">X: 0.00 &nbsp; Y: 0.00 mm</span>+  </div>+</div>++<script>+  const pads = [];+  const svgW = 10;+  const svgH = 10;+  const svgVbX = 0;+  const svgVbY = 0;+  const offsetX = 0;+  const offsetY = 0;+  const datasheetUrl = "";+  const _partName = "";+  const _fpName = "IN-S42ATA";+  const _kicadModPath = "/home/adom/project/project-content/schematics/footprints/IN-S42ATA/IN-S42ATA.kicad_mod";++  const wrap = document.getElementById('canvas-wrap');+  const canvas = document.getElementById('canvas');+  const tooltip = document.getElementById('tooltip');+  const zoomLabel = document.getElementById('zoom-level');+  const cursorPos = document.getElementById('cursor-pos');++  let scale = 1, panX = 0, panY = 0;+  let isDragging = false;+  let dragStartX, dragStartY, panStartX, panStartY;+  let gridVisible = true;++  const MM_TO_PX = 3.78;+  const svgPxW = svgW * MM_TO_PX;+  const svgPxH = svgH * MM_TO_PX;++  const svgEl = canvas.querySelector('svg');+  if (svgEl) {+    svgEl.setAttribute('width', svgPxW + 'px');+    svgEl.setAttribute('height', svgPxH + 'px');+  }++  function updateTransform() {+    canvas.style.transform = 'translate(' + panX + 'px,' + panY + 'px) scale(' + scale + ')';+    zoomLabel.textContent = Math.round(scale * 100) + '%';+  }++  function zoomFit() {+    const ww = wrap.clientWidth, wh = wrap.clientHeight;+    if (ww === 0 || wh === 0) return; // iframe not laid out yet — ResizeObserver will retry+    const margin = 24;+    // Use getBBox() to fit to visible content only (excludes hidden labels)+    let fitW = svgPxW, fitH = svgPxH, fitX = 0, fitY = 0;+    if (svgEl) {+      try {+        const bb = svgEl.getBBox();+        if (bb.width > 0 && bb.height > 0) {+          fitW = bb.width * MM_TO_PX;+          fitH = bb.height * MM_TO_PX;+          fitX = (bb.x - svgVbX) * MM_TO_PX;+          fitY = (bb.y - svgVbY) * MM_TO_PX;+        }+      } catch {}+    }+    scale = Math.min((ww - margin * 2) / fitW, (wh - margin * 2) / fitH, 100);+    panX = (ww - fitW * scale) / 2 - fitX * scale;+    panY = (wh - fitH * scale) / 2 - fitY * scale;+    updateTransform();+  }++  function zoomReset() {+    scale = 1;+    panX = (wrap.clientWidth - svgPxW) / 2;+    panY = (wrap.clientHeight - svgPxH) / 2;+    updateTransform();+  }++  function zoomIn() { zoomAt(wrap.clientWidth / 2, wrap.clientHeight / 2, 1.25); }+  function zoomOut() { zoomAt(wrap.clientWidth / 2, wrap.clientHeight / 2, 0.8); }++  function zoomAt(cx, cy, factor) {+    const ns = Math.max(0.1, Math.min(scale * factor, 40));+    const r = ns / scale;+    panX = cx - (cx - panX) * r;+    panY = cy - (cy - panY) * r;+    scale = ns;+    updateTransform();+  }++  function toggleGrid() {+    gridVisible = !gridVisible;+    wrap.classList.toggle('no-grid', !gridVisible);+    document.getElementById('grid-btn').classList.toggle('active', gridVisible);+  }++  // ── Solder blob jetting layer ──+  let solderVisible = true;+  let solderGroup = null;++  function setupSolderBlobs() {+    if (!svgEl) return;++    solderGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g');+    solderGroup.setAttribute('id', 'solder-layer');+    solderGroup.style.display = '';+    solderGroup.style.pointerEvents = 'none';++    const BLOB_RADIUS = 0.125;   // 250µm diameter / 2+    const BLOB_SPACING = 0.25;   // center-to-center (blobs touching — fills the pad)++    pads.forEach(pad => {+      if (pad.mountType !== 'smd') return;++      const cx = pad.x + offsetX;+      const cy = pad.y + offsetY;+      const rot = (pad.rotation || 0) * Math.PI / 180;++      // Each axis computed independently: if pad is wide enough, grid; otherwise single centered blob+      const inset = BLOB_RADIUS;  // blob edges align with pad edges — no overhang+      const availW = pad.width - 2 * inset;+      const availH = pad.height - 2 * inset;++      // At minimum 1 blob per axis — even narrow pads get a centered row/column+      const nCols = availW > 0 ? Math.max(1, Math.floor(availW / BLOB_SPACING) + 1) : 1;+      const nRows = availH > 0 ? Math.max(1, Math.floor(availH / BLOB_SPACING) + 1) : 1;+      const spanW = availW > 0 ? availW : 0;+      const spanH = availH > 0 ? availH : 0;+      const stepX = nCols > 1 ? spanW / (nCols - 1) : 0;+      const stepY = nRows > 1 ? spanH / (nRows - 1) : 0;+      const startX = -spanW / 2;+      const startY = -spanH / 2;+      const cosR = Math.cos(rot);+      const sinR = Math.sin(rot);++      for (let row = 0; row < nRows; row++) {+        for (let col = 0; col < nCols; col++) {+          const lx = startX + col * stepX;+          const ly = startY + row * stepY;+          const rx = lx * cosR - ly * sinR;+          const ry = lx * sinR + ly * cosR;++          const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');+          circle.setAttribute('cx', (cx + rx).toFixed(4));+          circle.setAttribute('cy', (cy + ry).toFixed(4));+          circle.setAttribute('r', BLOB_RADIUS.toFixed(4));+          circle.setAttribute('fill', '#D4AA70');+          circle.setAttribute('fill-opacity', '0.75');+          circle.setAttribute('stroke', '#B8860B');+          circle.setAttribute('stroke-width', '0.015');+          solderGroup.appendChild(circle);+        }+      }+    });++    svgEl.appendChild(solderGroup);+  }++  function toggleSolder() {+    solderVisible = !solderVisible;+    if (solderGroup) solderGroup.style.display = solderVisible ? '' : 'none';+    document.getElementById('solder-btn').classList.toggle('active', solderVisible);+  }++  // ── Label visibility toggle ──+  let labelsVisible = false;+  let labelGroups = [];++  function setupLabelToggle() {+    if (!svgEl) return;+    // KiCad SVGs render labels as <g> containing <text> + <g class="stroked-text">+    // Find all <text> elements and collect their parent <g> groups+    svgEl.querySelectorAll('text').forEach(txt => {+      const parent = txt.parentElement;+      if (parent && parent.tagName === 'g' && !labelGroups.includes(parent)) {+        labelGroups.push(parent);+        parent.style.display = 'none';  // hidden by default+      }+    });+  }++  function toggleLabels() {+    labelsVisible = !labelsVisible;+    labelGroups.forEach(g => g.style.display = labelsVisible ? '' : 'none');+    document.getElementById('labels-btn').classList.toggle('active', labelsVisible);+  }++  // ── Regen prompt modal ──+  let _regenPrompt = '';+  function buildRegenPrompt() {+    const name = _partName || _fpName;+    const folder = _kicadModPath.replace(/\/[^/]+$/, '');+    return 'Regenerate the FpView for ' + name + '.\n\n'+      + 'Footprint: ' + _kicadModPath + '\n'+      + 'Metadata: ' + folder + '/\n\n'+      + 'Re-export the SVG via the KiCad service, regenerate the FpView HTML at the same path, '+      + 'and re-display it.';+  }+  function showRegenPrompt() {+    _regenPrompt = buildRegenPrompt();+    document.getElementById('regen-prompt-text').textContent = _regenPrompt;+    document.getElementById('regen-overlay').classList.add('visible');+    const status = document.getElementById('regen-copy-status');+    navigator.clipboard.writeText(_regenPrompt).then(() => {+      status.textContent = 'Copied to clipboard';+      status.classList.add('copied');+    }).catch(() => {+      status.textContent = 'Click Copy to copy';+      status.classList.remove('copied');+    });+  }+  function closeRegenPrompt() {+    document.getElementById('regen-overlay').classList.remove('visible');+  }+  function copyRegenText() {+    navigator.clipboard.writeText(_regenPrompt).then(() => {+      const status = document.getElementById('regen-copy-status');+      status.textContent = 'Copied to clipboard';+      status.classList.add('copied');+    });+  }++  wrap.addEventListener('wheel', (e) => {+    e.preventDefault();+    const r = wrap.getBoundingClientRect();+    zoomAt(e.clientX - r.left, e.clientY - r.top, e.deltaY < 0 ? 1.12 : 0.89);+  }, { passive: false });++  wrap.addEventListener('mousedown', (e) => {+    if (e.button !== 0) return;+    isDragging = true;+    dragStartX = e.clientX; dragStartY = e.clientY;+    panStartX = panX; panStartY = panY;+    wrap.classList.add('dragging');+  });+  window.addEventListener('mousemove', (e) => {+    const r = wrap.getBoundingClientRect();+    // Convert screen coords to kicad_mod coords+    const svgX = (e.clientX - r.left - panX) / scale / MM_TO_PX;+    const svgY = (e.clientY - r.top - panY) / scale / MM_TO_PX;+    const kicadX = svgX - offsetX;+    const kicadY = svgY - offsetY;+    cursorPos.innerHTML = 'X: ' + kicadX.toFixed(2) + ' &nbsp; Y: ' + kicadY.toFixed(2) + ' mm';+    if (!isDragging) return;+    panX = panStartX + (e.clientX - dragStartX);+    panY = panStartY + (e.clientY - dragStartY);+    updateTransform();+  });+  window.addEventListener('mouseup', () => { isDragging = false; wrap.classList.remove('dragging'); });++  // ── Pad hit zones ──+  let highlightedRects = [];+  let stickyPad = null;++  function setupPadHitZones() {+    if (!svgEl) return;+    pads.forEach(pad => {+      const cx = pad.x + offsetX;+      const cy = pad.y + offsetY;+      const rx = cx - pad.width / 2;+      const ry = cy - pad.height / 2;++      const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');+      rect.setAttribute('x', rx);+      rect.setAttribute('y', ry);+      rect.setAttribute('width', pad.width);+      rect.setAttribute('height', pad.height);+      rect.setAttribute('fill', 'transparent');+      rect.setAttribute('stroke', 'none');+      rect.setAttribute('data-pad', pad.number);+      rect.style.cursor = 'pointer';+      rect.style.pointerEvents = 'all';+      svgEl.appendChild(rect);++      rect.addEventListener('mouseenter', (ev) => showPadTooltip(ev.clientX, ev.clientY, pad, rect));+      rect.addEventListener('mousemove', (ev) => showPadTooltip(ev.clientX, ev.clientY, pad, rect));+      rect.addEventListener('mouseleave', () => hidePadTooltip(rect));+      rect.addEventListener('click', (ev) => { ev.stopPropagation(); handlePadClick(pad, rect); });+    });+  }++  function buildTooltipHtml(pad) {+    let html = '<div><span class="tt-pad">Pad ' + pad.number + '</span>';+    if (pad.signal) html += '<span class="tt-signal">' + pad.signal + '</span>';+    html += '</div>';+    html += '<div><span class="tt-dims">' + pad.width.toFixed(3) + ' × ' + pad.height.toFixed(3) + ' mm · ' + pad.shape + ' · ' + pad.mountType + '</span></div>';+    if (pad.desc) {+      html += '<div class="tt-desc">' + pad.desc + '</div>';+    }+    if (datasheetUrl) {+      html += '<div class="tt-source"><span class="tt-source-label">Source:</span> <a href="' + datasheetUrl + '" target="_blank">Datasheet</a></div>';+    }+    html += '<div class="tt-hint">click to pin · select text</div>';+    return html;+  }++  function positionTooltip(x, y) {+    // Render first to measure+    tooltip.style.left = '0px';+    tooltip.style.top = '0px';+    const ttRect = tooltip.getBoundingClientRect();+    const ttW = ttRect.width, ttH = ttRect.height;+    const pad = 14;+    let tx = x + 14, ty = y + 14;+    if (tx + ttW > window.innerWidth - pad) tx = x - ttW - 14;+    if (ty + ttH > window.innerHeight - pad) ty = y - ttH - 14;+    tx = Math.max(pad, Math.min(tx, window.innerWidth - ttW - pad));+    ty = Math.max(pad, Math.min(ty, window.innerHeight - ttH - pad));+    tooltip.style.left = tx + 'px';+    tooltip.style.top = ty + 'px';+  }++  function showPadTooltip(x, y, pad, rect) {+    if (stickyPad !== null) return; // suppress hover while sticky++    clearHighlight();+    rect.setAttribute('stroke', '#00b8b1');+    rect.setAttribute('stroke-width', '0.12');+    rect.setAttribute('fill', 'rgba(0,184,177,0.2)');+    highlightedRects.push(rect);++    tooltip.innerHTML = buildTooltipHtml(pad);+    tooltip.classList.add('visible');+    tooltip.classList.remove('sticky');+    positionTooltip(x, y);+  }++  function hidePadTooltip(rect) {+    if (stickyPad !== null) return; // don't hide while sticky+    tooltip.classList.remove('visible');+    clearHighlight();+  }++  function handlePadClick(pad, rect) {+    if (stickyPad === pad.number) {+      // Unpin+      stickyPad = null;+      tooltip.classList.remove('sticky', 'visible');+      clearHighlight();+    } else {+      // Pin this pad+      stickyPad = pad.number;+      clearHighlight();+      rect.setAttribute('stroke', '#00b8b1');+      rect.setAttribute('stroke-width', '0.12');+      rect.setAttribute('fill', 'rgba(0,184,177,0.2)');+      highlightedRects.push(rect);+      tooltip.innerHTML = buildTooltipHtml(pad);+      tooltip.classList.add('visible', 'sticky');+      // Remove hint when sticky+      const hint = tooltip.querySelector('.tt-hint');+      if (hint) hint.style.display = 'none';+    }+  }++  // Dismiss sticky tooltip on click outside+  document.addEventListener('click', (e) => {+    if (stickyPad !== null && !tooltip.contains(e.target)) {+      stickyPad = null;+      tooltip.classList.remove('sticky', 'visible');+      clearHighlight();+    }+  });++  function clearHighlight() {+    highlightedRects.forEach(r => {+      r.setAttribute('fill', 'transparent');+      r.setAttribute('stroke', 'none');+    });+    highlightedRects = [];+  }++  wrap.addEventListener('mouseleave', () => {+    if (stickyPad !== null) return;+    tooltip.classList.remove('visible');+    clearHighlight();+  });++  // Keyboard+  window.addEventListener('keydown', (e) => {+    if (e.key === 'Escape') closeRegenPrompt();+    else if (e.key === 'f' || e.key === 'F') zoomFit();+    else if (e.key === '1') zoomReset();+    else if (e.key === '+' || e.key === '=') zoomIn();+    else if (e.key === '-') zoomOut();+    else if (e.key === 'g' || e.key === 'G') toggleGrid();+    else if (e.key === 's' || e.key === 'S') toggleSolder();+    else if (e.key === 'l' || e.key === 'L') toggleLabels();+  });++  // Screenshot capture via postMessage (parent viewer sends mgmt_capture_request)+  window.addEventListener('message', (e) => {+    if (e.data?.type === 'mgmt_capture_request' && svgEl) {+      const xml = new XMLSerializer().serializeToString(svgEl);+      parent.postMessage({+        type: 'mgmt_canvas_capture',+        _reqId: e.data._reqId,+        svgXml: xml,+        svgWidth: svgW,+        svgHeight: svgH,+        bgColor: 'undefined',+      }, '*');+    }+  });++  // Auto-fit on window/container resize+  new ResizeObserver(() => zoomFit()).observe(wrap);+  window.addEventListener('resize', () => requestAnimationFrame(zoomFit));++  // Init — set up layers then fit. Use multiple retries because srcdoc iframes+  // may not have layout dimensions during the first requestAnimationFrame.+  let inited = false;+  function init() {+    if (inited) return;+    setupLabelToggle();+    setupSolderBlobs();+    setupPadHitZones();+    inited = true;+  }+  function initAndFit() {+    init();+    zoomFit();+  }+  requestAnimationFrame(initAndFit);+  setTimeout(initAndFit, 100);+  setTimeout(initAndFit, 500);+</script>+</body>+</html>\ No newline at end of file
IN-S42ATA-symview.htmladded+1292
@@ -0,0 +1,1292 @@+<!DOCTYPE html>+<html lang="en">+<head>+<meta charset="UTF-8">+<meta name="viewport" content="width=device-width, initial-scale=1.0">+<title>IN-S42ATA</title>+<style>+  * { margin: 0; padding: 0; box-sizing: border-box; }+  body {+    background: #0d1117;+    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;+    overflow: hidden;+    height: 100vh;+    display: flex;+    flex-direction: column;+    color: #e6edf3;+  }++  /* ── Top toolbar ── */+  .toolbar {+    display: flex;+    align-items: center;+    gap: 6px;+    padding: 8px 14px;+    background: #161b22;+    border-bottom: 1px solid #21262d;+    flex-shrink: 0;+    font-size: 13px;+  }+  .toolbar .title {+    font-weight: 600;+    color: #00b8b0;+    font-size: 15px;+    letter-spacing: 0.02em;+  }+  .toolbar .spacer { flex: 1; }+  .toolbar .sep {+    width: 1px;+    height: 22px;+    background: #21262d;+    margin: 0 4px;+    flex-shrink: 0;+  }+  .toolbar .btn-group {+    display: flex;+    align-items: center;+    gap: 2px;+    flex-shrink: 0;+  }+  .toolbar button {+    background: rgba(0, 184, 176, 0.12);+    border: 1px solid rgba(0, 184, 176, 0.25);+    border-radius: 4px;+    padding: 4px 10px;+    cursor: pointer;+    font-size: 12px;+    color: #8b949e;+    transition: all 0.15s;+  }+  .toolbar button:hover { background: rgba(0,184,176,0.18); color: #e6edf3; border-color: rgba(0,184,176,0.4); }+  .toolbar button:active { background: rgba(0,184,176,0.28); }+  .toolbar button.active { background: rgba(0,184,176,0.2); color: #00b8b0; border-color: rgba(0,184,176,0.4); }+  .toolbar .zoom-level {+    font-size: 11px;+    color: #8b949e;+    min-width: 44px;+    text-align: center;+    font-variant-numeric: tabular-nums;+  }++  /* ── Canvas (dark background) ── */+  .canvas-wrap {+    flex: 1;+    overflow: hidden;+    position: relative;+    cursor: grab;+    background-color: #0d1117;+    background-image:+      radial-gradient(ellipse at 50% 50%, rgba(0,184,176,0.03) 0%, transparent 70%),+      linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),+      linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);+    background-size: 100% 100%, 20px 20px, 20px 20px;+  }+  .canvas-wrap.dragging { cursor: grabbing; }+  .canvas-wrap.no-grid {+    background-image: radial-gradient(ellipse at 50% 50%, rgba(0,184,176,0.03) 0%, transparent 70%);+    background-size: 100% 100%;+  }++  .canvas {+    position: absolute;+    transform-origin: 0 0;+  }+  .canvas svg { display: block; }++  /* ── Tooltip ── */+  .tooltip {+    display: none;+    position: fixed;+    background: #21262d;+    backdrop-filter: blur(16px);+    -webkit-backdrop-filter: blur(16px);+    color: #e6edf3;+    padding: 10px 14px;+    border-radius: 10px;+    border: 1px solid rgba(0, 184, 176, 0.25);+    font-size: 12px;+    line-height: 1.6;+    pointer-events: none;+    user-select: none;+    z-index: 100;+    max-width: 300px;+    box-shadow: 0 8px 24px rgba(0,0,0,0.4);+    transition: border-color 0.15s;+  }+  .tooltip.visible { display: block; }+  .tooltip.sticky {+    pointer-events: auto;+    user-select: text;+    border-color: #00e6dc;+    box-shadow: 0 8px 32px rgba(0,184,176,0.15), 0 8px 24px rgba(0,0,0,0.4);+  }+  .tooltip .tt-name { font-weight: 700; font-size: 15px; color: #00e6dc; }+  .tooltip .tt-pin { color: #8b949e; font-size: 11px; margin-left: 4px; }+  .tooltip .tt-type {+    display: inline-block;+    margin-top: 4px;+    padding: 2px 8px;+    border-radius: 4px;+    font-size: 11px;+    font-weight: 500;+  }+  .tooltip .tt-desc {+    margin-top: 6px;+    padding-top: 6px;+    border-top: 1px solid #21262d;+    color: #8b949e;+    font-size: 11px;+    line-height: 1.5;+  }+  .tooltip .tt-source {+    margin-top: 6px;+    padding-top: 6px;+    border-top: 1px solid #21262d;+    font-size: 10px;+    color: #484f58;+  }+  .tooltip .tt-source a { color: #00b8b0; text-decoration: none; }+  .tooltip .tt-source a:hover { text-decoration: underline; }+  .tooltip .tt-source-label { color: #E6B450; font-weight: 600; }+  .tooltip .tt-hint {+    margin-top: 6px;+    font-size: 9px;+    color: #484f58;+    font-style: italic;+  }+  .tooltip .tt-group-name { font-weight: 700; font-size: 14px; color: #E6B450; }+  .tooltip .tt-group-badge {+    display: inline-block;+    margin-top: 4px;+    padding: 2px 8px;+    border-radius: 4px;+    font-size: 11px;+    font-weight: 500;+    background: rgba(230,180,80,0.15);+    color: #FFD180;+    border: 1px solid rgba(230,180,80,0.3);+  }++  /* ── Wiki edit button ── */+  .edit-btn {+    position: absolute; top: 10px; right: 10px; z-index: 100;+    display: flex; align-items: center; gap: 6px;+    padding: 5px 10px;+    background: rgba(22,27,34,0.75);+    backdrop-filter: blur(8px);+    border: 1px solid rgba(230,180,80,0.2);+    border-radius: 6px;+    color: #8b949e; font-size: 11px;+    cursor: pointer; text-decoration: none;+    transition: all 0.2s; opacity: 0.7;+  }+  .edit-btn:hover {+    opacity: 1;+    background: rgba(230,180,80,0.12);+    border-color: rgba(230,180,80,0.4);+    color: #FFD180;+  }+  .edit-btn svg { width: 12px; height: 12px; }++  /* Regen prompt modal */+  .regen-overlay {+    display: none;+    position: fixed; inset: 0;+    background: rgba(0,0,0,0.6);+    z-index: 2000;+    align-items: center; justify-content: center;+  }+  .regen-overlay.visible { display: flex; }+  .regen-modal {+    background: undefined;+    border: 1px solid undefined;+    border-radius: 10px;+    padding: 20px 24px;+    max-width: 520px;+    width: 90%;+    box-shadow: 0 12px 40px rgba(0,0,0,0.5);+  }+  .regen-modal h3 {+    margin: 0 0 12px;+    font-size: 14px;+    font-weight: 600;+    color: undefined;+  }+  .regen-modal .prompt-text {+    background: undefined;+    border: 1px solid undefined;+    border-radius: 6px;+    padding: 12px 14px;+    font-size: 13px;+    line-height: 1.5;+    color: undefined;+    white-space: pre-wrap;+    word-break: break-word;+    user-select: all;+  }+  .regen-modal .modal-footer {+    display: flex;+    align-items: center;+    justify-content: space-between;+    margin-top: 14px;+  }+  .regen-modal .copy-status {+    font-size: 11px;+    color: undefined;+  }+  .regen-modal .copy-status.copied { color: undefined; }+  .regen-modal .modal-btns { display: flex; gap: 8px; }+  .regen-modal .modal-btns button {+    padding: 6px 14px;+    border-radius: 6px;+    border: 1px solid undefined;+    background: undefined;+    color: undefined;+    font-size: 12px;+    cursor: pointer;+  }+  .regen-modal .modal-btns button:hover { background: rgba(255,255,255,0.06); }+  .regen-modal .modal-btns .copy-btn {+    background: rgba(0,230,220,0.12);+    border-color: rgba(0,230,220,0.3);+    color: undefined;+  }+  .regen-modal .modal-btns .copy-btn:hover { background: rgba(0,230,220,0.22); }++  /* Pin highlight on hover */+  .canvas svg .pin-highlight path, .canvas svg path.pin-highlight { stroke: #00e6dc !important; }+  .canvas svg .group-highlight path { stroke: #FFD180 !important; }++  /* Discrete pin label highlight (injected <text> elements) */+  .canvas svg text.pin-label-highlight { fill: #00e6dc !important; }+  .canvas svg text.pin-num-highlight { fill: #00e6dc !important; }++  /* Discrete pin hit zone outline (visible on hover) */+  .canvas svg rect.pin-hit-zone { fill: rgba(0,230,220,0.06); stroke: #00e6dc; stroke-width: 0.12; stroke-dasharray: 0.3,0.2; stroke-opacity: 0.5; pointer-events: all; cursor: pointer; rx: 0.3; }+  .canvas svg rect.pin-hit-zone:hover { fill: rgba(0,230,220,0.12); stroke-opacity: 0.8; stroke-width: 0.15; }++  /* ── Bottom panel ── */+  .bottom-panel {+    background: #161b22;+    border-top: 1px solid #21262d;+    flex-shrink: 0;+  }+  .info-row {+    display: flex;+    align-items: baseline;+    flex-wrap: wrap;+    gap: 1px 0;+    padding: 5px 8px;+    font-size: 10px;+  }+  .info-item {+    display: inline-flex;+    align-items: baseline;+    gap: 5px;+    padding: 1px 0;+    margin-right: 8px;+  }+  .info-item::after {+    content: '';+    display: inline-block;+    width: 1px;+    height: 10px;+    background: #21262d;+    margin-left: 8px;+    vertical-align: middle;+  }+  .info-item:last-child::after { display: none; }+  .info-item:last-child { margin-right: 0; }+  .info-label {+    color: #484f58;+    text-transform: uppercase;+    letter-spacing: 0.04em;+    font-size: 9px;+  }+  .info-value { color: #8b949e; }+  .info-value a { color: #00b8b0; text-decoration: none; }+  .info-value a:hover { text-decoration: underline; }+  .info-divider { height: 1px; background: #21262d; margin: 0 8px; }+  .coord-row {+    display: flex;+    align-items: center;+    justify-content: space-between;+    padding: 4px 8px;+    font-size: 10px;+    color: #8b949e;+    font-variant-numeric: tabular-nums;+  }+</style>+</head>+<body>++<div class="toolbar">+  <span class="title">IN-S42ATA</span>+  <div class="spacer"></div>+  <div class="btn-group">+    <button onclick="zoomOut()">&#x2212;</button>+    <span class="zoom-level" id="zoom-level">100%</span>+    <button onclick="zoomIn()">&#x2b;</button>+  </div>+  <div class="sep"></div>+  <button onclick="zoomFit()">Fit</button>+  <button onclick="zoomReset()">1:1</button>+  <button onclick="toggleGrid()" id="grid-btn" class="active">Grid</button>+  <button onclick="toggleBBox()" id="bbox-btn" class="active">BBox</button>+  <button onclick="toggleHits()" id="hits-btn">Hits</button>+  <div class="sep"></div>+  <button onclick="showRegenPrompt()" title="Show regeneration prompt to paste into Claude Code">Regen</button>+</div>++<div class="regen-overlay" id="regen-overlay" onclick="if(event.target===this)closeRegenPrompt()">+  <div class="regen-modal">+    <h3>Regeneration Prompt</h3>+    <div class="prompt-text" id="regen-prompt-text"></div>+    <div class="modal-footer">+      <span class="copy-status" id="regen-copy-status">Copied to clipboard</span>+      <div class="modal-btns">+        <button onclick="closeRegenPrompt()">Close</button>+        <button class="copy-btn" onclick="copyRegenText()">Copy</button>+      </div>+    </div>+  </div>+</div>++<div class="canvas-wrap" id="canvas-wrap">+  <a class="edit-btn" href="https://coder.john-service-wiki-a054078430ce38e4.containers.adom.inc/proxy/8785/wiki/components/in-s42ata/edit?field=content" target="_blank" title="Suggest corrections to this symbol on the Adom Wiki">+    <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">+      <path d="M11.5 1.5l3 3L5 14H2v-3L11.5 1.5z"/>+      <path d="M9.5 3.5l3 3"/>+    </svg>+    Suggest edit+  </a>+  <div class="canvas" id="canvas">+    <svg+  xmlns:svg="http://www.w3.org/2000/svg"+  xmlns="http://www.w3.org/2000/svg"+  xmlns:xlink="http://www.w3.org/1999/xlink"+  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+  version="1.1"+  width="10.5156mm" height="8.5598mm" viewBox="-3.6617 -1.0201 18.2200 10.6000">++<defs>+  <linearGradient id="adom-body-grad" x1="0" y1="0" x2="0" y2="1">+    <stop offset="0%" stop-color="#1a2332"/>+    <stop offset="100%" stop-color="#141c27"/>+  </linearGradient>+</defs>++<style>+  /* Stroked text groups (KiCad renders text as paths in <g class="stroked-text">) */+  g.stroked-text path {+    stroke: #ffffff !important;+    fill: #ffffff !important;+  }++  /* Hidden text elements (used for hit detection) */+  text[opacity="0"] {+    fill: #ffffff !important;+  }++  /* Pin highlight state (toggled by JS) */+  .pin-highlight path {+    stroke: #00e6dc !important;+  }+  .pin-highlight g.stroked-text path {+    stroke: #00e6dc !important;+  }++  /* Group label highlight */+  .group-highlight g.stroked-text path {+    stroke: #FFD180 !important;+  }+</style>++  <desc>Image generated by Eeschema-SVG </desc>+<g style="fill:none; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;+stroke-linecap:round; stroke-linejoin:round;"+ transform="translate(0 0) scale(1 1)">+<path style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 2.4003,5.0419+0.8763,6.5659+1.6383,6.5659+0.8763,6.5659+0.8763,5.8039+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 3.6703,5.0419+2.1463,6.5659+2.9083,6.5659+2.1463,6.5659+2.1463,5.8039+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,4.2799+6.7183,4.2799+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,5.5499+4.1783,3.0099+" /> +<path style="fill:none; +stroke:#4a5568; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 6.7183,5.5499+6.7183,3.0099+4.1783,4.2799+Z" /> +</g>+<g style="fill:none; +stroke:#4a5568; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M4.1783 4.2799+L1.6383 4.2799+" />+<path d="M6.7183 4.2799+L9.2583 4.2799+" />+</g>+<g style="fill:none; +stroke:#484f58; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">++<text x="5.4483" y="7.4549"+textLength="3.6503" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">LED</text>+<g class="stroked-text"><desc>LED</desc>+<path d="M4.6319 7.3994+L4.0271 7.3994+" />+<path d="M4.0271 7.3994+L4.0271 6.1294+" />+<path d="M5.0552 6.7342+L5.4786 6.7342+" />+<path d="M5.6600 7.3994+L5.0552 7.3994+" />+<path d="M5.0552 7.3994+L5.0552 6.1294+" />+<path d="M5.0552 6.1294+L5.6600 6.1294+" />+<path d="M6.2042 7.3994+L6.2042 6.1294+" />+<path d="M6.2042 6.1294+L6.5066 6.1294+" />+<path d="M6.5066 6.1294+L6.6880 6.1899+" />+<path d="M6.6880 6.1899+L6.8090 6.3109+" />+<path d="M6.8090 6.3109+L6.8695 6.4318+" />+<path d="M6.8695 6.4318+L6.9299 6.6737+" />+<path d="M6.9299 6.6737+L6.9299 6.8551+" />+<path d="M6.9299 6.8551+L6.8695 7.0970+" />+<path d="M6.8695 7.0970+L6.8090 7.2180+" />+<path d="M6.8090 7.2180+L6.6880 7.3390+" />+<path d="M6.6880 7.3390+L6.5066 7.3994+" />+<path d="M6.5066 7.3994+L6.2042 7.3994+" />+</g></g> +<text x="0.638" y="4.665" font-size="1.1" font-family="sans-serif" fill="#ffffff" text-anchor="end" class="pin-label">K</text>+<text x="1.638" y="5.530" font-size="0.75" font-family="sans-serif" fill="#8b949e" text-anchor="middle" class="pin-num-label">1</text>+<text x="10.258" y="4.665" font-size="1.1" font-family="sans-serif" fill="#ffffff" text-anchor="start" class="pin-label">A</text>+<text x="9.258" y="5.530" font-size="0.75" font-family="sans-serif" fill="#8b949e" text-anchor="middle" class="pin-num-label">2</text>+<rect x="-3.3617000000000004" y="-0.7201000000000004" width="17.62" height="10" fill="none" stroke="#00e6dc" stroke-width="0.1" stroke-dasharray="0.3,0.3" opacity="0.4" class="debug-bbox"/></svg>+  </div>+</div>++<div class="tooltip" id="tooltip"></div>++<div class="bottom-panel">+  <div class="info-row">+    <div class="info-item"><span class="info-label">Pins</span><span class="info-value">2</span></div><div class="info-item"><span class="info-label">Datasheet</span><span class="info-value"><a href="~" target="_blank">PDF</a></span></div><div class="info-item"><span class="info-label">Desc</span><span class="info-value">Light emitting diode</span></div>+  </div>+  <div class="info-divider"></div>+  <div class="coord-row">+    <span id="cursor-pos">X: 0.00 &nbsp; Y: 0.00 mm</span>+    <span style="margin-left:auto;color:#00b8b0;font-weight:600;font-size:12px">SymView</span>+  </div>+</div>++<script>+  const pins = [{"name":"K","number":"1","type":"Passive","electricalType":"passive","color":"#78909c","desc":"","x":-3.81,"y":0,"angle":0,"length":2.54},{"name":"A","number":"2","type":"Passive","electricalType":"passive","color":"#78909c","desc":"","x":3.81,"y":0,"angle":180,"length":2.54}];+  const groups = [];+  const svgW = 18.22;+  const svgH = 10.6;+  const contentBounds = {"x":-3.3617000000000004,"y":-0.7201000000000004,"w":17.62,"h":10};+  const svgOffset = {"x":5.4483,"y":4.2799};+  const hidePinNames = true;+  const hidePinNumbers = true;+  const datasheetUrl = "~";+  const mfrName = "";+  const _symbolName = "IN-S42ATA";+  const _symPath = "/home/adom/project/project-content/schematics/symbols/IN-S42ATA/IN-S42ATA.kicad_sym";++  const wrap = document.getElementById('canvas-wrap');+  const canvas = document.getElementById('canvas');+  const tooltip = document.getElementById('tooltip');+  const zoomLabel = document.getElementById('zoom-level');+  const cursorPos = document.getElementById('cursor-pos');++  let scale = 1, panX = 0, panY = 0;+  let isDragging = false;+  let dragStartX, dragStartY, panStartX, panStartY;+  let gridVisible = true;+  let stickyPin = null; // currently pinned tooltip++  const MM_TO_PX = 3.78;+  const svgPxW = svgW * MM_TO_PX;+  const svgPxH = svgH * MM_TO_PX;++  const svgEl = canvas.querySelector('svg');+  if (svgEl) {+    svgEl.setAttribute('width', svgPxW + 'px');+    svgEl.setAttribute('height', svgPxH + 'px');+  }++  function updateTransform() {+    canvas.style.transform = 'translate(' + panX + 'px,' + panY + 'px) scale(' + scale + ')';+    zoomLabel.textContent = Math.round(scale * 100) + '%';+  }++  function zoomFit() {+    const ww = wrap.clientWidth, wh = wrap.clientHeight;+    const pad = 40;+    // Read the bbox rect directly from the SVG DOM — it's already positioned correctly+    const bboxRect = svgEl ? svgEl.querySelector('.debug-bbox') : null;+    if (bboxRect) {+      const bb = bboxRect.getBBox();+      const vb = svgEl.viewBox.baseVal;+      // Convert SVG user-space coords to pixel coords within the SVG element+      const pxPerUnitX = svgPxW / vb.width;+      const pxPerUnitY = svgPxH / vb.height;+      const pxX = (bb.x - vb.x) * pxPerUnitX;+      const pxY = (bb.y - vb.y) * pxPerUnitY;+      const pxW = bb.width * pxPerUnitX;+      const pxH = bb.height * pxPerUnitY;+      scale = Math.min((ww - pad * 2) / pxW, (wh - pad * 2) / pxH, 10);+      if (!isFinite(scale) || scale <= 0) scale = 1;+      panX = (ww - pxW * scale) / 2 - pxX * scale;+      panY = (wh - pxH * scale) / 2 - pxY * scale;+    } else {+      scale = Math.min((ww - pad * 2) / svgPxW, (wh - pad * 2) / svgPxH, 10);+      if (!isFinite(scale) || scale <= 0) scale = 1;+      panX = (ww - svgPxW * scale) / 2;+      panY = (wh - svgPxH * scale) / 2;+    }+    updateTransform();+  }++  function zoomReset() {+    scale = 1;+    panX = (wrap.clientWidth - svgPxW) / 2;+    panY = (wrap.clientHeight - svgPxH) / 2;+    updateTransform();+  }++  function zoomIn() { zoomAt(wrap.clientWidth / 2, wrap.clientHeight / 2, 1.25); }+  function zoomOut() { zoomAt(wrap.clientWidth / 2, wrap.clientHeight / 2, 0.8); }++  function zoomAt(cx, cy, factor) {+    const ns = Math.max(0.1, Math.min(scale * factor, 20));+    const r = ns / scale;+    panX = cx - (cx - panX) * r;+    panY = cy - (cy - panY) * r;+    scale = ns;+    updateTransform();+  }++  function toggleGrid() {+    gridVisible = !gridVisible;+    wrap.classList.toggle('no-grid', !gridVisible);+    document.getElementById('grid-btn').classList.toggle('active', gridVisible);+  }++  let bboxVisible = true;+  function toggleBBox() {+    bboxVisible = !bboxVisible;+    const el = svgEl && svgEl.querySelector('.debug-bbox');+    if (el) el.setAttribute('opacity', bboxVisible ? '0.4' : '0');+    document.getElementById('bbox-btn').classList.toggle('active', bboxVisible);+  }++  let hitsVisible = false;+  function toggleHits() {+    hitsVisible = !hitsVisible;+    if (svgEl) {+      svgEl.querySelectorAll('.pin-hit-zone').forEach(r => {+        r.style.visibility = hitsVisible ? '' : 'hidden';+      });+    }+    document.getElementById('hits-btn').classList.toggle('active', hitsVisible);+  }++  // ── Regen prompt modal ──+  let _regenPrompt = '';+  function buildRegenPrompt() {+    const folder = _symPath.substring(0, _symPath.lastIndexOf('/'));+    return 'Regenerate the SymView for ' + _symbolName + '.\n\n'+      + 'Symbol: ' + _symPath + '\n'+      + 'Metadata: ' + folder + '/' + _symbolName + '-metadata.json\n\n'+      + 'Re-export the SVG via the KiCad service, regenerate the SymView HTML at the same path, '+      + 'and re-display it in the Adom app.';+  }+  function showRegenPrompt() {+    _regenPrompt = buildRegenPrompt();+    document.getElementById('regen-prompt-text').textContent = _regenPrompt;+    document.getElementById('regen-overlay').classList.add('visible');+    const status = document.getElementById('regen-copy-status');+    navigator.clipboard.writeText(_regenPrompt).then(() => {+      status.textContent = 'Copied to clipboard';+      status.classList.add('copied');+    }).catch(() => {+      status.textContent = 'Click Copy to copy';+      status.classList.remove('copied');+    });+  }+  function closeRegenPrompt() {+    document.getElementById('regen-overlay').classList.remove('visible');+  }+  function copyRegenText() {+    navigator.clipboard.writeText(_regenPrompt).then(() => {+      const status = document.getElementById('regen-copy-status');+      status.textContent = 'Copied to clipboard';+      status.classList.add('copied');+    });+  }++  // Mouse wheel zoom+  wrap.addEventListener('wheel', (e) => {+    e.preventDefault();+    const r = wrap.getBoundingClientRect();+    zoomAt(e.clientX - r.left, e.clientY - r.top, e.deltaY < 0 ? 1.12 : 0.89);+  }, { passive: false });++  // Pan+  wrap.addEventListener('mousedown', (e) => {+    if (e.button !== 0) return;+    isDragging = true;+    dragStartX = e.clientX; dragStartY = e.clientY;+    panStartX = panX; panStartY = panY;+    wrap.classList.add('dragging');+  });+  window.addEventListener('mousemove', (e) => {+    const r = wrap.getBoundingClientRect();+    const mx = (e.clientX - r.left - panX) / scale / MM_TO_PX;+    const my = (e.clientY - r.top - panY) / scale / MM_TO_PX;+    cursorPos.innerHTML = 'X: ' + mx.toFixed(2) + ' &nbsp; Y: ' + my.toFixed(2) + ' mm';+    if (!isDragging) return;+    panX = panStartX + (e.clientX - dragStartX);+    panY = panStartY + (e.clientY - dragStartY);+    updateTransform();+  });+  window.addEventListener('mouseup', () => { isDragging = false; wrap.classList.remove('dragging'); });++  // ── Pin highlighting ──+  const pinTextGroups = new Map();+  const pinWireGroups = new Map();+  if (svgEl) {+    // Build text group lookup+    svgEl.querySelectorAll('g.stroked-text').forEach(g => {+      const desc = g.querySelector('desc');+      if (desc) pinTextGroups.set(desc.textContent.trim(), g);+    });++    // Build wire group lookup using coordinate matching (not sibling navigation)+    if (svgOffset) {+      const ox = svgOffset.x, oy = svgOffset.y;+      // Collect all simple 2-point line paths in the SVG+      const allPaths = svgEl.querySelectorAll('path');+      const wirePaths = [];+      allPaths.forEach(p => {+        const d = p.getAttribute('d');+        if (!d) return;+        const m = d.match(/^M([\d.]+)\s+([\d.]+)\s+L([\d.]+)\s+([\d.]+)\s*$/);+        if (m) wirePaths.push({ el: p, x1: parseFloat(m[1]), y1: parseFloat(m[2]), x2: parseFloat(m[3]), y2: parseFloat(m[4]) });+      });++      for (const pin of pins) {+        const tipX = ox + pin.x;+        const tipY = oy - pin.y;+        const wireLen = pin.length || 2.54;+        const isHoriz = (pin.angle === 0 || pin.angle === 180);++        for (const w of wirePaths) {+          const dx = Math.abs(w.x2 - w.x1), dy = Math.abs(w.y2 - w.y1);+          const len = Math.sqrt(dx * dx + dy * dy);+          if (Math.abs(len - wireLen) > 0.05) continue;+          if (isHoriz && dy > 0.01) continue;+          if (!isHoriz && dx > 0.01) continue;+          // Check if one endpoint is near the pin tip+          const d1 = Math.hypot(w.x1 - tipX, w.y1 - tipY);+          const d2 = Math.hypot(w.x2 - tipX, w.y2 - tipY);+          if (Math.min(d1, d2) < 0.1) {+            // Found the wire path element directly+            pinWireGroups.set(pin.name, w.el);+            break;+          }+        }+      }+    }+  }++  function highlightPin(pin) {+    clearHighlight();+    // IC symbols: stroked-text groups+    [pin.name, pin.number].forEach(label => {+      const g = pinTextGroups.get(label);+      if (g) g.classList.add('pin-highlight');+    });+    const wireG = pinWireGroups.get(pin.name);+    if (wireG) wireG.classList.add('pin-highlight');+    // Discrete symbols: injected <text> labels+    if (svgEl && hidePinNames) {+      svgEl.querySelectorAll('text.pin-label').forEach(t => {+        if (t.textContent.trim() === pin.name) t.classList.add('pin-label-highlight');+      });+      svgEl.querySelectorAll('text.pin-num-label').forEach(t => {+        if (t.textContent.trim() === pin.number) t.classList.add('pin-num-highlight');+      });+    }+  }+  function clearHighlight() {+    if (svgEl) {+      svgEl.querySelectorAll('.pin-highlight').forEach(g => g.classList.remove('pin-highlight'));+      svgEl.querySelectorAll('.group-highlight').forEach(g => g.classList.remove('group-highlight'));+      svgEl.querySelectorAll('.pin-label-highlight').forEach(t => t.classList.remove('pin-label-highlight'));+      svgEl.querySelectorAll('.pin-num-highlight').forEach(t => t.classList.remove('pin-num-highlight'));+    }+  }++  // ── Tooltip positioning ──+  function positionTooltip(x, y) {+    const tw = tooltip.offsetWidth || 280;+    const th = tooltip.offsetHeight || 120;+    let tx = x + 14;+    let ty = y + 14;+    if (tx + tw > window.innerWidth - 14) tx = x - tw - 14;+    if (ty + th > window.innerHeight - 14) ty = y - th - 14;+    tx = Math.max(14, tx);+    ty = Math.max(14, ty);+    tooltip.style.left = tx + 'px';+    tooltip.style.top = ty + 'px';+  }++  // ── Source attribution HTML ──+  function sourceHtml() {+    if (!datasheetUrl || !mfrName) return '';+    return '<div class="tt-source"><span class="tt-source-label">Source:</span> <a href="' + datasheetUrl + '" target="_blank">' + mfrName + ' Datasheet</a></div>';+  }++  function hintHtml() {+    return '<div class="tt-hint">click to pin &middot; select text</div>';+  }++  function showTooltip(x, y, pin) {+    if (stickyPin) return; // don't override sticky+    highlightPin(pin);+    let html = '<div><span class="tt-name">' + pin.name + '</span><span class="tt-pin">Pin ' + pin.number + '</span></div>' ++      '<div><span class="tt-type" style="background:' + pin.color + '22; color:' + pin.color + '; border:1px solid ' + pin.color + '44">' + pin.type + '</span></div>';+    if (pin.desc) html += '<div class="tt-desc">' + pin.desc + '</div>';+    html += sourceHtml();+    html += hintHtml();+    tooltip.innerHTML = html;+    tooltip.classList.add('visible');+    tooltip.classList.remove('sticky');+    positionTooltip(x, y);+  }++  function showGroupTooltip(x, y, group) {+    if (stickyPin) return;+    clearHighlight();+    const g = pinTextGroups.get(group.name);+    if (g) g.classList.add('group-highlight');+    let html = '<div><span class="tt-group-name">' + group.name + '</span></div>' ++      '<div><span class="tt-group-badge">Function Group</span></div>';+    if (group.desc) html += '<div class="tt-desc">' + group.desc + '</div>';+    tooltip.innerHTML = html;+    tooltip.classList.add('visible');+    tooltip.classList.remove('sticky');+    positionTooltip(x, y);+  }++  function hideTooltip() {+    if (stickyPin) return;+    tooltip.classList.remove('visible');+    clearHighlight();+  }++  // ── Sticky tooltip (click-to-pin) ──+  function toggleSticky(pin, x, y) {+    if (stickyPin === pin) {+      // Unpin+      stickyPin = null;+      tooltip.classList.remove('sticky');+      hideTooltip();+    } else {+      // Pin+      stickyPin = pin;+      highlightPin(pin);+      let html = '<div><span class="tt-name">' + pin.name + '</span><span class="tt-pin">Pin ' + pin.number + '</span></div>' ++        '<div><span class="tt-type" style="background:' + pin.color + '22; color:' + pin.color + '; border:1px solid ' + pin.color + '44">' + pin.type + '</span></div>';+      if (pin.desc) html += '<div class="tt-desc">' + pin.desc + '</div>';+      html += sourceHtml();+      tooltip.innerHTML = html;+      tooltip.classList.add('visible', 'sticky');+      positionTooltip(x, y);+    }+  }++  // Dismiss sticky on click outside+  document.addEventListener('click', (e) => {+    if (!stickyPin) return;+    if (tooltip.contains(e.target)) return; // click inside tooltip+    if (e.target.closest('[data-pin]') || e.target.closest('[data-pin-num]') || e.target.closest('[data-pin-wire]')) return;+    stickyPin = null;+    tooltip.classList.remove('sticky', 'visible');+    clearHighlight();+  });++  wrap.addEventListener('mouseleave', hideTooltip);++  // ── Pin hit zones ──+  function setupPinHitZones() {+    if (!svgEl) return;++    if (hidePinNames) {+      // Discrete components (hidden pin names): compute hit zones from injected labels+      // Covers MOSFETs, resistors, etc. — standard KiCad discrete symbols hide pin names+      // but may leave pin numbers visible, so we check hidePinNames only+      setupDiscreteHitZones();+    } else {+      // Standard IC: use hidden text elements for hit detection+      setupTextHitZones();+    }+  }++  function setupTextHitZones() {+    // IC symbols: two hit zones per pin, derived from actual rendered text bounds (getBBox):+    //   1. INSIDE body — covers pin name text (bbox from stroked-text group)+    //   2. OUTSIDE body — covers pin wire + number area (bbox or coordinate-based)+    if (!svgOffset) return;+    const ox = svgOffset.x, oy = svgOffset.y;+    const pitch = 2.54;+    const zoneH = pitch * 0.95;+    const wireExt = 1.5;+    const pad = 0.3; // padding around text bbox++    // Build lookup: text content → stroked-text group bbox+    const textBBoxMap = {};+    svgEl.querySelectorAll('g.stroked-text').forEach(g => {+      const desc = g.querySelector('desc');+      if (desc) {+        try {+          const bbox = g.getBBox();+          if (bbox.width > 0 && bbox.height > 0) {+            const key = desc.textContent.trim();+            if (!textBBoxMap[key]) textBBoxMap[key] = [];+            textBBoxMap[key].push(bbox);+          }+        } catch (e) {}+      }+    });++    function addHitZone(hx, hy, hw, hh, pin) {+      const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');+      rect.setAttribute('x', hx);+      rect.setAttribute('y', hy);+      rect.setAttribute('width', hw);+      rect.setAttribute('height', hh);+      rect.setAttribute('class', 'pin-hit-zone');+      rect.setAttribute('data-pin', pin.name);+      rect.setAttribute('rx', '0.3');+      svgEl.appendChild(rect);+      rect.addEventListener('mouseenter', (ev) => showTooltip(ev.clientX, ev.clientY, pin));+      rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });+      rect.addEventListener('mouseleave', hideTooltip);+      rect.addEventListener('click', (ev) => { ev.stopPropagation(); toggleSticky(pin, ev.clientX, ev.clientY); });+    }++    for (const pin of pins) {+      const tipSvgX = ox + pin.x;+      const tipSvgY = oy - pin.y;+      const wireLen = pin.length || 2.54;+      const isHoriz = (pin.angle === 0 || pin.angle === 180);++      // Pin name hitbox: use actual text bbox if available+      const nameBBoxes = textBBoxMap[pin.name];+      if (nameBBoxes && nameBBoxes.length > 0) {+        // Pick the bbox closest to this pin's body-edge position+        const bodyEdgeX = isHoriz+          ? (pin.angle === 0 ? tipSvgX + wireLen : tipSvgX - wireLen)+          : tipSvgX;+        const bodyEdgeY = isHoriz+          ? tipSvgY+          : (pin.angle === 90 ? tipSvgY - wireLen : tipSvgY + wireLen);+        let best = nameBBoxes[0];+        let bestDist = Infinity;+        for (const bb of nameBBoxes) {+          const cx = bb.x + bb.width / 2, cy = bb.y + bb.height / 2;+          const d = Math.hypot(cx - bodyEdgeX, cy - bodyEdgeY);+          if (d < bestDist) { bestDist = d; best = bb; }+        }+        addHitZone(best.x - pad, best.y - pad, best.width + pad * 2, best.height + pad * 2, pin);+      } else {+        // Fallback: fixed-width zone inside body+        const bodyDepth = 8;+        if (isHoriz) {+          const cy = tipSvgY - zoneH / 2;+          if (pin.angle === 0) addHitZone(tipSvgX + wireLen, cy, bodyDepth, zoneH, pin);+          else addHitZone(tipSvgX - wireLen - bodyDepth, cy, bodyDepth, zoneH, pin);+        } else {+          const cx = tipSvgX - zoneH / 2;+          if (pin.angle === 90) addHitZone(cx, tipSvgY - wireLen - bodyDepth, zoneH, bodyDepth, pin);+          else addHitZone(cx, tipSvgY + wireLen, zoneH, bodyDepth, pin);+        }+      }++      // Pin number hitbox: use actual text bbox if available+      const numBBoxes = textBBoxMap[pin.number];+      if (numBBoxes && numBBoxes.length > 0) {+        const tipDist = (bb) => Math.hypot(bb.x + bb.width / 2 - tipSvgX, bb.y + bb.height / 2 - tipSvgY);+        let best = numBBoxes[0], bestD = tipDist(best);+        for (const bb of numBBoxes) { const d = tipDist(bb); if (d < bestD) { bestD = d; best = bb; } }+        addHitZone(best.x - pad, best.y - pad, best.width + pad * 2, best.height + pad * 2, pin);+      } else {+        // Fallback: wire area+        if (isHoriz) {+          const cy = tipSvgY - zoneH / 2;+          if (pin.angle === 0) addHitZone(tipSvgX - wireExt, cy, wireLen + wireExt, zoneH, pin);+          else addHitZone(tipSvgX, cy, wireLen + wireExt, zoneH, pin);+        } else {+          const cx = tipSvgX - zoneH / 2;+          if (pin.angle === 90) addHitZone(cx, tipSvgY, zoneH, wireLen + wireExt, pin);+          else addHitZone(cx, tipSvgY - wireExt, zoneH, wireLen + wireExt, pin);+        }+      }+    }+  }++  function setupDiscreteHitZones() {+    // For discrete components (hidden pin names/numbers), create hit zones+    // using getBBox() on injected text labels for precise alignment.+    // Falls back to coordinate-based zones if text elements aren't found.+    if (!svgOffset) return;+    const ox = svgOffset.x, oy = svgOffset.y;+    const pad = 0.5; // generous padding for easy hover on small labels++    // Build lookup: text content → getBBox for injected labels+    const labelBBoxMap = {};+    const allTextEls = svgEl.querySelectorAll('text.pin-label, text.pin-num-label');+    allTextEls.forEach(t => {+      try {+        const bbox = t.getBBox();+        if (bbox.width > 0 && bbox.height > 0) {+          const key = t.textContent.trim();+          if (!labelBBoxMap[key]) labelBBoxMap[key] = [];+          labelBBoxMap[key].push(bbox);+        }+      } catch (e) {}+    });++    for (const pin of pins) {+      const tipSvgX = ox + pin.x;+      const tipSvgY = oy - pin.y;+      const wireLen = pin.length || 2.54;++      // Collect bounding boxes of this pin's name and number labels+      const bboxes = [];++      // Find name label bbox (closest to pin tip)+      const nameBBs = labelBBoxMap[pin.name];+      if (nameBBs) {+        let best = nameBBs[0], bestD = Infinity;+        for (const bb of nameBBs) {+          const d = Math.hypot(bb.x + bb.width / 2 - tipSvgX, bb.y + bb.height / 2 - tipSvgY);+          if (d < bestD) { bestD = d; best = bb; }+        }+        bboxes.push(best);+      }++      // Find number label bbox (closest to pin tip)+      const numBBs = labelBBoxMap[pin.number];+      if (numBBs) {+        let best = numBBs[0], bestD = Infinity;+        for (const bb of numBBs) {+          const d = Math.hypot(bb.x + bb.width / 2 - tipSvgX, bb.y + bb.height / 2 - tipSvgY);+          if (d < bestD) { bestD = d; best = bb; }+        }+        bboxes.push(best);+      }++      if (bboxes.length > 0) {+        // Union text bboxes into a single hit zone (just covers labels near the tip)+        let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;+        for (const bb of bboxes) {+          minX = Math.min(minX, bb.x);+          minY = Math.min(minY, bb.y);+          maxX = Math.max(maxX, bb.x + bb.width);+          maxY = Math.max(maxY, bb.y + bb.height);+        }++        const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');+        rect.setAttribute('x', minX - pad);+        rect.setAttribute('y', minY - pad);+        rect.setAttribute('width', maxX - minX + pad * 2);+        rect.setAttribute('height', maxY - minY + pad * 2);+        rect.setAttribute('class', 'pin-hit-zone');+        rect.setAttribute('data-pin-wire', pin.name);+        rect.setAttribute('rx', '0.3');+        svgEl.appendChild(rect);++        rect.addEventListener('mouseenter', (ev) => showTooltip(ev.clientX, ev.clientY, pin));+        rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });+        rect.addEventListener('mouseleave', hideTooltip);+        rect.addEventListener('click', (ev) => { ev.stopPropagation(); toggleSticky(pin, ev.clientX, ev.clientY); });+      } else {+        // Fallback: coordinate-based zone around wire area+        const perpHalf = 1.5;+        let hitX, hitY, hitW, hitH;+        switch (pin.angle) {+          case 0:   hitX = tipSvgX - 1; hitY = tipSvgY - perpHalf; hitW = wireLen + 1; hitH = perpHalf * 2; break;+          case 180: hitX = tipSvgX - wireLen; hitY = tipSvgY - perpHalf; hitW = wireLen + 1; hitH = perpHalf * 2; break;+          case 270: hitX = tipSvgX - perpHalf; hitY = tipSvgY; hitW = perpHalf * 2; hitH = wireLen + 1; break;+          case 90:  hitX = tipSvgX - perpHalf; hitY = tipSvgY - wireLen; hitW = perpHalf * 2; hitH = wireLen + 1; break;+          default:  hitX = tipSvgX - 2; hitY = tipSvgY - 2; hitW = 4; hitH = 4;+        }+        const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');+        rect.setAttribute('x', hitX);+        rect.setAttribute('y', hitY);+        rect.setAttribute('width', hitW);+        rect.setAttribute('height', hitH);+        rect.setAttribute('class', 'pin-hit-zone');+        rect.setAttribute('data-pin-wire', pin.name);+        rect.setAttribute('rx', '0.3');+        svgEl.appendChild(rect);+        rect.addEventListener('mouseenter', (ev) => showTooltip(ev.clientX, ev.clientY, pin));+        rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });+        rect.addEventListener('mouseleave', hideTooltip);+        rect.addEventListener('click', (ev) => { ev.stopPropagation(); toggleSticky(pin, ev.clientX, ev.clientY); });+      }+    }+  }++  // ── Group label hit zones ──+  function setupGroupHitZones() {+    if (!svgEl) return;+    const texts = svgEl.querySelectorAll('text');+    texts.forEach(textEl => {+      const label = textEl.textContent.trim();+      const group = groups.find(g => g.name === label);+      if (!group) return;+      const fSize = parseFloat(textEl.getAttribute('font-size')) || 1;+      if (Math.abs(fSize - 1.016) > 0.1) return;++      const x = parseFloat(textEl.getAttribute('x')) || 0;+      const y = parseFloat(textEl.getAttribute('y')) || 0;+      const tLen = parseFloat(textEl.getAttribute('textLength')) || 6;+      const anchor = textEl.getAttribute('text-anchor') || 'start';++      const padX = fSize * 0.4;+      const padY = fSize * 0.15; // tight vertical padding to avoid spilling into pin zones+      let rx, rw = tLen + padX * 2, rh = fSize + padY * 2;+      if (anchor === 'end') rx = x - tLen - padX;+      else if (anchor === 'middle') rx = x - tLen / 2 - padX;+      else rx = x - padX;+      const ry = y - fSize - padY;++      const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');+      rect.setAttribute('x', rx);+      rect.setAttribute('y', ry);+      rect.setAttribute('width', rw);+      rect.setAttribute('height', rh);+      rect.setAttribute('class', 'pin-hit-zone');+      rect.setAttribute('data-group', group.name);+      rect.setAttribute('rx', '0.3');+      svgEl.appendChild(rect);++      rect.addEventListener('mouseenter', (ev) => showGroupTooltip(ev.clientX, ev.clientY, group));+      rect.addEventListener('mousemove', (ev) => { if (!stickyPin) positionTooltip(ev.clientX, ev.clientY); });+      rect.addEventListener('mouseleave', hideTooltip);+    });+  }++  // Keyboard shortcuts+  window.addEventListener('keydown', (e) => {+    if (e.key === 'f' || e.key === 'F') zoomFit();+    else if (e.key === '1') zoomReset();+    else if (e.key === '+' || e.key === '=') zoomIn();+    else if (e.key === '-') zoomOut();+    else if (e.key === 'g' || e.key === 'G') toggleGrid();+    else if (e.key === 'Escape') {+      closeRegenPrompt();+      stickyPin = null;+      tooltip.classList.remove('sticky', 'visible');+      clearHighlight();+    }+  });++  // Auto-fit on window/container resize (e.g. iframe becoming visible)+  new ResizeObserver(() => zoomFit()).observe(wrap);++  // Init+  requestAnimationFrame(() => {+    zoomFit();+    setupPinHitZones();+    setupGroupHitZones();+    // Hide hit zones by default (user can toggle with Hits button)+    if (!hitsVisible && svgEl) {+      svgEl.querySelectorAll('.pin-hit-zone').forEach(r => { r.style.visibility = 'hidden'; });+    }+  });++  // Zoom to a named region of the symbol (for AI screenshot verification)+  // Regions: 'top', 'bottom', 'left', 'right', 'fit' (full symbol)+  function zoomToRegion(region) {+    if (!contentBounds) { zoomFit(); return; }+    const ww = wrap.clientWidth, wh = wrap.clientHeight;+    const svgEl = document.querySelector('#canvas svg');+    if (!svgEl) return;+    const vb = svgEl.viewBox.baseVal;+    const svgPxW = svgEl.clientWidth || svgEl.getBoundingClientRect().width;+    const svgPxH = svgEl.clientHeight || svgEl.getBoundingClientRect().height;+    const pxPerUnitX = svgPxW / vb.width;+    const pxPerUnitY = svgPxH / vb.height;++    // Content bounds in SVG user-space+    const cb = contentBounds;+    const cx = cb.x, cy = cb.y, cw = cb.w || cb.width, ch = cb.h || cb.height;+    // Region crop (SVG user-space coordinates)+    let rx, ry, rw, rh;+    const margin = 2; // mm padding+    if (region === 'top') {+      rx = cx - margin; ry = cy - margin; rw = cw + margin * 2; rh = Math.min(ch * 0.12, 50) + margin;+    } else if (region === 'bottom') {+      const cropH = Math.min(ch * 0.12, 50);+      ry = cy + ch - cropH - margin; rx = cx - margin; rw = cw + margin * 2; rh = cropH + margin * 2;+    } else if (region === 'top-left') {+      rx = cx - margin; ry = cy - margin; rw = cw * 0.4 + margin; rh = Math.min(ch * 0.12, 50) + margin;+    } else if (region === 'top-right') {+      rx = cx + cw * 0.6 - margin; ry = cy - margin; rw = cw * 0.4 + margin * 2; rh = Math.min(ch * 0.12, 50) + margin;+    } else if (region === 'bottom-left') {+      const cropH = Math.min(ch * 0.12, 50);+      ry = cy + ch - cropH - margin; rx = cx - margin; rw = cw * 0.4 + margin; rh = cropH + margin * 2;+    } else if (region === 'bottom-right') {+      const cropH = Math.min(ch * 0.12, 50);+      ry = cy + ch - cropH - margin; rx = cx + cw * 0.6 - margin; rw = cw * 0.4 + margin * 2; rh = cropH + margin * 2;+    } else if (region === 'left') {+      rx = cx - margin; ry = cy - margin; rw = cw * 0.35 + margin; rh = ch + margin * 2;+    } else if (region === 'right') {+      rx = cx + cw * 0.65 - margin; ry = cy - margin; rw = cw * 0.35 + margin * 2; rh = ch + margin * 2;+    } else {+      zoomFit(); return;+    }+    // Convert to pixel coords+    const pxX = (rx - vb.x) * pxPerUnitX;+    const pxY = (ry - vb.y) * pxPerUnitY;+    const pxW = rw * pxPerUnitX;+    const pxH = rh * pxPerUnitY;+    // Compute scale to fit region in viewport+    const ns = Math.min(ww / pxW, wh / pxH) * 0.92;+    scale = Math.max(0.1, Math.min(ns, 20));+    panX = ww / 2 - (pxX + pxW / 2) * scale;+    panY = wh / 2 - (pxY + pxH / 2) * scale;+    updateTransform();+  }++  // Screenshot capture handler for Adom Viewer mgmt relay+  // Send SVG data back to parent for rendering (avoids sandbox restrictions on Image loading)+  window.addEventListener('message', (e) => {+    // Zoom-to-region command (from AI via mgmt relay)+    if (e.data?.type === 'sym_zoom_region') {+      zoomToRegion(e.data.region || 'fit');+      return;+    }+    if (e.data?.type === 'mgmt_capture_request') {+      const reqId = e.data._reqId;+      try {+        const svg = document.querySelector('#canvas svg');+        if (!svg) { window.parent.postMessage({ type: 'mgmt_canvas_capture', _reqId: reqId, data: null }, '*'); return; }+        const clone = svg.cloneNode(true);+        // Inline pin-hit-zone styles so they're visible in standalone SVG+        clone.querySelectorAll('.pin-hit-zone').forEach(el => {+          el.setAttribute('fill', 'rgba(0,230,220,0.06)');+          el.setAttribute('stroke', '#00e6dc');+          el.setAttribute('stroke-width', '0.12');+          el.setAttribute('stroke-dasharray', '0.3,0.2');+          el.setAttribute('stroke-opacity', '0.5');+          el.setAttribute('rx', '0.3');+        });+        const vb = svg.getAttribute('viewBox');+        const parts = vb ? vb.split(/\s+/).map(Number) : [0, 0, 100, 100];+        let vbX = parts[0], vbY = parts[1], vbW = parts[2] || 100, vbH = parts[3] || 100;++        // Crop to visible viewport when zoomed/panned+        const svgPxW = svg.clientWidth || svg.getBoundingClientRect().width;+        const svgPxH = svg.clientHeight || svg.getBoundingClientRect().height;+        const ww = wrap.clientWidth, wh = wrap.clientHeight;+        if (scale !== 1 || panX !== (ww - svgPxW) / 2 || panY !== (wh - svgPxH) / 2) {+          const pxPerUnitX = svgPxW / vbW;+          const pxPerUnitY = svgPxH / vbH;+          // Visible viewport in pixel space of the SVG element+          const visLeft = -panX / scale;+          const visTop = -panY / scale;+          const visW = ww / scale;+          const visH = wh / scale;+          // Convert to SVG user-space+          vbX = vbX + visLeft / pxPerUnitX;+          vbY = vbY + visTop / pxPerUnitY;+          vbW = visW / pxPerUnitX;+          vbH = visH / pxPerUnitY;+        }++        clone.setAttribute('viewBox', vbX + ' ' + vbY + ' ' + vbW + ' ' + vbH);+        clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');+        const xml = new XMLSerializer().serializeToString(clone);+        // Send SVG XML + dimensions to parent for canvas rendering+        window.parent.postMessage({+          type: 'mgmt_canvas_capture',+          _reqId: reqId,+          svgXml: xml,+          svgWidth: vbW,+          svgHeight: vbH,+          bgColor: '#0d1117'+        }, '*');+      } catch (err) {+        window.parent.postMessage({ type: 'mgmt_canvas_capture', _reqId: reqId, data: null }, '*');+      }+    }+  });+</script>+</body>+</html>\ No newline at end of file
IN-S42ATA.htmladded+1323
@@ -0,0 +1,1323 @@+<!DOCTYPE html>+<html lang="en">+<head>+<meta charset="UTF-8">+<meta name="viewport" content="width=device-width, initial-scale=1.0">+<title>IN-S42ATA — Component Characterization</title>+<style>+  @font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-700-normal.woff2') format('woff2'); font-weight: 700; }+  @font-face { font-family: 'Familjen Grotesk'; src: url('https://adom.inc/fonts/familjen-grotesk/familjen-grotesk-latin-500-normal.woff2') format('woff2'); font-weight: 500; }+  @font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-400-normal.woff2') format('woff2'); font-weight: 400; }+  @font-face { font-family: 'Satoshi'; src: url('https://adom.inc/fonts/satoshi/satoshi-500-normal.woff2') format('woff2'); font-weight: 500; }+  @font-face { font-family: 'JetBrains Mono'; src: url('https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2') format('woff2'); font-weight: 400; }++  :root {+    --bg: #0d1117; --surface: #161b22; --elevated: #1c2128; --border: #30363d; --border-muted: #21262d;+    --text: #e6edf3; --text-muted: #8b949e; --text-dim: #484f58;+    --accent: #00b8b0; --accent-bright: #00e6dc; --accent-dim: rgba(0,184,176,0.12); --accent-border: rgba(0,184,176,0.25);+    --green: #3fb950; --orange: #d29922; --red: #f85149; --purple: #8C6BF7; --blue: #58a6ff;+    --amber: #FF8C00; --amber-dim: rgba(255,140,0,0.12); --amber-border: rgba(255,140,0,0.35);+  }+  * { margin: 0; padding: 0; box-sizing: border-box; }+  body { font-family: 'Satoshi', sans-serif; background: var(--bg); color: var(--text); font-size: 13px; line-height: 1.6; overflow-y: auto; }+  h1,h2,h3 { font-family: 'Familjen Grotesk', sans-serif; font-weight: 700; }+  code { font-family: 'JetBrains Mono', monospace; font-size: 12px; }+  a { color: var(--accent); text-decoration: none; }+  a:hover { color: var(--accent-bright); text-decoration: underline; }++  .header { background: var(--surface); border-bottom: 1px solid var(--border-muted); padding: 20px 24px; }+  .header-top { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; }+  .header .brand { color: var(--accent); font-family: 'Familjen Grotesk', sans-serif; font-size: 12px; font-weight: 600; }+  .header .vsep { width: 1px; height: 16px; background: var(--border); }+  .header .crumb { color: var(--text-dim); font-size: 12px; }+  .header h1 { font-size: 22px; margin-bottom: 2px; }+  .header h1 .val { color: var(--amber); }+  .header .subtitle { color: var(--text-muted); font-size: 13px; }+  .header .tags { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }+  .tag { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 500; }+  .tag.pkg { background: rgba(0,184,176,0.12); color: var(--accent); }+  .tag.mfr { background: rgba(88,166,255,0.12); color: var(--blue); }+  .tag.series { background: rgba(140,107,247,0.12); color: var(--purple); }+  .tag.rohs { background: rgba(63,185,80,0.12); color: var(--green); }+  .tag.app { background: var(--amber-dim); color: var(--amber); }++  .container { max-width: 1100px; margin: 0 auto; padding: 24px; }+  .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }+  .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }+  @media (max-width: 800px) { .grid-2, .grid-3 { grid-template-columns: 1fr; } }++  .section { margin-bottom: 28px; }+  .section-title { font-size: 14px; color: var(--text); margin-bottom: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--border-muted); display: flex; align-items: center; gap: 8px; }+  .section-title .icon { color: var(--accent); font-size: 16px; }++  .card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }+  .card:hover { border-color: var(--accent-border); }++  /* Key spec cards */+  .spec-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }+  .spec-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; text-align: center; }+  .spec-card .sc-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 4px; }+  .spec-card .sc-value { font-size: 22px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }+  .spec-card .sc-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }+  .spec-card.highlight { border-color: var(--amber-border); background: linear-gradient(180deg, rgba(255,140,0,0.06), var(--surface)); }+  .spec-card.highlight .sc-value { color: var(--amber); }++  /* Detail table */+  .detail-table { width: 100%; border-collapse: collapse; }+  .detail-table tr { border-bottom: 1px solid var(--border-muted); }+  .detail-table tr:last-child { border-bottom: none; }+  .detail-table td { padding: 8px 0; }+  .detail-table td:first-child { color: var(--text-muted); font-size: 12px; width: 45%; }+  .detail-table td:last-child { font-family: 'JetBrains Mono', monospace; font-size: 13px; text-align: right; }++  /* SVG charts */+  .chart-wrap { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 16px; }+  .chart-wrap h3 { font-size: 13px; color: var(--text); margin-bottom: 12px; }+  .chart-wrap .chart-note { font-size: 11px; color: var(--text-dim); margin-top: 8px; }+  svg text { font-family: 'JetBrains Mono', monospace; }++  /* Package drawing */+  .pkg-drawing { display: flex; align-items: center; justify-content: center; padding: 20px; }++  /* Environmental specs */+  .env-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }+  @media (max-width: 700px) { .env-grid { grid-template-columns: 1fr; } }+  .env-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 12px 14px; }+  .env-card .env-name { font-size: 12px; font-weight: 600; margin-bottom: 4px; }+  .env-card .env-spec { font-size: 11px; color: var(--text-muted); }+  .env-card .env-detail { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text); margin-top: 4px; }++  /* Vendor cards */+  .vendor-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }+  @media (max-width: 700px) { .vendor-cards { grid-template-columns: 1fr; } }+  .vendor-card { background: var(--surface); border: 1px solid var(--border-muted); border-radius: 8px; padding: 14px; }+  .vendor-card .vc-name { font-size: 12px; font-weight: 600; margin-bottom: 6px; }+  .vendor-card .vc-name.mouser { color: var(--blue); }+  .vendor-card .vc-name.digikey { color: var(--red); }+  .vendor-card .vc-name.jlcpcb { color: var(--green); }+  .vendor-card .vc-price { font-size: 20px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; }+  .vendor-card .vc-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }+  .vendor-card .vc-link { display: inline-block; margin-top: 8px; font-size: 11px; color: var(--accent); }+  .vendor-card.recommended { border-color: var(--accent-border); }+  .vendor-card.recommended::before { content: 'RECOMMENDED'; display: block; font-size: 9px; letter-spacing: 1px; color: var(--accent); margin-bottom: 6px; font-weight: 600; }++  .copy-btn { background: none; border: 1px solid var(--border); color: var(--text-muted); border-radius: 4px; padding: 2px 6px; font-size: 13px; cursor: pointer; font-family: 'JetBrains Mono', monospace; vertical-align: middle; transition: border-color 0.15s, color 0.15s; }+  .copy-btn:hover { border-color: var(--accent); color: var(--accent); }++  .dl-btn { display: inline-block; margin-top: 10px; padding: 6px 14px; background: var(--accent-dim); border: 1px solid var(--accent-border); border-radius: 6px; color: var(--accent); font-size: 11px; font-weight: 500; font-family: 'Satoshi', sans-serif; text-decoration: none; transition: background 0.15s, border-color 0.15s; }+  .dl-btn:hover { background: rgba(0,184,176,0.2); border-color: var(--accent); text-decoration: none; color: var(--accent-bright); }++  .open-full-banner { display: flex; align-items: center; justify-content: center; padding: 12px 24px; background: linear-gradient(90deg, rgba(0,184,176,0.12), rgba(0,184,176,0.06)); border-bottom: 1px solid var(--accent-border); }+  .open-full-btn { display: inline-flex; align-items: center; gap: 8px; padding: 8px 20px; background: var(--accent); color: var(--bg); font-family: 'Familjen Grotesk', sans-serif; font-size: 13px; font-weight: 600; border-radius: 6px; text-decoration: none; transition: background 0.15s; cursor: pointer; border: none; }+  .open-full-btn:hover { background: var(--accent-bright); text-decoration: none; color: var(--bg); }++  .source { text-align: center; color: var(--text-dim); font-size: 11px; padding: 24px 0 12px; border-top: 1px solid var(--border-muted); margin-top: 20px; }++  /* Color swatch */+  .color-swatch { border-radius: 8px; padding: 20px; text-align: center; position: relative; overflow: hidden; }+  .color-swatch .swatch-block { width: 100%; height: 80px; border-radius: 6px; margin-bottom: 12px; position: relative; }+  .color-swatch .swatch-label { font-size: 14px; font-weight: 600; font-family: 'Familjen Grotesk', sans-serif; }+  .color-swatch .swatch-detail { font-size: 11px; color: var(--text-muted); margin-top: 4px; }++  /* Resistor calculator */+  .calc-card { background: var(--surface); border: 1px solid var(--amber-border); border-radius: 8px; padding: 20px; }+  .calc-card h3 { font-size: 14px; color: var(--amber); margin-bottom: 16px; font-family: 'Familjen Grotesk', sans-serif; }+  .calc-inputs { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }+  .calc-field label { display: block; font-size: 11px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }+  .calc-field input { width: 100%; background: var(--bg); border: 1px solid var(--border); color: var(--text); border-radius: 6px; padding: 8px 12px; font-family: 'JetBrains Mono', monospace; font-size: 14px; outline: none; transition: border-color 0.15s; }+  .calc-field input:focus { border-color: var(--amber); }+  .calc-field .unit { font-size: 11px; color: var(--text-dim); margin-top: 2px; }+  .calc-results { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }+  .calc-result { background: var(--bg); border: 1px solid var(--border-muted); border-radius: 6px; padding: 10px 12px; }+  .calc-result .cr-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-dim); margin-bottom: 2px; }+  .calc-result .cr-value { font-size: 18px; font-weight: 700; font-family: 'Familjen Grotesk', sans-serif; color: var(--amber); }+  .calc-result .cr-detail { font-size: 11px; color: var(--text-muted); margin-top: 2px; }+  .calc-schematic { margin-top: 16px; text-align: center; }+</style>+</head>+<body>++<div class="open-full-banner" id="fullPageBanner" style="display:none">+  <span style="color:var(--text-muted);font-size:12px;margin-right:8px">Full page:</span>+  <code style="color:var(--accent);font-size:11px;background:var(--elevated);padding:4px 8px;border-radius:4px;user-select:all">https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.html</code>+  <button class="open-full-btn" id="copyFullUrl" style="margin-left:8px">Copy Link</button>+</div>+<script>+if(window.self!==window.top){document.getElementById('fullPageBanner').style.display='flex'}+document.getElementById('copyFullUrl').addEventListener('click',function(){var t=document.createElement('textarea');t.value='https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.html';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.textContent='Copy Link'},1500)});+</script>++<div class="header">+  <div class="header-top">+    <div class="brand">Adom</div>+    <div class="vsep"></div>+    <div class="crumb">Components &rsaquo; LEDs &rsaquo; 0402</div>+  </div>+  <h1>IN-S42ATA &mdash; <span class="val">Amber</span></h1>+  <div class="subtitle">Inolux Corporation &middot; Top View SMD LED &middot; 0402 (1.0 &times; 0.5mm) &middot; AlInGaP</div>+  <div class="tags">+    <span class="tag pkg">0402</span>+    <span class="tag mfr">Inolux</span>+    <span class="tag series">IN-S42AT</span>+    <span class="tag rohs">RoHS</span>+    <span class="tag app">Amber LED</span>+  </div>+</div>++<div class="container">++  <!-- Key Specs -->+  <div class="section">+    <div class="spec-cards">+      <div class="spec-card highlight">+        <div class="sc-label">Wavelength</div>+        <div class="sc-value">605nm</div>+        <div class="sc-detail">610nm peak</div>+      </div>+      <div class="spec-card">+        <div class="sc-label">Luminous Intensity</div>+        <div class="sc-value">145mcd</div>+        <div class="sc-detail">@ 20mA</div>+      </div>+      <div class="spec-card">+        <div class="sc-label">Forward Voltage</div>+        <div class="sc-value">2.1V</div>+        <div class="sc-detail">max 2.6V</div>+      </div>+      <div class="spec-card">+        <div class="sc-label">Forward Current</div>+        <div class="sc-value">25mA</div>+        <div class="sc-detail">20mA typical</div>+      </div>+      <div class="spec-card">+        <div class="sc-label">Viewing Angle</div>+        <div class="sc-value">130&deg;</div>+        <div class="sc-detail">2&theta;&frac12;</div>+      </div>+      <div class="spec-card">+        <div class="sc-label">Mouser</div>+        <div class="sc-value">$0.26</div>+        <div class="sc-detail">7,587 in stock</div>+      </div>+    </div>+  </div>++  <div class="grid-2">+    <!-- Left column -->+    <div>+      <!-- Electrical Characteristics -->+      <div class="section">+        <h2 class="section-title">Electrical Characteristics</h2>+        <div class="card">+          <table class="detail-table">+            <tr><td>Forward Voltage (typ)</td><td>2.1V @ 20mA</td></tr>+            <tr><td>Forward Voltage (max)</td><td>2.6V @ 20mA</td></tr>+            <tr><td>Reverse Voltage (max)</td><td>5V</td></tr>+            <tr><td>Forward Current (max)</td><td>25mA</td></tr>+            <tr><td>Peak Forward Current</td><td>100mA (1/10, 0.1ms)</td></tr>+            <tr><td>Power Dissipation</td><td>78mW</td></tr>+            <tr><td>Dominant Wavelength</td><td>605nm</td></tr>+            <tr><td>Peak Wavelength</td><td>610nm</td></tr>+            <tr><td>Luminous Intensity</td><td>145 mcd @ 20mA</td></tr>+            <tr><td>Viewing Angle (2&theta;&frac12;)</td><td>130&deg;</td></tr>+            <tr><td>Material</td><td>AlInGaP</td></tr>+            <tr><td>Lens Type</td><td>Clear</td></tr>+          </table>+        </div>+      </div>++      <!-- Operating Conditions -->+      <div class="section">+        <h2 class="section-title">Operating Conditions</h2>+        <div class="card">+          <table class="detail-table">+            <tr><td>Operating Temp</td><td>&minus;30&deg;C to +80&deg;C</td></tr>+            <tr><td>Storage Temp</td><td>&minus;40&deg;C to +85&deg;C</td></tr>+            <tr><td>ESD Sensitivity</td><td>AlInGaP &mdash; handle with care</td></tr>+            <tr><td>Polarity</td><td>Cathode marked on package</td></tr>+          </table>+          <div style="margin-top:10px;padding:8px 12px;background:rgba(248,81,73,0.08);border:1px solid rgba(248,81,73,0.2);border-radius:6px;font-size:11px;color:var(--red)">+            &#9888; ESD Sensitive Device &mdash; AlInGaP LEDs require proper ESD precautions during handling and assembly. Use grounded wrist straps and ESD-safe workstations.+          </div>+        </div>+      </div>+    </div>++    <!-- Right column -->+    <div>+      <!-- Package Drawing -->+      <div class="section">+        <h2 class="section-title">Package &amp; Dimensions</h2>+        <div class="card">+          <div class="pkg-drawing">+            <svg width="100%" height="200" viewBox="0 0 500 200">+              <!-- Top view -->+              <text x="120" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Top View</text>+              <!-- LED body -->+              <rect x="55" y="24" width="130" height="65" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>+              <!-- Anode pad (left) -->+              <rect x="55" y="24" width="25" height="65" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+              <!-- Cathode pad (right) with mark -->+              <rect x="160" y="24" width="25" height="65" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+              <!-- Cathode mark (T-bar) -->+              <line x1="155" y1="28" x2="155" y2="85" stroke="#FF8C00" stroke-width="1.5" stroke-dasharray="3,2"/>+              <!-- Die representation -->+              <rect x="92" y="38" width="36" height="37" rx="1" fill="rgba(255,140,0,0.25)" stroke="rgba(255,140,0,0.5)" stroke-width="0.8"/>+              <!-- Bond wire -->+              <path d="M110,47 Q125,35 135,47" stroke="rgba(255,200,100,0.6)" stroke-width="0.6" fill="none"/>+              <!-- Cathode indicator -->+              <text x="168" y="18" fill="#FF8C00" font-size="9" text-anchor="middle">K (cathode)</text>+              <!-- Anode label -->+              <text x="68" y="18" fill="#8b949e" font-size="9" text-anchor="middle">A</text>++              <!-- Width dimension -->+              <line x1="55" y1="102" x2="185" y2="102" stroke="#484f58" stroke-width="0.5"/>+              <line x1="55" y1="98" x2="55" y2="106" stroke="#484f58" stroke-width="0.5"/>+              <line x1="185" y1="98" x2="185" y2="106" stroke="#484f58" stroke-width="0.5"/>+              <text x="120" y="118" fill="#e6edf3" font-size="10" text-anchor="middle">1.0 &plusmn; 0.1</text>++              <!-- Depth dimension -->+              <line x1="195" y1="24" x2="195" y2="89" stroke="#484f58" stroke-width="0.5"/>+              <line x1="191" y1="24" x2="199" y2="24" stroke="#484f58" stroke-width="0.5"/>+              <line x1="191" y1="89" x2="199" y2="89" stroke="#484f58" stroke-width="0.5"/>+              <text x="215" y="60" fill="#e6edf3" font-size="10">0.5 &plusmn; 0.1</text>++              <!-- Side view -->+              <text x="380" y="14" fill="#8b949e" font-size="10" text-anchor="middle">Side View</text>+              <!-- LED body side -->+              <rect x="315" y="40" width="130" height="38" rx="2" fill="#1c2128" stroke="#30363d" stroke-width="1.5"/>+              <!-- Lens (clear dome on top) -->+              <path d="M320,40 Q380,30 445,40" stroke="rgba(255,140,0,0.5)" stroke-width="1.5" fill="rgba(255,140,0,0.08)"/>+              <!-- Terminals -->+              <rect x="315" y="40" width="20" height="38" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+              <rect x="425" y="40" width="20" height="38" rx="1" fill="rgba(255,140,0,0.15)" stroke="#FF8C00" stroke-width="1"/>+              <!-- Height dimension -->+              <line x1="455" y1="30" x2="455" y2="78" stroke="#484f58" stroke-width="0.5"/>+              <line x1="451" y1="30" x2="459" y2="30" stroke="#484f58" stroke-width="0.5"/>+              <line x1="451" y1="78" x2="459" y2="78" stroke="#484f58" stroke-width="0.5"/>+              <text x="465" y="58" fill="#e6edf3" font-size="10">0.45 &plusmn; 0.1</text>++              <!-- Physical specs -->+              <text x="120" y="145" fill="#8b949e" font-size="10" text-anchor="middle">0402 (1005 metric)</text>+              <text x="380" y="100" fill="#8b949e" font-size="10" text-anchor="middle">Clear lens &middot; AlInGaP</text>++              <!-- Polarity note -->+              <rect x="55" y="158" width="390" height="28" rx="4" fill="rgba(255,140,0,0.06)" stroke="rgba(255,140,0,0.2)" stroke-width="0.5"/>+              <text x="250" y="176" fill="#FF8C00" font-size="10" text-anchor="middle">&#9888; Polarized &mdash; cathode mark on package indicates negative terminal</text>+            </svg>+          </div>+        </div>+      </div>++      <!-- Land Pattern -->+      <div class="section">+        <h2 class="section-title">Recommended Land Pattern</h2>+        <div class="card">+          <table class="detail-table">+            <tr><td>Pad Width</td><td>0.4 &plusmn; 0.1mm</td></tr>+            <tr><td>Pad Height</td><td>0.6 &plusmn; 0.1mm</td></tr>+            <tr><td>Pad Spacing (center-to-center)</td><td>0.6 &plusmn; 0.1mm</td></tr>+            <tr><td>Polarity</td><td>Cathode marked on PCB</td></tr>+          </table>+        </div>+      </div>+    </div>+  </div>++  <!-- Color Swatch -->+  <div class="section">+    <h2 class="section-title">Emission Color</h2>+    <div class="card color-swatch">+      <div class="swatch-block" style="background: linear-gradient(135deg, #FF8C00, #FF6600); box-shadow: 0 4px 24px rgba(255,140,0,0.3); display:flex; align-items:center; justify-content:center;">+        <span style="font-size:28px;font-weight:700;font-family:'Familjen Grotesk',sans-serif;color:#fff;text-shadow:0 2px 8px rgba(0,0,0,0.5)">Amber</span>+      </div>+      <div class="swatch-label" style="color:var(--amber)">605nm Dominant Wavelength</div>+      <div class="swatch-detail">Peak wavelength 610nm &middot; AlInGaP semiconductor &middot; CSS approximation: #FF8C00</div>+    </div>+  </div>++  <!-- Chart 1: Spectral Distribution -->+  <div class="section">+    <h2 class="section-title">Spectral Distribution</h2>+    <div class="chart-wrap">+      <h3>Emission Spectrum &mdash; Relative Intensity vs. Wavelength</h3>+      <svg id="spectral-chart" width="100%" height="280" viewBox="0 0 700 280">+        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+        <!-- Grid -->+        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="20" x2="660" y2="20" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <!-- Vertical grid -->+        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++        <!-- Spectral curve (Gaussian-like, peak at 605nm) -->+        <!-- x scale: 500nm=60, 700nm=660, so 1nm = 3px -->+        <!-- y scale: 0%=220, 100%=20, so 1% = 2px -->+        <!-- Fill area under curve -->+        <path d="M60,220 L60,220 Q120,220 180,219 Q240,218 285,210 Q300,205 315,190 Q330,160 345,120 Q352,90 358,50 Q363,28 369,22 Q375,28 381,50 Q387,90 394,120 Q408,160 423,190 Q438,205 453,210 Q498,218 540,219 Q600,220 660,220 Z"+              fill="url(#amberGrad)" opacity="0.3"/>+        <defs>+          <linearGradient id="amberGrad" x1="0" y1="0" x2="0" y2="1">+            <stop offset="0%" stop-color="#FF8C00" stop-opacity="0.6"/>+            <stop offset="100%" stop-color="#FF8C00" stop-opacity="0.05"/>+          </linearGradient>+        </defs>+        <!-- Spectral curve line -->+        <path d="M60,220 Q120,220 180,219 Q240,218 285,210 Q300,205 315,190 Q330,160 345,120 Q352,90 358,50 Q363,28 369,22 Q375,28 381,50 Q387,90 394,120 Q408,160 423,190 Q438,205 453,210 Q498,218 540,219 Q600,220 660,220"+              stroke="#FF8C00" stroke-width="2.5" fill="none"/>++        <!-- Peak annotation -->+        <circle cx="369" cy="22" r="4" fill="#FF8C00" opacity="0.9"/>+        <line x1="369" y1="22" x2="369" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+        <text x="369" y="238" fill="#FF8C00" font-size="10" text-anchor="middle">605nm</text>++        <!-- FWHM indicator -->+        <line x1="345" y1="120" x2="394" y2="120" stroke="#FF8C00" stroke-width="1" stroke-dasharray="4,2" opacity="0.6"/>+        <text x="420" y="116" fill="#8b949e" font-size="9">FWHM ~20nm</text>++        <!-- Y axis labels -->+        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0%</text>+        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">25%</text>+        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">50%</text>+        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">75%</text>+        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">100%</text>+        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Intensity</text>++        <!-- X axis labels -->+        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">500</text>+        <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">540</text>+        <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">580</text>+        <text x="420" y="255" fill="#484f58" font-size="9" text-anchor="middle">620</text>+        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">660</text>+        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">700</text>+        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Wavelength (nm)</text>+      </svg>+      <div class="chart-note">Amber emission centered at 605nm dominant wavelength (610nm peak). The narrow spectral width (~20nm FWHM) indicates a well-defined color output typical of AlInGaP LEDs.</div>+    </div>+  </div>++  <!-- Chart 2: IV Curve -->+  <div class="section">+    <h2 class="section-title">Forward Current vs. Forward Voltage</h2>+    <div class="chart-wrap">+      <h3>IV Characteristic &mdash; the essential curve for circuit design</h3>+      <svg id="iv-chart" width="100%" height="280" viewBox="0 0 700 280">+        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+        <!-- Grid -->+        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="20" x2="660" y2="20" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <!-- Vertical grid -->+        <line x1="231" y1="20" x2="231" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="403" y1="20" x2="403" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="574" y1="20" x2="574" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++        <!-- IV curve (exponential characteristic) -->+        <path d="M60,220 L231,220 Q300,219 345,218 Q380,216 403,210 Q425,198 440,180 Q455,155 470,120 Q485,85 500,55 Q515,30 530,20"+              stroke="#FF8C00" stroke-width="2.5" fill="none"/>++        <!-- Fill under curve -->+        <path d="M60,220 L231,220 Q300,219 345,218 Q380,216 403,210 Q425,198 440,180 Q455,155 470,120 Q485,85 500,55 Q515,30 530,20 L530,220 Z"+              fill="url(#amberGrad)" opacity="0.15"/>++        <!-- Operating point marker: 2.1V, 20mA -->+        <circle cx="440" cy="140" r="5" fill="#FF8C00" opacity="0.9"/>+        <line x1="440" y1="140" x2="440" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>+        <line x1="60" y1="140" x2="440" y2="140" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>+        <rect x="445" y="126" width="100" height="28" rx="4" fill="rgba(255,140,0,0.12)"/>+        <text x="495" y="140" fill="#FF8C00" font-size="10" text-anchor="middle">Typ: 2.1V, 20mA</text>+        <text x="495" y="150" fill="#8b949e" font-size="8" text-anchor="middle">Operating point</text>++        <!-- Max Vf line -->+        <line x1="489" y1="20" x2="489" y2="220" stroke="#f85149" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.5"/>+        <text x="489" y="248" fill="#f85149" font-size="9" text-anchor="middle">2.6V max</text>++        <!-- Max If line -->+        <line x1="60" y1="120" x2="660" y2="120" stroke="#f85149" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.3"/>+        <text x="100" y="114" fill="#f85149" font-size="9">25mA max</text>++        <!-- Y axis labels -->+        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">12.5</text>+        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">25</text>+        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">37.5</text>+        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">50</text>+        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Forward Current (mA)</text>++        <!-- X axis labels -->+        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>+        <text x="231" y="255" fill="#484f58" font-size="9" text-anchor="middle">1.0</text>+        <text x="403" y="255" fill="#484f58" font-size="9" text-anchor="middle">2.0</text>+        <text x="574" y="255" fill="#484f58" font-size="9" text-anchor="middle">3.0</text>+        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Forward Voltage (V)</text>+      </svg>+      <div class="chart-note">Characteristic exponential IV curve for an AlInGaP amber LED. Near-zero current until threshold (~1.8V), then steep rise. Design point: 2.1V typical at 20mA. Never exceed 2.6V forward or 25mA continuous.</div>+    </div>+  </div>++  <!-- Chart 3: Current Derating -->+  <div class="section">+    <h2 class="section-title">Forward Current Derating</h2>+    <div class="chart-wrap">+      <h3>Maximum Forward Current vs. Ambient Temperature</h3>+      <svg id="derating-chart" width="100%" height="280" viewBox="0 0 700 280">+        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+        <!-- Grid -->+        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <!-- Vertical grid -->+        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++        <!-- Derating curve: linear from ~30mA at 25C to ~5mA at 80C -->+        <!-- x scale: 0C=60, 100C=660, so 1C = 6px -->+        <!-- y scale: 0mA=220, 30mA=20, so 1mA ~= 6.67px -->+        <!-- 25C -> x=210, 30mA -> y=20 -->+        <!-- 80C -> x=540, 5mA -> y=187 -->+        <path d="M210,20 L540,187" stroke="#FF8C00" stroke-width="2.5" fill="none"/>+        <!-- Extend flat at left -->+        <path d="M60,20 L210,20" stroke="#FF8C00" stroke-width="2.5" fill="none"/>+        <!-- Extend to zero at right (extrapolate to ~84C) -->+        <path d="M540,187 L565,220" stroke="#FF8C00" stroke-width="2.5" fill="none" stroke-dasharray="4,3"/>++        <!-- Fill under curve -->+        <path d="M60,20 L210,20 L540,187 L565,220 L60,220 Z" fill="url(#amberGrad)" opacity="0.12"/>++        <!-- 25C marker -->+        <circle cx="210" cy="20" r="4" fill="#FF8C00" opacity="0.9"/>+        <text x="210" y="40" fill="#FF8C00" font-size="10" text-anchor="middle">30mA @ 25&deg;C</text>++        <!-- 80C marker -->+        <circle cx="540" cy="187" r="4" fill="#FF8C00" opacity="0.9"/>+        <text x="540" y="178" fill="#FF8C00" font-size="10" text-anchor="middle">5mA @ 80&deg;C</text>++        <!-- Safe region label -->+        <rect x="200" y="100" width="110" height="20" rx="4" fill="rgba(63,185,80,0.12)"/>+        <text x="255" y="114" fill="#3fb950" font-size="10" text-anchor="middle">Safe operating</text>++        <!-- Y axis labels -->+        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">7.5</text>+        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">15</text>+        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">22.5</text>+        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">30</text>+        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Max If (mA)</text>++        <!-- X axis labels -->+        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>+        <text x="210" y="255" fill="#484f58" font-size="9" text-anchor="middle">25</text>+        <text x="360" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>+        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">80</text>+        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">100</text>+        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Ambient Temperature (&deg;C)</text>+      </svg>+      <div class="chart-note">Maximum allowable forward current decreases linearly with temperature. At 80&deg;C ambient, derate to only 5mA. Design margin is critical in enclosed or high-temperature applications.</div>+    </div>+  </div>++  <!-- Chart 4: Relative Luminous Intensity vs Current -->+  <div class="section">+    <h2 class="section-title">Luminous Intensity vs. Forward Current</h2>+    <div class="chart-wrap">+      <h3>Relative Brightness (normalized at 20mA)</h3>+      <svg id="brightness-current-chart" width="100%" height="280" viewBox="0 0 700 280">+        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+        <!-- Grid -->+        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <!-- Vertical grid -->+        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++        <!-- Brightness vs current curve (sublinear / sqrt-like) -->+        <!-- x: 0mA=60, 50mA=660 => 12px/mA -->+        <!-- y: 0=220, 2.0=20 => 100px per 1.0 -->+        <!-- Points: 0mA=0, 5mA=0.4, 10mA=0.65, 15mA=0.85, 20mA=1.0, 25mA=1.12, 30mA=1.25, 40mA=1.55, 50mA=1.8 -->+        <path d="M60,220 Q120,168 180,155 Q240,135 300,120 Q360,106 420,95 Q480,78 540,64 Q600,52 660,40"+              stroke="#FF8C00" stroke-width="2.5" fill="none"/>++        <!-- Linear reference line (dashed) -->+        <path d="M60,220 L660,20" stroke="#484f58" stroke-width="1" stroke-dasharray="5,4" opacity="0.4"/>+        <text x="600" y="50" fill="#484f58" font-size="9">Linear</text>++        <!-- 1.0 reference at 20mA -->+        <circle cx="300" cy="120" r="5" fill="#FF8C00" opacity="0.9"/>+        <line x1="60" y1="120" x2="300" y2="120" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+        <line x1="300" y1="120" x2="300" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+        <text x="310" y="114" fill="#FF8C00" font-size="10">1.0 @ 20mA</text>++        <!-- Y axis labels -->+        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">0.5</text>+        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">1.0</text>+        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">1.5</text>+        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">2.0</text>+        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Brightness</text>++        <!-- X axis labels -->+        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">0</text>+        <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">10</text>+        <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">20</text>+        <text x="420" y="255" fill="#484f58" font-size="9" text-anchor="middle">30</text>+        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">40</text>+        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>+        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Forward Current (mA)</text>+      </svg>+      <div class="chart-note">Brightness increases sublinearly with current. Doubling the current from 20mA to 40mA yields only ~55% more light, not 100%. This means diminishing returns at higher drive currents &mdash; optimize for efficiency at or below 20mA.</div>+    </div>+  </div>++  <!-- Chart 5: Brightness vs Temperature -->+  <div class="section">+    <h2 class="section-title">Luminous Intensity vs. Temperature</h2>+    <div class="chart-wrap">+      <h3>Relative Brightness vs. Ambient Temperature (normalized at 25&deg;C)</h3>+      <svg id="brightness-temp-chart" width="100%" height="280" viewBox="0 0 700 280">+        <rect x="60" y="20" width="600" height="200" fill="#0d1117" rx="4"/>+        <!-- Grid -->+        <line x1="60" y1="220" x2="660" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="20" x2="60" y2="220" stroke="#21262d" stroke-width="1"/>+        <line x1="60" y1="170" x2="660" y2="170" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="120" x2="660" y2="120" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="60" y1="70" x2="660" y2="70" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <!-- Vertical grid -->+        <line x1="180" y1="20" x2="180" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="300" y1="20" x2="300" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="420" y1="20" x2="420" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>+        <line x1="540" y1="20" x2="540" y2="220" stroke="#21262d" stroke-width="0.5" stroke-dasharray="4,4"/>++        <!-- Temperature range: -30C to +70C mapped to x: 60..660 => 6px/C -->+        <!-- Brightness range: 0..2.0 mapped to y: 220..20 => 100px per 1.0 -->+        <!-- Points: -30C=1.5, -10C=1.3, 0C=1.2, 10C=1.1, 25C=1.0, 40C=0.88, 50C=0.8, 60C=0.75, 70C=0.7 -->+        <!-- -30C: x=60, y=70 | 25C: x=390, y=120 | 70C: x=660, y=150 -->+        <path d="M60,70 L180,95 L240,105 L300,112 L390,120 L480,134 L540,142 L600,148 L660,150"+              stroke="#FF8C00" stroke-width="2.5" fill="none"/>++        <!-- 1.0 reference at 25C -->+        <circle cx="390" cy="120" r="5" fill="#FF8C00" opacity="0.9"/>+        <line x1="60" y1="120" x2="390" y2="120" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+        <line x1="390" y1="120" x2="390" y2="220" stroke="#FF8C00" stroke-width="0.5" stroke-dasharray="3,3" opacity="0.4"/>+        <text x="400" y="114" fill="#FF8C00" font-size="10">1.0 @ 25&deg;C</text>++        <!-- Cold note -->+        <text x="100" y="62" fill="#58a6ff" font-size="9">Brighter when cold</text>+        <!-- Hot note -->+        <text x="570" y="165" fill="#f85149" font-size="9">Dimmer when hot</text>++        <!-- Y axis labels -->+        <text x="55" y="224" fill="#484f58" font-size="9" text-anchor="end">0</text>+        <text x="55" y="174" fill="#484f58" font-size="9" text-anchor="end">0.5</text>+        <text x="55" y="124" fill="#484f58" font-size="9" text-anchor="end">1.0</text>+        <text x="55" y="74" fill="#484f58" font-size="9" text-anchor="end">1.5</text>+        <text x="55" y="24" fill="#484f58" font-size="9" text-anchor="end">2.0</text>+        <text x="12" y="124" fill="#484f58" font-size="9" text-anchor="middle" transform="rotate(-90,12,124)">Relative Brightness</text>++        <!-- X axis labels -->+        <text x="60" y="255" fill="#484f58" font-size="9" text-anchor="middle">-30</text>+        <text x="180" y="255" fill="#484f58" font-size="9" text-anchor="middle">-10</text>+        <text x="300" y="255" fill="#484f58" font-size="9" text-anchor="middle">10</text>+        <text x="390" y="255" fill="#484f58" font-size="9" text-anchor="middle">25</text>+        <text x="540" y="255" fill="#484f58" font-size="9" text-anchor="middle">50</text>+        <text x="660" y="255" fill="#484f58" font-size="9" text-anchor="middle">70</text>+        <text x="360" y="272" fill="#484f58" font-size="9" text-anchor="middle">Ambient Temperature (&deg;C)</text>+      </svg>+      <div class="chart-note">AlInGaP LEDs lose brightness at elevated temperatures. At 70&deg;C, expect ~30% reduction in luminous intensity. Conversely, the LED is ~50% brighter at -30&deg;C. Account for this in designs with wide temperature swings.</div>+    </div>+  </div>++  <!-- Resistor Calculator -->+  <div class="section">+    <h2 class="section-title">LED Resistor Calculator</h2>+    <div class="calc-card">+      <h3>&#9889; Series Resistor Selection</h3>+      <div class="calc-inputs">+        <div class="calc-field">+          <label>Supply Voltage</label>+          <input type="number" id="calc-vsupply" value="3.3" step="0.1" min="0">+          <div class="unit">Volts</div>+        </div>+        <div class="calc-field">+          <label>Desired Current</label>+          <input type="number" id="calc-iled" value="20" step="1" min="0">+          <div class="unit">Milliamps</div>+        </div>+      </div>+      <div class="calc-results">+        <div class="calc-result">+          <div class="cr-label">Calculated Resistor</div>+          <div class="cr-value" id="calc-r-exact">60.0 &Omega;</div>+          <div class="cr-detail" id="calc-r-formula">R = (3.3V - 2.1V) / 20mA</div>+        </div>+        <div class="calc-result">+          <div class="cr-label">Nearest E24 Value</div>+          <div class="cr-value" id="calc-r-e24">62 &Omega;</div>+          <div class="cr-detail" id="calc-r-actual">Actual If = 19.4mA</div>+        </div>+        <div class="calc-result">+          <div class="cr-label">Resistor Power</div>+          <div class="cr-value" id="calc-p-resistor">24.0 mW</div>+          <div class="cr-detail" id="calc-p-r-detail">P = (V<sub>supply</sub> - V<sub>f</sub>) &times; I<sub>f</sub></div>+        </div>+        <div class="calc-result">+          <div class="cr-label">LED Power</div>+          <div class="cr-value" id="calc-p-led">42.0 mW</div>+          <div class="cr-detail" id="calc-p-led-detail">P = V<sub>f</sub> &times; I<sub>f</sub> (max 78mW)</div>+        </div>+      </div>+      <div class="calc-schematic">+        <svg width="400" height="80" viewBox="0 0 400 80" style="max-width:100%">+          <!-- Supply -->+          <text x="20" y="38" fill="#e6edf3" font-size="11" font-family="JetBrains Mono,monospace" id="calc-svg-vsupply">3.3V</text>+          <!-- Line from supply -->+          <line x1="50" y1="35" x2="90" y2="35" stroke="#e6edf3" stroke-width="1.5"/>+          <!-- Resistor symbol -->+          <path d="M90,35 L100,25 L110,45 L120,25 L130,45 L140,25 L150,45 L160,35" stroke="#00b8b0" stroke-width="2" fill="none"/>+          <text x="125" y="60" fill="#00b8b0" font-size="10" text-anchor="middle" font-family="JetBrains Mono,monospace" id="calc-svg-r">62&Omega;</text>+          <!-- Line to LED -->+          <line x1="160" y1="35" x2="210" y2="35" stroke="#e6edf3" stroke-width="1.5"/>+          <!-- LED symbol (triangle + bar) -->+          <polygon points="210,22 210,48 240,35" fill="none" stroke="#FF8C00" stroke-width="2"/>+          <line x1="240" y1="22" x2="240" y2="48" stroke="#FF8C00" stroke-width="2"/>+          <!-- Light arrows -->+          <line x1="230" y1="18" x2="238" y2="10" stroke="#FF8C00" stroke-width="1"/>+          <line x1="235" y1="22" x2="243" y2="14" stroke="#FF8C00" stroke-width="1"/>+          <polygon points="238,10 234,13 237,14" fill="#FF8C00"/>+          <polygon points="243,14 239,17 242,18" fill="#FF8C00"/>+          <text x="225" y="65" fill="#FF8C00" font-size="10" text-anchor="middle" font-family="JetBrains Mono,monospace">LED</text>+          <!-- Line to ground -->+          <line x1="240" y1="35" x2="300" y2="35" stroke="#e6edf3" stroke-width="1.5"/>+          <!-- Ground symbol -->+          <line x1="300" y1="28" x2="300" y2="42" stroke="#e6edf3" stroke-width="1.5"/>+          <line x1="290" y1="42" x2="310" y2="42" stroke="#e6edf3" stroke-width="1.5"/>+          <line x1="294" y1="47" x2="306" y2="47" stroke="#e6edf3" stroke-width="1.2"/>+          <line x1="297" y1="52" x2="303" y2="52" stroke="#e6edf3" stroke-width="0.8"/>+          <text x="320" y="42" fill="#8b949e" font-size="10" font-family="JetBrains Mono,monospace">GND</text>+          <!-- Current arrow -->+          <text x="180" y="26" fill="#8b949e" font-size="9" text-anchor="middle" font-family="JetBrains Mono,monospace" id="calc-svg-if">20mA</text>+          <line x1="168" y1="30" x2="192" y2="30" stroke="#8b949e" stroke-width="0.5"/>+          <polygon points="192,30 187,27 187,33" fill="#8b949e"/>+        </svg>+      </div>+    </div>+  </div>++  <!-- Environmental -->+  <div class="section">+    <h2 class="section-title">Environmental &amp; Handling</h2>+    <div class="env-grid">+      <div class="env-card">+        <div class="env-name">ESD Sensitivity</div>+        <div class="env-spec">AlInGaP &mdash; ESD precautions required</div>+        <div class="env-detail">Use grounded wrist straps &amp; ESD-safe tools</div>+      </div>+      <div class="env-card">+        <div class="env-name">Operating Temperature</div>+        <div class="env-spec">Continuous operation range</div>+        <div class="env-detail">&minus;30&deg;C to +80&deg;C</div>+      </div>+      <div class="env-card">+        <div class="env-name">Storage Temperature</div>+        <div class="env-spec">Unbiased storage</div>+        <div class="env-detail">&minus;40&deg;C to +85&deg;C</div>+      </div>+      <div class="env-card">+        <div class="env-name">Moisture Sensitivity</div>+        <div class="env-spec">MSL noted in packaging</div>+        <div class="env-detail">Follow J-STD-020 bake requirements</div>+      </div>+    </div>+  </div>++  <!-- Symbol, Footprint & 3D View -->+  <div class="section">+    <h2 class="section-title">Symbol, Footprint &amp; 3D Model</h2>+    <div class="grid-2" style="margin-bottom:12px">+      <!-- Interactive SymView -->+      <div class="card" style="padding:0;overflow:hidden">+        <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Schematic Symbol</div>+        <iframe src="IN-S42ATA-symview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>+      </div>+      <!-- Interactive FpView -->+      <div class="card" style="padding:0;overflow:hidden">+        <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Footprint (0402)</div>+        <iframe src="IN-S42ATA-fpview.html" style="width:100%;height:340px;border:none;display:block" allow="fullscreen"></iframe>+      </div>+    </div>+    <!-- 3D Model -->+    <div class="card" style="text-align:center;margin-bottom:12px">+      <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);margin-bottom:12px">3D Model (interactive)</div>+      <canvas id="viewer3d" width="600" height="300" style="width:100%;height:300px;border-radius:4px;cursor:grab"></canvas>+      <div style="font-size:10px;color:var(--text-dim);margin-top:6px">Click &amp; drag to rotate &middot; Scroll to zoom</div>+    </div>+    <!-- Download / Export Bar -->+    <div class="card" style="display:flex;align-items:center;gap:10px;flex-wrap:wrap">+      <span style="font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.5px">Export:</span>+      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.kicad_sym" download>KiCad Symbol (.kicad_sym)</a>+      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.kicad_mod" download>KiCad Footprint (.kicad_mod)</a>+      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.lbr" download>Fusion 360 (.lbr)</a>+      <a class="dl-btn" href="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/IN-S42ATA.step" download>3D Model (.step)</a>+    </div>+  </div>++  <!-- Pricing & Availability -->+  <div class="section">+    <h2 class="section-title">Pricing &amp; Availability</h2>+    <div class="vendor-cards">+      <div class="vendor-card recommended">+        <div class="vc-name mouser">Mouser Electronics</div>+        <div class="vc-price">$0.26</div>+        <div class="vc-detail">7,587 in stock</div>+        <a class="vc-link" href="https://www.mouser.com/ProductDetail/Inolux/IN-S42ATA?qs=qSfuJ%252Bfl%2Fd4ijVfKKelGRg%3D%3D" target="_blank">View on Mouser &rarr;</a>+      </div>+      <div class="vendor-card">+        <div class="vc-name digikey">DigiKey</div>+        <div class="vc-price">$0.26</div>+        <div class="vc-detail">20,960 in stock</div>+        <a class="vc-link" href="https://www.digikey.com/en/products/detail/inolux/IN-S42ATA/7604959" target="_blank">View on DigiKey &rarr;</a>+      </div>+      <div class="vendor-card">+        <div class="vc-name jlcpcb">JLCPCB / LCSC</div>+        <div class="vc-price">&mdash;</div>+        <div class="vc-detail">Not listed</div>+      </div>+    </div>+  </div>++  <!-- Documents -->+  <div class="section">+    <h2 class="section-title">Documents</h2>+    <div class="card">+      <table class="detail-table">+        <tr><td>Datasheet</td><td><button class="copy-btn" title="Copy link to clipboard" id="ds-copy-btn">&#x2398;</button>+<script>document.getElementById('ds-copy-btn').addEventListener('click',function(){var t=document.createElement('textarea');t.value='http://www.inolux-corp.com/datasheet/SMDLED/Mono%20Color%20Top%20View/IN-S42AT%20Series_V1.1.pdf';document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);this.textContent='Copied!';var b=this;setTimeout(function(){b.innerHTML='⎘'},1500)})</script> <a href="http://www.inolux-corp.com/datasheet/SMDLED/Mono%20Color%20Top%20View/IN-S42AT%20Series_V1.1.pdf" target="_blank">IN-S42AT Series V1.1 (PDF) &rarr;</a></td></tr>+        <tr><td>Series</td><td>IN-S42AT</td></tr>+        <tr><td>Manufacturer</td><td>Inolux Corporation</td></tr>+      </table>+    </div>+  </div>++  <!-- Molecule -->+  <div class="section">+    <h2 class="section-title">Molecule &mdash; Single-Passive Board</h2>+    <div class="card" style="padding:0;overflow:hidden;border-radius:8px">+      <div style="font-size:12px;font-weight:500;text-transform:uppercase;letter-spacing:0.5px;color:var(--text-dim);padding:12px 16px 0">Interactive 3D Board Viewer</div>+      <iframe src="https://wiki-ufypy5dpx93o.adom.cloud/static/libraries/in-s42ata/tsci-viewer/molecule-viewer/index.html"+              style="width:100%;height:500px;border:none;border-radius:0 0 8px 8px;display:block"+              allow="fullscreen"></iframe>+    </div>+    <div style="font-size:11px;color:var(--text-dim);margin-top:8px;text-align:center">+      Orbit: click &amp; drag &middot; Zoom: scroll &middot; Inspect: click a component &middot; X-ray: toggle in toolbar+    </div>+  </div>++  <div class="source">+    IN-S42ATA characterization &middot; Data from Inolux IN-S42AT Series V1.1 datasheet + adom-parts-search &middot; 2026-06-03+  </div>++</div>++<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>+<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/pmrem/PMREMGenerator.js"></script>+<script>+(function() {+  // ==================== 3D Viewer — IN-S42ATA (0402 LED, amber) ====================+  const canvas = document.getElementById('viewer3d');+  if (canvas && window.THREE) {+    const scene = new THREE.Scene();++    const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true, logarithmicDepthBuffer: true });+    renderer.setSize(canvas.width, canvas.height);+    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));+    renderer.outputEncoding = THREE.sRGBEncoding;+    renderer.toneMapping = THREE.ACESFilmicToneMapping;+    renderer.toneMappingExposure = 1.2;+    renderer.physicallyCorrectLights = true;++    canvas.style.background = 'linear-gradient(180deg, #5a6b7e 0%, #2a3340 100%)';++    const camera = new THREE.PerspectiveCamera(35, canvas.width / canvas.height, 0.01, 1000);++    // Procedural environment map+    const pmremGen = new THREE.PMREMGenerator(renderer);+    pmremGen.compileEquirectangularShader();+    const envScene = new THREE.Scene();+    envScene.background = new THREE.Color(0x3a4550);+    const envLight1 = new THREE.DirectionalLight(0xffffff, 2);+    envLight1.position.set(1, 3, 2);+    envScene.add(envLight1);+    const envLight2 = new THREE.DirectionalLight(0x8899bb, 1);+    envLight2.position.set(-2, 1, -1);+    envScene.add(envLight2);+    const envRT = pmremGen.fromScene(envScene, 0.04);+    scene.environment = envRT.texture;++    // Studio lighting+    const hemi = new THREE.HemisphereLight(0xe6edf3, 0xb3a699, 0.5);+    scene.add(hemi);+    const keyLight = new THREE.DirectionalLight(0xffffff, 1.5);+    keyLight.position.set(2, 5, 3);+    scene.add(keyLight);+    const fillLight = new THREE.DirectionalLight(0x8899aa, 0.5);+    fillLight.position.set(-3, 2, -2);+    scene.add(fillLight);+    const rimLight = new THREE.DirectionalLight(0xff8c00, 0.4);+    rimLight.position.set(0, -1, 3);+    scene.add(rimLight);++    const S = 2.5; // Scale for tiny 0402++    // PBR Materials for LED+    const bodyMat = new THREE.MeshStandardMaterial({+      color: 0x2a2018, metalness: 0.0, roughness: 0.4+    });+    const lensMat = new THREE.MeshStandardMaterial({+      color: 0xFF8C00, metalness: 0.0, roughness: 0.15,+      transparent: true, opacity: 0.55,+      emissive: 0xFF6600, emissiveIntensity: 0.3+    });+    const termMat = new THREE.MeshStandardMaterial({+      color: 0xc8ccd1, metalness: 1.0, roughness: 0.25,+      polygonOffset: true, polygonOffsetFactor: -1, polygonOffsetUnits: -1+    });+    const padMat = new THREE.MeshStandardMaterial({ color: 0xc9a04c, metalness: 1.0, roughness: 0.22 });+    const pcbMat = new THREE.MeshStandardMaterial({ color: 0x0a2a0a, metalness: 0.0, roughness: 0.6 });+    const cathodeMat = new THREE.MeshStandardMaterial({ color: 0xFF8C00, emissive: 0xFF6600, emissiveIntensity: 0.5, metalness: 0.0, roughness: 0.5 });++    // LED body: 1.0 x 0.5 x 0.45mm+    const bodyW = 1.0, bodyD = 0.5, bodyH = 0.30; // base part+    const lensH = 0.15; // lens on top+    const termW = 0.20;++    // Body base (dark substrate)+    const innerW = bodyW - termW * 2 + 0.02;+    const body = new THREE.Mesh(new THREE.BoxGeometry(innerW*S, bodyH*S, bodyD*S), bodyMat);+    body.position.y = bodyH*S/2;+    scene.add(body);++    // Amber lens on top+    const lens = new THREE.Mesh(new THREE.BoxGeometry(bodyW*0.85*S, lensH*S, bodyD*0.85*S), lensMat);+    lens.position.y = (bodyH + lensH/2)*S;+    scene.add(lens);++    // Terminals+    function makeTerminal(xSign) {+      const group = new THREE.Group();+      const front = new THREE.Mesh(new THREE.BoxGeometry(termW*S, bodyH*S, bodyD*S*0.99), termMat);+      front.position.set(xSign*(bodyW/2 - termW/2)*S, bodyH*S/2, 0);+      group.add(front);+      const bot = new THREE.Mesh(new THREE.BoxGeometry((termW+0.03)*S, 0.04*S, bodyD*S*0.99), termMat);+      bot.position.set(xSign*(bodyW/2 - termW/2)*S, 0.02*S, 0);+      group.add(bot);+      return group;+    }+    scene.add(makeTerminal(-1)); // anode+    scene.add(makeTerminal(1));  // cathode++    // Cathode mark (small line on top of body, cathode side)+    const cathMark = new THREE.Mesh(new THREE.BoxGeometry(0.02*S, 0.02*S, bodyD*0.7*S), cathodeMat);+    cathMark.position.set(0.25*S, (bodyH + lensH + 0.02)*S, 0);+    scene.add(cathMark);++    // PCB+    const pcb = new THREE.Mesh(new THREE.BoxGeometry(10*S, 0.08*S, 8*S), pcbMat);+    pcb.position.y = -0.04*S;+    scene.add(pcb);++    // Gold pads+    const pad1 = new THREE.Mesh(new THREE.BoxGeometry(0.4*S, 0.025*S, 0.6*S), padMat);+    pad1.position.set(-0.3*S, 0.005*S, 0);+    scene.add(pad1);+    const pad2 = new THREE.Mesh(new THREE.BoxGeometry(0.4*S, 0.025*S, 0.6*S), padMat);+    pad2.position.set(0.3*S, 0.005*S, 0);+    scene.add(pad2);++    // Grid+    const gridMat2 = new THREE.LineBasicMaterial({ color: 0x0d3d0d, transparent: true, opacity: 0.3 });+    for (let i = -8; i <= 8; i++) {+      const pts1 = [new THREE.Vector3(i*0.4*S, 0.045*S, -4*S), new THREE.Vector3(i*0.4*S, 0.045*S, 4*S)];+      scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts1), gridMat2));+      const pts2 = [new THREE.Vector3(-4*S, 0.045*S, i*0.4*S), new THREE.Vector3(4*S, 0.045*S, i*0.4*S)];+      scene.add(new THREE.Line(new THREE.BufferGeometry().setFromPoints(pts2), gridMat2));+    }++    // Camera orbit+    let isDragging = false, prevX = 0, prevY = 0;+    let theta = Math.PI/4, phi = Math.PI/5.5, radius = 5.0;+    const target = new THREE.Vector3(0, 0.4, 0);++    function updateCamera() {+      camera.position.x = radius * Math.sin(theta) * Math.cos(phi);+      camera.position.y = radius * Math.sin(phi) + target.y;+      camera.position.z = radius * Math.cos(theta) * Math.cos(phi);+      camera.lookAt(target);+    }+    updateCamera();++    canvas.addEventListener('mousedown', function(e) { isDragging = true; prevX = e.clientX; prevY = e.clientY; canvas.style.cursor = 'grabbing'; });+    window.addEventListener('mouseup', function() { isDragging = false; canvas.style.cursor = 'grab'; });+    canvas.addEventListener('mousemove', function(e) {+      if (!isDragging) return;+      theta -= (e.clientX - prevX) * 0.008;+      phi = Math.max(0.05, Math.min(Math.PI/2.2, phi + (e.clientY - prevY) * 0.008));+      prevX = e.clientX; prevY = e.clientY;+      updateCamera();+    });+    canvas.addEventListener('wheel', function(e) {+      e.preventDefault();+      radius = Math.max(2, Math.min(12, radius + e.deltaY * 0.004));+      updateCamera();+    }, { passive: false });++    function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); }+    animate();+  }++  // ==================== Chart Tooltip System ====================+  function setupChartTooltip(svgId, dataPoints, color, formatX, formatY) {+    var svg = document.getElementById(svgId);+    if (!svg) return;++    var ns = 'http://www.w3.org/2000/svg';++    var dot = document.createElementNS(ns, 'circle');+    dot.setAttribute('r', '5');+    dot.setAttribute('fill', color);+    dot.setAttribute('stroke', '#0d1117');+    dot.setAttribute('stroke-width', '2');+    dot.style.display = 'none';+    dot.style.pointerEvents = 'none';+    svg.appendChild(dot);++    var tipGroup = document.createElementNS(ns, 'g');+    tipGroup.style.display = 'none';+    tipGroup.style.pointerEvents = 'none';++    var tipBg = document.createElementNS(ns, 'rect');+    tipBg.setAttribute('rx', '4');+    tipBg.setAttribute('fill', '#161b22');+    tipBg.setAttribute('stroke', '#30363d');+    tipBg.setAttribute('stroke-width', '1');++    var tipLine1 = document.createElementNS(ns, 'text');+    tipLine1.setAttribute('font-family', 'JetBrains Mono, monospace');+    tipLine1.setAttribute('font-size', '10');+    tipLine1.setAttribute('fill', '#e6edf3');++    var tipLine2 = document.createElementNS(ns, 'text');+    tipLine2.setAttribute('font-family', 'JetBrains Mono, monospace');+    tipLine2.setAttribute('font-size', '10');+    tipLine2.setAttribute('fill', color);++    tipGroup.appendChild(tipBg);+    tipGroup.appendChild(tipLine1);+    tipGroup.appendChild(tipLine2);+    svg.appendChild(tipGroup);++    var vLine = document.createElementNS(ns, 'line');+    vLine.setAttribute('stroke', color);+    vLine.setAttribute('stroke-width', '0.5');+    vLine.setAttribute('stroke-dasharray', '3,3');+    vLine.setAttribute('opacity', '0.5');+    vLine.style.display = 'none';+    vLine.style.pointerEvents = 'none';+    svg.appendChild(vLine);++    function lerp(pts, svgX) {+      if (svgX <= pts[0].sx) return pts[0];+      if (svgX >= pts[pts.length-1].sx) return pts[pts.length-1];+      for (var i = 0; i < pts.length - 1; i++) {+        if (svgX >= pts[i].sx && svgX <= pts[i+1].sx) {+          var t = (svgX - pts[i].sx) / (pts[i+1].sx - pts[i].sx);+          return {+            sx: svgX,+            sy: pts[i].sy + t * (pts[i+1].sy - pts[i].sy),+            vx: pts[i].vx + t * (pts[i+1].vx - pts[i].vx),+            vy: pts[i].vy + t * (pts[i+1].vy - pts[i].vy),+          };+        }+      }+      return pts[0];+    }++    svg.addEventListener('mousemove', function(e) {+      var pt = svg.createSVGPoint();+      pt.x = e.clientX;+      pt.y = e.clientY;+      var svgPt = pt.matrixTransform(svg.getScreenCTM().inverse());++      var minX = dataPoints[0].sx;+      var maxX = dataPoints[dataPoints.length-1].sx;+      if (svgPt.x < minX - 10 || svgPt.x > maxX + 10) {+        dot.style.display = 'none';+        tipGroup.style.display = 'none';+        vLine.style.display = 'none';+        return;+      }++      var p = lerp(dataPoints, svgPt.x);++      dot.setAttribute('cx', p.sx);+      dot.setAttribute('cy', p.sy);+      dot.style.display = '';++      vLine.setAttribute('x1', p.sx);+      vLine.setAttribute('y1', p.sy);+      vLine.setAttribute('x2', p.sx);+      vLine.setAttribute('y2', 220);+      vLine.style.display = '';++      var xLabel = formatX(p.vx);+      var yLabel = formatY(p.vy);+      tipLine1.textContent = xLabel;+      tipLine2.textContent = yLabel;++      var tipX = p.sx + 12;+      var tipY = p.sy - 28;+      var boxW = Math.max(xLabel.length, yLabel.length) * 7 + 16;+      var boxH = 32;++      var adjustedX = tipX + boxW > 660 ? p.sx - boxW - 12 : tipX;+      var adjustedY = tipY < 10 ? p.sy + 12 : tipY;++      tipBg.setAttribute('x', adjustedX);+      tipBg.setAttribute('y', adjustedY);+      tipBg.setAttribute('width', boxW);+      tipBg.setAttribute('height', boxH);++      tipLine1.setAttribute('x', adjustedX + 8);+      tipLine1.setAttribute('y', adjustedY + 13);+      tipLine2.setAttribute('x', adjustedX + 8);+      tipLine2.setAttribute('y', adjustedY + 26);++      tipGroup.style.display = '';+    });++    svg.addEventListener('mouseleave', function() {+      dot.style.display = 'none';+      tipGroup.style.display = 'none';+      vLine.style.display = 'none';+    });+  }++  // ==================== Chart 1: Spectral Distribution ====================+  // x: wavelength 500-700nm mapped to SVG 60-660 (3px/nm)+  // y: relative intensity 0-100% mapped to SVG 220-20+  var spectralData = [+    {sx:60,  sy:220, vx:500, vy:0},+    {sx:180, sy:219, vx:540, vy:0.5},+    {sx:240, sy:218, vx:560, vy:1},+    {sx:285, sy:210, vx:575, vy:5},+    {sx:300, sy:205, vx:580, vy:7.5},+    {sx:315, sy:190, vx:585, vy:15},+    {sx:330, sy:160, vx:590, vy:30},+    {sx:345, sy:120, vx:595, vy:50},+    {sx:352, sy:90,  vx:597, vy:65},+    {sx:358, sy:50,  vx:599, vy:85},+    {sx:363, sy:28,  vx:601, vy:96},+    {sx:369, sy:22,  vx:605, vy:100},+    {sx:375, sy:28,  vx:607, vy:96},+    {sx:381, sy:50,  vx:609, vy:85},+    {sx:387, sy:90,  vx:611, vy:65},+    {sx:394, sy:120, vx:613, vy:50},+    {sx:408, sy:160, vx:618, vy:30},+    {sx:423, sy:190, vx:623, vy:15},+    {sx:438, sy:205, vx:628, vy:7.5},+    {sx:453, sy:210, vx:633, vy:5},+    {sx:498, sy:218, vx:648, vy:1},+    {sx:540, sy:219, vx:660, vy:0.5},+    {sx:660, sy:220, vx:700, vy:0},+  ];++  setupChartTooltip('spectral-chart', spectralData, '#FF8C00',+    function(x) { return x.toFixed(0) + ' nm'; },+    function(y) { return 'Intensity: ' + y.toFixed(1) + '%'; }+  );++  // ==================== Chart 2: IV Curve ====================+  // x: Vf 0-3.5V mapped to SVG 60-660 (171.4px/V)+  // y: If 0-50mA mapped to SVG 220-20 (4px/mA)+  var ivData = [+    {sx:60,  sy:220, vx:0,    vy:0},+    {sx:231, sy:220, vx:1.0,  vy:0},+    {sx:300, sy:219, vx:1.4,  vy:0.25},+    {sx:345, sy:218, vx:1.65, vy:0.5},+    {sx:370, sy:216, vx:1.8,  vy:1},+    {sx:380, sy:214, vx:1.85, vy:1.5},+    {sx:390, sy:212, vx:1.9,  vy:2},+    {sx:403, sy:210, vx:2.0,  vy:2.5},+    {sx:410, sy:205, vx:2.04, vy:3.75},+    {sx:420, sy:198, vx:2.06, vy:5.5},+    {sx:430, sy:180, vx:2.08, vy:10},+    {sx:440, sy:140, vx:2.1,  vy:20},+    {sx:460, sy:120, vx:2.2,  vy:25},+    {sx:470, sy:100, vx:2.3,  vy:30},+    {sx:485, sy:80,  vx:2.4,  vy:35},+    {sx:500, sy:40,  vx:2.55, vy:45},+    {sx:510, sy:20,  vx:2.6,  vy:50},+  ];++  setupChartTooltip('iv-chart', ivData, '#FF8C00',+    function(x) { return 'Vf = ' + x.toFixed(2) + ' V'; },+    function(y) { return 'If = ' + y.toFixed(1) + ' mA'; }+  );++  // ==================== Chart 3: Current Derating ====================+  // x: temp 0-100C mapped to SVG 60-660 (6px/C)+  // y: max If 0-30mA mapped to SVG 220-20 (6.67px/mA)+  var deratingData = [+    {sx:60,  sy:20,  vx:0,   vy:30},+    {sx:210, sy:20,  vx:25,  vy:30},+    {sx:270, sy:53,  vx:35,  vy:25.5},+    {sx:330, sy:87,  vx:45,  vy:20},+    {sx:390, sy:120, vx:55,  vy:15},+    {sx:450, sy:153, vx:65,  vy:10},+    {sx:540, sy:187, vx:80,  vy:5},+    {sx:565, sy:220, vx:84,  vy:0},+  ];++  setupChartTooltip('derating-chart', deratingData, '#FF8C00',+    function(x) { return x.toFixed(0) + '°C'; },+    function(y) { return 'Max If = ' + y.toFixed(1) + ' mA'; }+  );++  // ==================== Chart 4: Brightness vs Current ====================+  // x: If 0-50mA mapped to SVG 60-660 (12px/mA)+  // y: relative 0-2.0 mapped to SVG 220-20 (100px per 1.0)+  var brightCurrentData = [+    {sx:60,  sy:220, vx:0,  vy:0},+    {sx:120, sy:168, vx:5,  vy:0.52},+    {sx:180, sy:148, vx:10, vy:0.72},+    {sx:240, sy:135, vx:15, vy:0.85},+    {sx:300, sy:120, vx:20, vy:1.0},+    {sx:360, sy:108, vx:25, vy:1.12},+    {sx:420, sy:95,  vx:30, vy:1.25},+    {sx:540, sy:69,  vx:40, vy:1.51},+    {sx:660, sy:40,  vx:50, vy:1.80},+  ];++  setupChartTooltip('brightness-current-chart', brightCurrentData, '#FF8C00',+    function(x) { return 'If = ' + x.toFixed(0) + ' mA'; },+    function(y) { return 'Brightness: ' + y.toFixed(2) + 'x'; }+  );++  // ==================== Chart 5: Brightness vs Temperature ====================+  // x: temp -30 to +70C mapped to SVG 60-660 (6px/C)+  // y: relative 0-2.0 mapped to SVG 220-20 (100px per 1.0)+  var brightTempData = [+    {sx:60,  sy:70,  vx:-30, vy:1.50},+    {sx:180, sy:95,  vx:-10, vy:1.25},+    {sx:240, sy:105, vx:0,   vy:1.15},+    {sx:300, sy:112, vx:10,  vy:1.08},+    {sx:390, sy:120, vx:25,  vy:1.00},+    {sx:480, sy:134, vx:40,  vy:0.86},+    {sx:540, sy:142, vx:50,  vy:0.78},+    {sx:600, sy:148, vx:60,  vy:0.72},+    {sx:660, sy:150, vx:70,  vy:0.70},+  ];++  setupChartTooltip('brightness-temp-chart', brightTempData, '#FF8C00',+    function(x) { return x.toFixed(0) + '°C'; },+    function(y) { return 'Brightness: ' + y.toFixed(2) + 'x'; }+  );++  // ==================== Resistor Calculator ====================+  var VF_TYP = 2.1;++  // E24 standard values (decade 10-100)+  var E24 = [10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91];++  function nearestE24(val) {+    if (val <= 0) return 0;+    // Find the decade+    var decade = 1;+    while (val >= 100) { val /= 10; decade *= 10; }+    while (val < 10) { val *= 10; decade /= 10; }+    // Find closest E24 value+    var best = E24[0], bestDist = Math.abs(val - E24[0]);+    for (var i = 1; i < E24.length; i++) {+      var d = Math.abs(val - E24[i]);+      if (d < bestDist) { bestDist = d; best = E24[i]; }+    }+    return best * decade;+  }++  function formatResistance(r) {+    if (r >= 1e6) return (r/1e6).toFixed(1) + ' MΩ';+    if (r >= 1e3) return (r/1e3).toFixed(0) + ' kΩ';+    if (r >= 100) return r.toFixed(0) + ' Ω';+    if (r >= 10) return r.toFixed(1) + ' Ω';+    return r.toFixed(2) + ' Ω';+  }++  function updateCalculator() {+    var vSupply = parseFloat(document.getElementById('calc-vsupply').value) || 0;+    var iLed = parseFloat(document.getElementById('calc-iled').value) || 0;+    var iLedA = iLed / 1000; // convert to amps++    var vDrop = vSupply - VF_TYP;+    var rExact = vDrop > 0 && iLedA > 0 ? vDrop / iLedA : 0;+    var rE24 = nearestE24(rExact);+    var iActual = rE24 > 0 ? vDrop / rE24 : 0;+    var pResistor = vDrop * iActual;+    var pLed = VF_TYP * iActual;++    // Update display+    document.getElementById('calc-r-exact').innerHTML = rExact > 0 ? formatResistance(rExact) : '&mdash;';+    document.getElementById('calc-r-formula').textContent = 'R = (' + vSupply.toFixed(1) + 'V - ' + VF_TYP + 'V) / ' + iLed.toFixed(0) + 'mA';+    document.getElementById('calc-r-e24').innerHTML = rE24 > 0 ? formatResistance(rE24) : '&mdash;';+    document.getElementById('calc-r-actual').textContent = iActual > 0 ? 'Actual If = ' + (iActual * 1000).toFixed(1) + 'mA' : '';+    document.getElementById('calc-p-resistor').textContent = pResistor > 0 ? (pResistor * 1000).toFixed(1) + ' mW' : '—';+    document.getElementById('calc-p-led').textContent = pLed > 0 ? (pLed * 1000).toFixed(1) + ' mW' : '—';++    // Update schematic SVG labels+    var svgVs = document.getElementById('calc-svg-vsupply');+    if (svgVs) svgVs.textContent = vSupply.toFixed(1) + 'V';+    var svgR = document.getElementById('calc-svg-r');+    if (svgR) svgR.textContent = rE24 > 0 ? formatResistance(rE24) : '—';+    var svgIf = document.getElementById('calc-svg-if');+    if (svgIf) svgIf.textContent = iActual > 0 ? (iActual * 1000).toFixed(1) + 'mA' : '';++    // Warning if LED power exceeds max+    var pLedEl = document.getElementById('calc-p-led');+    if (pLed * 1000 > 78) {+      pLedEl.style.color = '#f85149';+    } else {+      pLedEl.style.color = '';+    }++    // Warning if insufficient voltage+    var rExactEl = document.getElementById('calc-r-exact');+    if (vDrop <= 0) {+      rExactEl.innerHTML = '<span style="color:#f85149">V<sub>supply</sub> too low</span>';+    }+  }++  document.getElementById('calc-vsupply').addEventListener('input', updateCalculator);+  document.getElementById('calc-iled').addEventListener('input', updateCalculator);++  // Initial calculation+  updateCalculator();+})();+</script>+</div>+</body>+</html>\ No newline at end of file
IN-S42ATA.kicad_modadded+15
@@ -0,0 +1,15 @@+(footprint "IN-S42ATA"+  (version 20240108)+  (generator "adom-footprint")+  (layer "F.Cu")+  (descr "Inolux Corporation · Top View SMD LED · 0402 (1.0 &times; 0.5mm) · AlInGaP")+  (attr smd)+  (fp_text reference "REF**" (at 0 -2.8)+    (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))))+  (fp_text value "IN-S42ATA" (at 0 2.8)+    (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))))+  (pad "1" smd roundrect (at -0.5 0) (size 0.6 0.5)+    (layers F.Cu,F.Paste,F.Mask) (roundrect_rratio 0.25))+  (pad "2" smd roundrect (at 0.5 0) (size 0.6 0.5)+    (layers F.Cu,F.Paste,F.Mask) (roundrect_rratio 0.25))+)
IN-S42ATA.kicad_symadded+139
@@ -0,0 +1,139 @@+(kicad_symbol_lib+  (version 20231120)+  (generator "adom")+  (symbol "IN-S42ATA"+    (pin_numbers (hide yes))+    (pin_names (offset 1.016) (hide yes))+    (exclude_from_sim no)+    (in_bom yes)+    (on_board yes)+    (property "Reference" "D"+      (at 0 2.54 0)+      (effects+      (font+       (size 1.27 1.27)+      )+     )+    )+    (property "Value" "IN-S42ATA"+      (at 0 -2.54 0)+      (effects+      (font+       (size 1.27 1.27)+      )+     )+    )+    (property "Footprint" ""+      (at 0 0 0)+      (effects (font (size 1.27 1.27)) (hide yes))+    )+    (property "Datasheet" "~"+      (at 0 0 0)+      (effects (font (size 1.27 1.27)) (hide yes))+    )+    (property "Description" "Light emitting diode"+      (at 0 0 0)+      (effects (font (size 1.27 1.27)) (hide yes))+    )+    (symbol "IN-S42ATA_0_1"+     (polyline+      (pts+       (xy -3.048 -0.762) (xy -4.572 -2.286) (xy -3.81 -2.286) (xy -4.572 -2.286) (xy -4.572 -1.524)+      )+      (stroke+       (width 0)+       (type default)+      )+      (fill+       (type none)+      )+     )+     (polyline+      (pts+       (xy -1.778 -0.762) (xy -3.302 -2.286) (xy -2.54 -2.286) (xy -3.302 -2.286) (xy -3.302 -1.524)+      )+      (stroke+       (width 0)+       (type default)+      )+      (fill+       (type none)+      )+     )+     (polyline+      (pts+       (xy -1.27 0) (xy 1.27 0)+      )+      (stroke+       (width 0)+       (type default)+      )+      (fill+       (type none)+      )+     )+     (polyline+      (pts+       (xy -1.27 -1.27) (xy -1.27 1.27)+      )+      (stroke+       (width 0.254)+       (type default)+      )+      (fill+       (type none)+      )+     )+     (polyline+      (pts+       (xy 1.27 -1.27) (xy 1.27 1.27) (xy -1.27 0) (xy 1.27 -1.27)+      )+      (stroke+       (width 0.254)+       (type default)+      )+      (fill+       (type none)+      )+     )+    )+    (symbol "IN-S42ATA_1_1"+     (pin passive line+      (at -3.81 0 0)+      (length 2.54)+      (name "K"+       (effects+        (font+         (size 1.27 1.27)+        )+       )+      )+      (number "1"+       (effects+        (font+         (size 1.27 1.27)+        )+       )+      )+     )+     (pin passive line+      (at 3.81 0 180)+      (length 2.54)+      (name "A"+       (effects+        (font+         (size 1.27 1.27)+        )+       )+      )+      (number "2"+       (effects+        (font+         (size 1.27 1.27)+        )+       )+      )+     )+    )+  )+)
IN-S42ATA.lbradded+83
@@ -0,0 +1,83 @@+<?xml version="1.0" encoding="utf-8"?>+<!DOCTYPE eagle SYSTEM "eagle.dtd">+<eagle version="9.6.2">+<drawing>+<settings><setting alwaysvectorfont="no"/></settings>+<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>+<layers>+<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>+<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>+<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>+<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>+<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>+<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>+<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>+<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>+<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>+<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>+<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>+<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>+<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>+<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>+<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>+<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>+<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>+<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>+<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>+<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>+<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>+<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>+<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>+<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>+<layer number="39" name="tKeepout" color="4" fill="11" visible="no" active="yes"/>+<layer number="40" name="bKeepout" color="1" fill="11" visible="no" active="yes"/>+<layer number="41" name="tRestrict" color="4" fill="10" visible="no" active="yes"/>+<layer number="42" name="bRestrict" color="1" fill="10" visible="no" active="yes"/>+<layer number="43" name="vRestrict" color="2" fill="10" visible="no" active="yes"/>+<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>+<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>+<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>+<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>+<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>+<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>+<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>+<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>+<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>+<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>+<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>+<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>+<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>+<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>+</layers>+<library>+<description>IN-S42ATA — Amber 0402 — Inolux Corporation</description>+<packages></packages>+<symbols>+<symbol name="IN-S42ATA">+  <wire x1="-1.016" y1="2.54" x2="1.016" y2="2.54" width="0.254" layer="94"/>+  <wire x1="1.016" y1="2.54" x2="1.016" y2="-2.54" width="0.254" layer="94"/>+  <wire x1="1.016" y1="-2.54" x2="-1.016" y2="-2.54" width="0.254" layer="94"/>+  <wire x1="-1.016" y1="-2.54" x2="-1.016" y2="2.54" width="0.254" layer="94"/>+  <text x="0" y="5.08" size="1.27" layer="95" align="bottom-center">&gt;NAME</text>+  <text x="0" y="-5.08" size="1.27" layer="96" align="top-center">&gt;VALUE</text>+  <pin name="1" x="0" y="3.81" length="middle" direction="pas" rot="R270"/>+  <pin name="2" x="0" y="-3.81" length="middle" direction="pas" rot="R90"/>+</symbol>+</symbols>+<devicesets>+<deviceset name="IN-S42ATA" prefix="D">+  <description>Amber 0402 — Inolux Corporation</description>+  <gates>+    <gate name="G$1" symbol="IN-S42ATA" x="0" y="0"/>+  </gates>+  <devices>+    <device name="">+      <connects/>+      <technologies><technology name=""/></technologies>+    </device>+  </devices>+</deviceset>+</devicesets>+</library>+</drawing>+</eagle>\ No newline at end of file
IN-S42ATA.stepadded+1958
@@ -0,0 +1,1958 @@+ISO-10303-21;+HEADER;+/* LED_0402_1005Metric.step 3D STEP model for use in ECAD systems+ * Copyright (C) 2018, kicad StepUp+ * + * This work is licensed under the [Creative Commons CC-BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/legalcode), + * with the following exception:+ * To the extent that the creation of electronic designs that use 'Licensed Material' can be considered to be 'Adapted Material', + * then the copyright holder waives article 3 of the license with respect to these designs and any generated files which use data provided + * as part of the 'Licensed Material'.+ * You are free to use the library data in your own projects without the obligation to share your project files under this or any other license agreement.+ * However, if you wish to redistribute these libraries, or parts thereof (including in modified form) as a collection then the exception above does not apply. + * Please refer to https://github.com/KiCad/kicad-packages3D/blob/master/LICENSE.md for further clarification of the exception.+ * Disclaimer of Warranties and Limitation of Liability.+ * These libraries are provided in the hope that they will be useful, but are provided without warranty of any kind, express or implied.+ * *USE 3D CAD DATA AT YOUR OWN RISK*+ * *DO NOT RELY UPON ANY INFORMATION FOUND HERE WITHOUT INDEPENDENT VERIFICATION.*+ * + */++FILE_DESCRIPTION(+/* description */ ('model of LED_0402_1005Metric'),+/* implementation_level */ '2;1');++FILE_NAME(+/* name */ 'LED_0402_1005Metric.step',+/* time_stamp */ '2018-03-14T23:51:39',+/* author */ ('kicad StepUp','ksu'),+/* organization */ ('FreeCAD'),+/* preprocessor_version */ 'OCC',+/* originating_system */ 'kicad StepUp',+/* authorisation */ '');++FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));+ENDSEC;++DATA;+#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',+'automotive_design',2000,#2);+#2 = APPLICATION_CONTEXT(+'core data for automotive mechanical design processes');+#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);+#4 = PRODUCT_DEFINITION_SHAPE('','',#5);+#5 = PRODUCT_DEFINITION('design','',#6,#9);+#6 = PRODUCT_DEFINITION_FORMATION('','',#7);+#7 = PRODUCT('LED_0402_1005Metric','LED_0402_1005Metric','',(#8));+#8 = PRODUCT_CONTEXT('',#2,'mechanical');+#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');+#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#1538);+#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);+#12 = CARTESIAN_POINT('',(0.,0.,0.));+#13 = DIRECTION('',(0.,0.,1.));+#14 = DIRECTION('',(1.,0.,-0.));+#15 = MANIFOLD_SOLID_BREP('',#16);+#16 = CLOSED_SHELL('',(#17,#57,#104,#183,#207,#247,#278,#295,#328,#352,+#419,#540,#607,#631,#662,#695,#751,#775,#799,#823,#856,#868,#931,+#956,#973,#997,#1015,#1033,#1051,#1068,#1085,#1116,#1141,#1166,#1190+,#1207,#1238,#1262,#1279,#1307,#1332,#1356,#1381,#1428,#1445,#1457,+#1479,#1491,#1509,#1527));+#17 = ADVANCED_FACE('',(#18),#52,.F.);+#18 = FACE_BOUND('',#19,.F.);+#19 = EDGE_LOOP('',(#20,#30,#38,#46));+#20 = ORIENTED_EDGE('',*,*,#21,.T.);+#21 = EDGE_CURVE('',#22,#24,#26,.T.);+#22 = VERTEX_POINT('',#23);+#23 = CARTESIAN_POINT('',(-0.35,-0.25,0.185));+#24 = VERTEX_POINT('',#25);+#25 = CARTESIAN_POINT('',(-0.315,-0.25,0.5));+#26 = LINE('',#27,#28);+#27 = CARTESIAN_POINT('',(-0.35,-0.25,0.185));+#28 = VECTOR('',#29,1.);+#29 = DIRECTION('',(0.110431526075,0.,0.993883734674));+#30 = ORIENTED_EDGE('',*,*,#31,.T.);+#31 = EDGE_CURVE('',#24,#32,#34,.T.);+#32 = VERTEX_POINT('',#33);+#33 = CARTESIAN_POINT('',(0.315,-0.25,0.5));+#34 = LINE('',#35,#36);+#35 = CARTESIAN_POINT('',(-0.315,-0.25,0.5));+#36 = VECTOR('',#37,1.);+#37 = DIRECTION('',(1.,0.,0.));+#38 = ORIENTED_EDGE('',*,*,#39,.T.);+#39 = EDGE_CURVE('',#32,#40,#42,.T.);+#40 = VERTEX_POINT('',#41);+#41 = CARTESIAN_POINT('',(0.35,-0.25,0.185));+#42 = LINE('',#43,#44);+#43 = CARTESIAN_POINT('',(0.315,-0.25,0.5));+#44 = VECTOR('',#45,1.);+#45 = DIRECTION('',(0.110431526075,0.,-0.993883734674));+#46 = ORIENTED_EDGE('',*,*,#47,.T.);+#47 = EDGE_CURVE('',#40,#22,#48,.T.);+#48 = LINE('',#49,#50);+#49 = CARTESIAN_POINT('',(0.35,-0.25,0.185));+#50 = VECTOR('',#51,1.);+#51 = DIRECTION('',(-1.,0.,0.));+#52 = PLANE('',#53);+#53 = AXIS2_PLACEMENT_3D('',#54,#55,#56);+#54 = CARTESIAN_POINT('',(0.,-0.25,0.336886104513));+#55 = DIRECTION('',(0.,1.,0.));+#56 = DIRECTION('',(0.,0.,1.));+#57 = ADVANCED_FACE('',(#58),#99,.T.);+#58 = FACE_BOUND('',#59,.T.);+#59 = EDGE_LOOP('',(#60,#70,#78,#84,#85,#93));+#60 = ORIENTED_EDGE('',*,*,#61,.T.);+#61 = EDGE_CURVE('',#62,#64,#66,.T.);+#62 = VERTEX_POINT('',#63);+#63 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#64 = VERTEX_POINT('',#65);+#65 = CARTESIAN_POINT('',(-0.35,0.1875,0.185));+#66 = LINE('',#67,#68);+#67 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#68 = VECTOR('',#69,1.);+#69 = DIRECTION('',(0.,-1.,0.));+#70 = ORIENTED_EDGE('',*,*,#71,.F.);+#71 = EDGE_CURVE('',#72,#64,#74,.T.);+#72 = VERTEX_POINT('',#73);+#73 = CARTESIAN_POINT('',(-0.35,-0.1875,0.185));+#74 = LINE('',#75,#76);+#75 = CARTESIAN_POINT('',(-0.35,-0.25,0.185));+#76 = VECTOR('',#77,1.);+#77 = DIRECTION('',(0.,1.,0.));+#78 = ORIENTED_EDGE('',*,*,#79,.T.);+#79 = EDGE_CURVE('',#72,#22,#80,.T.);+#80 = LINE('',#81,#82);+#81 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#82 = VECTOR('',#83,1.);+#83 = DIRECTION('',(0.,-1.,0.));+#84 = ORIENTED_EDGE('',*,*,#21,.T.);+#85 = ORIENTED_EDGE('',*,*,#86,.F.);+#86 = EDGE_CURVE('',#87,#24,#89,.T.);+#87 = VERTEX_POINT('',#88);+#88 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#89 = LINE('',#90,#91);+#90 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#91 = VECTOR('',#92,1.);+#92 = DIRECTION('',(0.,-1.,0.));+#93 = ORIENTED_EDGE('',*,*,#94,.F.);+#94 = EDGE_CURVE('',#62,#87,#95,.T.);+#95 = LINE('',#96,#97);+#96 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#97 = VECTOR('',#98,1.);+#98 = DIRECTION('',(0.110431526075,0.,0.993883734674));+#99 = PLANE('',#100);+#100 = AXIS2_PLACEMENT_3D('',#101,#102,#103);+#101 = CARTESIAN_POINT('',(-0.35,0.25,0.185));+#102 = DIRECTION('',(-0.993883734674,0.,0.110431526075));+#103 = DIRECTION('',(0.110431526075,0.,0.993883734674));+#104 = ADVANCED_FACE('',(#105),#178,.F.);+#105 = FACE_BOUND('',#106,.F.);+#106 = EDGE_LOOP('',(#107,#117,#125,#133,#139,#140,#148,#156,#164,#172)+);+#107 = ORIENTED_EDGE('',*,*,#108,.F.);+#108 = EDGE_CURVE('',#109,#111,#113,.T.);+#109 = VERTEX_POINT('',#110);+#110 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#111 = VERTEX_POINT('',#112);+#112 = CARTESIAN_POINT('',(-0.4625,-0.25,1.5E-02));+#113 = LINE('',#114,#115);+#114 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#115 = VECTOR('',#116,1.);+#116 = DIRECTION('',(1.,0.,0.));+#117 = ORIENTED_EDGE('',*,*,#118,.T.);+#118 = EDGE_CURVE('',#109,#119,#121,.T.);+#119 = VERTEX_POINT('',#120);+#120 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#121 = LINE('',#122,#123);+#122 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#123 = VECTOR('',#124,1.);+#124 = DIRECTION('',(0.,0.,1.));+#125 = ORIENTED_EDGE('',*,*,#126,.T.);+#126 = EDGE_CURVE('',#119,#127,#129,.T.);+#127 = VERTEX_POINT('',#128);+#128 = CARTESIAN_POINT('',(-0.4625,-0.25,0.185));+#129 = LINE('',#130,#131);+#130 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#131 = VECTOR('',#132,1.);+#132 = DIRECTION('',(1.,0.,0.));+#133 = ORIENTED_EDGE('',*,*,#134,.T.);+#134 = EDGE_CURVE('',#127,#22,#135,.T.);+#135 = LINE('',#136,#137);+#136 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#137 = VECTOR('',#138,1.);+#138 = DIRECTION('',(1.,0.,0.));+#139 = ORIENTED_EDGE('',*,*,#47,.F.);+#140 = ORIENTED_EDGE('',*,*,#141,.T.);+#141 = EDGE_CURVE('',#40,#142,#144,.T.);+#142 = VERTEX_POINT('',#143);+#143 = CARTESIAN_POINT('',(0.4625,-0.25,0.185));+#144 = LINE('',#145,#146);+#145 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#146 = VECTOR('',#147,1.);+#147 = DIRECTION('',(1.,0.,0.));+#148 = ORIENTED_EDGE('',*,*,#149,.T.);+#149 = EDGE_CURVE('',#142,#150,#152,.T.);+#150 = VERTEX_POINT('',#151);+#151 = CARTESIAN_POINT('',(0.485,-0.25,0.185));+#152 = LINE('',#153,#154);+#153 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#154 = VECTOR('',#155,1.);+#155 = DIRECTION('',(1.,0.,0.));+#156 = ORIENTED_EDGE('',*,*,#157,.F.);+#157 = EDGE_CURVE('',#158,#150,#160,.T.);+#158 = VERTEX_POINT('',#159);+#159 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#160 = LINE('',#161,#162);+#161 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#162 = VECTOR('',#163,1.);+#163 = DIRECTION('',(0.,0.,1.));+#164 = ORIENTED_EDGE('',*,*,#165,.F.);+#165 = EDGE_CURVE('',#166,#158,#168,.T.);+#166 = VERTEX_POINT('',#167);+#167 = CARTESIAN_POINT('',(0.4625,-0.25,1.5E-02));+#168 = LINE('',#169,#170);+#169 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#170 = VECTOR('',#171,1.);+#171 = DIRECTION('',(1.,0.,0.));+#172 = ORIENTED_EDGE('',*,*,#173,.F.);+#173 = EDGE_CURVE('',#111,#166,#174,.T.);+#174 = LINE('',#175,#176);+#175 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#176 = VECTOR('',#177,1.);+#177 = DIRECTION('',(1.,0.,0.));+#178 = PLANE('',#179);+#179 = AXIS2_PLACEMENT_3D('',#180,#181,#182);+#180 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#181 = DIRECTION('',(0.,1.,0.));+#182 = DIRECTION('',(0.,0.,1.));+#183 = ADVANCED_FACE('',(#184),#202,.T.);+#184 = FACE_BOUND('',#185,.T.);+#185 = EDGE_LOOP('',(#186,#187,#188,#196));+#186 = ORIENTED_EDGE('',*,*,#86,.T.);+#187 = ORIENTED_EDGE('',*,*,#31,.T.);+#188 = ORIENTED_EDGE('',*,*,#189,.F.);+#189 = EDGE_CURVE('',#190,#32,#192,.T.);+#190 = VERTEX_POINT('',#191);+#191 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#192 = LINE('',#193,#194);+#193 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#194 = VECTOR('',#195,1.);+#195 = DIRECTION('',(0.,-1.,0.));+#196 = ORIENTED_EDGE('',*,*,#197,.F.);+#197 = EDGE_CURVE('',#87,#190,#198,.T.);+#198 = LINE('',#199,#200);+#199 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#200 = VECTOR('',#201,1.);+#201 = DIRECTION('',(1.,0.,0.));+#202 = PLANE('',#203);+#203 = AXIS2_PLACEMENT_3D('',#204,#205,#206);+#204 = CARTESIAN_POINT('',(-0.315,0.25,0.5));+#205 = DIRECTION('',(0.,0.,1.));+#206 = DIRECTION('',(1.,0.,0.));+#207 = ADVANCED_FACE('',(#208),#242,.T.);+#208 = FACE_BOUND('',#209,.T.);+#209 = EDGE_LOOP('',(#210,#211,#212,#220,#228,#236));+#210 = ORIENTED_EDGE('',*,*,#189,.T.);+#211 = ORIENTED_EDGE('',*,*,#39,.T.);+#212 = ORIENTED_EDGE('',*,*,#213,.F.);+#213 = EDGE_CURVE('',#214,#40,#216,.T.);+#214 = VERTEX_POINT('',#215);+#215 = CARTESIAN_POINT('',(0.35,-0.1875,0.185));+#216 = LINE('',#217,#218);+#217 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#218 = VECTOR('',#219,1.);+#219 = DIRECTION('',(0.,-1.,0.));+#220 = ORIENTED_EDGE('',*,*,#221,.T.);+#221 = EDGE_CURVE('',#214,#222,#224,.T.);+#222 = VERTEX_POINT('',#223);+#223 = CARTESIAN_POINT('',(0.35,0.1875,0.185));+#224 = LINE('',#225,#226);+#225 = CARTESIAN_POINT('',(0.35,-0.25,0.185));+#226 = VECTOR('',#227,1.);+#227 = DIRECTION('',(0.,1.,0.));+#228 = ORIENTED_EDGE('',*,*,#229,.F.);+#229 = EDGE_CURVE('',#230,#222,#232,.T.);+#230 = VERTEX_POINT('',#231);+#231 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#232 = LINE('',#233,#234);+#233 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#234 = VECTOR('',#235,1.);+#235 = DIRECTION('',(0.,-1.,0.));+#236 = ORIENTED_EDGE('',*,*,#237,.F.);+#237 = EDGE_CURVE('',#190,#230,#238,.T.);+#238 = LINE('',#239,#240);+#239 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#240 = VECTOR('',#241,1.);+#241 = DIRECTION('',(0.110431526075,0.,-0.993883734674));+#242 = PLANE('',#243);+#243 = AXIS2_PLACEMENT_3D('',#244,#245,#246);+#244 = CARTESIAN_POINT('',(0.315,0.25,0.5));+#245 = DIRECTION('',(0.993883734674,0.,0.110431526075));+#246 = DIRECTION('',(0.110431526075,0.,-0.993883734674));+#247 = ADVANCED_FACE('',(#248),#273,.T.);+#248 = FACE_BOUND('',#249,.T.);+#249 = EDGE_LOOP('',(#250,#258,#266,#272));+#250 = ORIENTED_EDGE('',*,*,#251,.F.);+#251 = EDGE_CURVE('',#252,#62,#254,.T.);+#252 = VERTEX_POINT('',#253);+#253 = CARTESIAN_POINT('',(-0.4625,0.25,0.185));+#254 = LINE('',#255,#256);+#255 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#256 = VECTOR('',#257,1.);+#257 = DIRECTION('',(1.,0.,0.));+#258 = ORIENTED_EDGE('',*,*,#259,.F.);+#259 = EDGE_CURVE('',#260,#252,#262,.T.);+#260 = VERTEX_POINT('',#261);+#261 = CARTESIAN_POINT('',(-0.4625,0.1875,0.185));+#262 = LINE('',#263,#264);+#263 = CARTESIAN_POINT('',(-0.4625,3.125E-02,0.185));+#264 = VECTOR('',#265,1.);+#265 = DIRECTION('',(0.,1.,0.));+#266 = ORIENTED_EDGE('',*,*,#267,.F.);+#267 = EDGE_CURVE('',#64,#260,#268,.T.);+#268 = LINE('',#269,#270);+#269 = CARTESIAN_POINT('',(-0.47375,0.1875,0.185));+#270 = VECTOR('',#271,1.);+#271 = DIRECTION('',(-1.,0.,0.));+#272 = ORIENTED_EDGE('',*,*,#61,.F.);+#273 = PLANE('',#274);+#274 = AXIS2_PLACEMENT_3D('',#275,#276,#277);+#275 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#276 = DIRECTION('',(0.,0.,1.));+#277 = DIRECTION('',(1.,0.,0.));+#278 = ADVANCED_FACE('',(#279),#290,.T.);+#279 = FACE_BOUND('',#280,.T.);+#280 = EDGE_LOOP('',(#281,#282,#283,#284));+#281 = ORIENTED_EDGE('',*,*,#94,.T.);+#282 = ORIENTED_EDGE('',*,*,#197,.T.);+#283 = ORIENTED_EDGE('',*,*,#237,.T.);+#284 = ORIENTED_EDGE('',*,*,#285,.T.);+#285 = EDGE_CURVE('',#230,#62,#286,.T.);+#286 = LINE('',#287,#288);+#287 = CARTESIAN_POINT('',(0.35,0.25,0.185));+#288 = VECTOR('',#289,1.);+#289 = DIRECTION('',(-1.,0.,0.));+#290 = PLANE('',#291);+#291 = AXIS2_PLACEMENT_3D('',#292,#293,#294);+#292 = CARTESIAN_POINT('',(0.,0.25,0.336886104513));+#293 = DIRECTION('',(0.,1.,0.));+#294 = DIRECTION('',(0.,0.,1.));+#295 = ADVANCED_FACE('',(#296),#323,.T.);+#296 = FACE_BOUND('',#297,.F.);+#297 = EDGE_LOOP('',(#298,#299,#308,#316));+#298 = ORIENTED_EDGE('',*,*,#71,.F.);+#299 = ORIENTED_EDGE('',*,*,#300,.F.);+#300 = EDGE_CURVE('',#301,#72,#303,.T.);+#301 = VERTEX_POINT('',#302);+#302 = CARTESIAN_POINT('',(-0.365,-0.1875,0.2));+#303 = CIRCLE('',#304,1.5E-02);+#304 = AXIS2_PLACEMENT_3D('',#305,#306,#307);+#305 = CARTESIAN_POINT('',(-0.365,-0.1875,0.185));+#306 = DIRECTION('',(-0.,1.,0.));+#307 = DIRECTION('',(1.,0.,0.));+#308 = ORIENTED_EDGE('',*,*,#309,.T.);+#309 = EDGE_CURVE('',#301,#310,#312,.T.);+#310 = VERTEX_POINT('',#311);+#311 = CARTESIAN_POINT('',(-0.365,0.1875,0.2));+#312 = LINE('',#313,#314);+#313 = CARTESIAN_POINT('',(-0.365,-0.25,0.2));+#314 = VECTOR('',#315,1.);+#315 = DIRECTION('',(0.,1.,0.));+#316 = ORIENTED_EDGE('',*,*,#317,.T.);+#317 = EDGE_CURVE('',#310,#64,#318,.T.);+#318 = CIRCLE('',#319,1.5E-02);+#319 = AXIS2_PLACEMENT_3D('',#320,#321,#322);+#320 = CARTESIAN_POINT('',(-0.365,0.1875,0.185));+#321 = DIRECTION('',(-0.,1.,0.));+#322 = DIRECTION('',(1.,0.,0.));+#323 = CYLINDRICAL_SURFACE('',#324,1.5E-02);+#324 = AXIS2_PLACEMENT_3D('',#325,#326,#327);+#325 = CARTESIAN_POINT('',(-0.365,-0.25,0.185));+#326 = DIRECTION('',(0.,1.,0.));+#327 = DIRECTION('',(1.,0.,0.));+#328 = ADVANCED_FACE('',(#329),#347,.T.);+#329 = FACE_BOUND('',#330,.T.);+#330 = EDGE_LOOP('',(#331,#339,#340,#341));+#331 = ORIENTED_EDGE('',*,*,#332,.F.);+#332 = EDGE_CURVE('',#127,#333,#335,.T.);+#333 = VERTEX_POINT('',#334);+#334 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.185));+#335 = LINE('',#336,#337);+#336 = CARTESIAN_POINT('',(-0.4625,-0.21875,0.185));+#337 = VECTOR('',#338,1.);+#338 = DIRECTION('',(0.,1.,0.));+#339 = ORIENTED_EDGE('',*,*,#134,.T.);+#340 = ORIENTED_EDGE('',*,*,#79,.F.);+#341 = ORIENTED_EDGE('',*,*,#342,.F.);+#342 = EDGE_CURVE('',#333,#72,#343,.T.);+#343 = LINE('',#344,#345);+#344 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,0.185));+#345 = VECTOR('',#346,1.);+#346 = DIRECTION('',(1.,0.,0.));+#347 = PLANE('',#348);+#348 = AXIS2_PLACEMENT_3D('',#349,#350,#351);+#349 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#350 = DIRECTION('',(0.,0.,1.));+#351 = DIRECTION('',(1.,0.,0.));+#352 = ADVANCED_FACE('',(#353),#414,.F.);+#353 = FACE_BOUND('',#354,.F.);+#354 = EDGE_LOOP('',(#355,#365,#374,#382,#391,#399,#405,#406,#407,#408)+);+#355 = ORIENTED_EDGE('',*,*,#356,.F.);+#356 = EDGE_CURVE('',#357,#359,#361,.T.);+#357 = VERTEX_POINT('',#358);+#358 = CARTESIAN_POINT('',(-0.485,-0.25,-1.734723475977E-18));+#359 = VERTEX_POINT('',#360);+#360 = CARTESIAN_POINT('',(-0.4625,-0.25,0.));+#361 = LINE('',#362,#363);+#362 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#363 = VECTOR('',#364,1.);+#364 = DIRECTION('',(1.,0.,0.));+#365 = ORIENTED_EDGE('',*,*,#366,.F.);+#366 = EDGE_CURVE('',#367,#357,#369,.T.);+#367 = VERTEX_POINT('',#368);+#368 = CARTESIAN_POINT('',(-0.5,-0.25,1.5E-02));+#369 = CIRCLE('',#370,1.5E-02);+#370 = AXIS2_PLACEMENT_3D('',#371,#372,#373);+#371 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#372 = DIRECTION('',(0.,-1.,0.));+#373 = DIRECTION('',(0.,0.,1.));+#374 = ORIENTED_EDGE('',*,*,#375,.T.);+#375 = EDGE_CURVE('',#367,#376,#378,.T.);+#376 = VERTEX_POINT('',#377);+#377 = CARTESIAN_POINT('',(-0.5,-0.25,0.185));+#378 = LINE('',#379,#380);+#379 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#380 = VECTOR('',#381,1.);+#381 = DIRECTION('',(0.,0.,1.));+#382 = ORIENTED_EDGE('',*,*,#383,.T.);+#383 = EDGE_CURVE('',#376,#384,#386,.T.);+#384 = VERTEX_POINT('',#385);+#385 = CARTESIAN_POINT('',(-0.485,-0.25,0.2));+#386 = CIRCLE('',#387,1.5E-02);+#387 = AXIS2_PLACEMENT_3D('',#388,#389,#390);+#388 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#389 = DIRECTION('',(0.,1.,0.));+#390 = DIRECTION('',(0.,0.,1.));+#391 = ORIENTED_EDGE('',*,*,#392,.T.);+#392 = EDGE_CURVE('',#384,#393,#395,.T.);+#393 = VERTEX_POINT('',#394);+#394 = CARTESIAN_POINT('',(-0.4625,-0.25,0.2));+#395 = LINE('',#396,#397);+#396 = CARTESIAN_POINT('',(-0.5,-0.25,0.2));+#397 = VECTOR('',#398,1.);+#398 = DIRECTION('',(1.,0.,0.));+#399 = ORIENTED_EDGE('',*,*,#400,.F.);+#400 = EDGE_CURVE('',#127,#393,#401,.T.);+#401 = LINE('',#402,#403);+#402 = CARTESIAN_POINT('',(-0.4625,-0.25,0.15));+#403 = VECTOR('',#404,1.);+#404 = DIRECTION('',(0.,0.,1.));+#405 = ORIENTED_EDGE('',*,*,#126,.F.);+#406 = ORIENTED_EDGE('',*,*,#118,.F.);+#407 = ORIENTED_EDGE('',*,*,#108,.T.);+#408 = ORIENTED_EDGE('',*,*,#409,.F.);+#409 = EDGE_CURVE('',#359,#111,#410,.T.);+#410 = LINE('',#411,#412);+#411 = CARTESIAN_POINT('',(-0.4625,-0.25,0.15));+#412 = VECTOR('',#413,1.);+#413 = DIRECTION('',(0.,0.,1.));+#414 = PLANE('',#415);+#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418);+#416 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#417 = DIRECTION('',(0.,1.,0.));+#418 = DIRECTION('',(0.,0.,1.));+#419 = ADVANCED_FACE('',(#420,#509),#535,.F.);+#420 = FACE_BOUND('',#421,.F.);+#421 = EDGE_LOOP('',(#422,#430,#431,#439,#447,#455,#463,#471,#479,#487,+#495,#503));+#422 = ORIENTED_EDGE('',*,*,#423,.F.);+#423 = EDGE_CURVE('',#111,#424,#426,.T.);+#424 = VERTEX_POINT('',#425);+#425 = CARTESIAN_POINT('',(-0.4625,-0.1875,1.5E-02));+#426 = LINE('',#427,#428);+#427 = CARTESIAN_POINT('',(-0.4625,-0.21875,1.5E-02));+#428 = VECTOR('',#429,1.);+#429 = DIRECTION('',(0.,1.,0.));+#430 = ORIENTED_EDGE('',*,*,#173,.T.);+#431 = ORIENTED_EDGE('',*,*,#432,.F.);+#432 = EDGE_CURVE('',#433,#166,#435,.T.);+#433 = VERTEX_POINT('',#434);+#434 = CARTESIAN_POINT('',(0.4625,-0.1875,1.5E-02));+#435 = LINE('',#436,#437);+#436 = CARTESIAN_POINT('',(0.4625,-0.28125,1.5E-02));+#437 = VECTOR('',#438,1.);+#438 = DIRECTION('',(0.,-1.,0.));+#439 = ORIENTED_EDGE('',*,*,#440,.F.);+#440 = EDGE_CURVE('',#441,#433,#443,.T.);+#441 = VERTEX_POINT('',#442);+#442 = CARTESIAN_POINT('',(0.35,-0.1875,1.5E-02));+#443 = LINE('',#444,#445);+#444 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,1.5E-02));+#445 = VECTOR('',#446,1.);+#446 = DIRECTION('',(1.,0.,0.));+#447 = ORIENTED_EDGE('',*,*,#448,.T.);+#448 = EDGE_CURVE('',#441,#449,#451,.T.);+#449 = VERTEX_POINT('',#450);+#450 = CARTESIAN_POINT('',(0.35,0.1875,1.5E-02));+#451 = LINE('',#452,#453);+#452 = CARTESIAN_POINT('',(0.35,-0.25,1.5E-02));+#453 = VECTOR('',#454,1.);+#454 = DIRECTION('',(0.,1.,0.));+#455 = ORIENTED_EDGE('',*,*,#456,.F.);+#456 = EDGE_CURVE('',#457,#449,#459,.T.);+#457 = VERTEX_POINT('',#458);+#458 = CARTESIAN_POINT('',(0.4625,0.1875,1.5E-02));+#459 = LINE('',#460,#461);+#460 = CARTESIAN_POINT('',(-0.47375,0.1875,1.5E-02));+#461 = VECTOR('',#462,1.);+#462 = DIRECTION('',(-1.,0.,0.));+#463 = ORIENTED_EDGE('',*,*,#464,.F.);+#464 = EDGE_CURVE('',#465,#457,#467,.T.);+#465 = VERTEX_POINT('',#466);+#466 = CARTESIAN_POINT('',(0.4625,0.25,1.5E-02));+#467 = LINE('',#468,#469);+#468 = CARTESIAN_POINT('',(0.4625,-3.125E-02,1.5E-02));+#469 = VECTOR('',#470,1.);+#470 = DIRECTION('',(0.,-1.,0.));+#471 = ORIENTED_EDGE('',*,*,#472,.F.);+#472 = EDGE_CURVE('',#473,#465,#475,.T.);+#473 = VERTEX_POINT('',#474);+#474 = CARTESIAN_POINT('',(-0.4625,0.25,1.5E-02));+#475 = LINE('',#476,#477);+#476 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#477 = VECTOR('',#478,1.);+#478 = DIRECTION('',(1.,0.,0.));+#479 = ORIENTED_EDGE('',*,*,#480,.F.);+#480 = EDGE_CURVE('',#481,#473,#483,.T.);+#481 = VERTEX_POINT('',#482);+#482 = CARTESIAN_POINT('',(-0.4625,0.1875,1.5E-02));+#483 = LINE('',#484,#485);+#484 = CARTESIAN_POINT('',(-0.4625,3.125E-02,1.5E-02));+#485 = VECTOR('',#486,1.);+#486 = DIRECTION('',(0.,1.,0.));+#487 = ORIENTED_EDGE('',*,*,#488,.F.);+#488 = EDGE_CURVE('',#489,#481,#491,.T.);+#489 = VERTEX_POINT('',#490);+#490 = CARTESIAN_POINT('',(-0.35,0.1875,1.5E-02));+#491 = LINE('',#492,#493);+#492 = CARTESIAN_POINT('',(-0.47375,0.1875,1.5E-02));+#493 = VECTOR('',#494,1.);+#494 = DIRECTION('',(-1.,0.,0.));+#495 = ORIENTED_EDGE('',*,*,#496,.F.);+#496 = EDGE_CURVE('',#497,#489,#499,.T.);+#497 = VERTEX_POINT('',#498);+#498 = CARTESIAN_POINT('',(-0.35,-0.1875,1.5E-02));+#499 = LINE('',#500,#501);+#500 = CARTESIAN_POINT('',(-0.35,-0.25,1.5E-02));+#501 = VECTOR('',#502,1.);+#502 = DIRECTION('',(0.,1.,0.));+#503 = ORIENTED_EDGE('',*,*,#504,.F.);+#504 = EDGE_CURVE('',#424,#497,#505,.T.);+#505 = LINE('',#506,#507);+#506 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,1.5E-02));+#507 = VECTOR('',#508,1.);+#508 = DIRECTION('',(1.,0.,0.));+#509 = FACE_BOUND('',#510,.F.);+#510 = EDGE_LOOP('',(#511,#521,#529));+#511 = ORIENTED_EDGE('',*,*,#512,.T.);+#512 = EDGE_CURVE('',#513,#515,#517,.T.);+#513 = VERTEX_POINT('',#514);+#514 = CARTESIAN_POINT('',(0.173205080757,0.2,1.5E-02));+#515 = VERTEX_POINT('',#516);+#516 = CARTESIAN_POINT('',(0.173205080757,-0.2,1.5E-02));+#517 = LINE('',#518,#519);+#518 = CARTESIAN_POINT('',(0.173205080757,0.2,1.5E-02));+#519 = VECTOR('',#520,1.);+#520 = DIRECTION('',(0.,-1.,0.));+#521 = ORIENTED_EDGE('',*,*,#522,.T.);+#522 = EDGE_CURVE('',#515,#523,#525,.T.);+#523 = VERTEX_POINT('',#524);+#524 = CARTESIAN_POINT('',(-0.173205080757,0.,1.5E-02));+#525 = LINE('',#526,#527);+#526 = CARTESIAN_POINT('',(0.173205080757,-0.2,1.5E-02));+#527 = VECTOR('',#528,1.);+#528 = DIRECTION('',(-0.866025403784,0.5,0.));+#529 = ORIENTED_EDGE('',*,*,#530,.T.);+#530 = EDGE_CURVE('',#523,#513,#531,.T.);+#531 = LINE('',#532,#533);+#532 = CARTESIAN_POINT('',(-0.173205080757,0.,1.5E-02));+#533 = VECTOR('',#534,1.);+#534 = DIRECTION('',(0.866025403784,0.5,0.));+#535 = PLANE('',#536);+#536 = AXIS2_PLACEMENT_3D('',#537,#538,#539);+#537 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#538 = DIRECTION('',(0.,0.,1.));+#539 = DIRECTION('',(1.,0.,0.));+#540 = ADVANCED_FACE('',(#541),#602,.F.);+#541 = FACE_BOUND('',#542,.F.);+#542 = EDGE_LOOP('',(#543,#553,#559,#560,#561,#562,#570,#578,#587,#595)+);+#543 = ORIENTED_EDGE('',*,*,#544,.F.);+#544 = EDGE_CURVE('',#545,#547,#549,.T.);+#545 = VERTEX_POINT('',#546);+#546 = CARTESIAN_POINT('',(0.4625,-0.25,0.));+#547 = VERTEX_POINT('',#548);+#548 = CARTESIAN_POINT('',(0.485,-0.25,-1.734723475977E-18));+#549 = LINE('',#550,#551);+#550 = CARTESIAN_POINT('',(0.35,-0.25,0.));+#551 = VECTOR('',#552,1.);+#552 = DIRECTION('',(1.,0.,0.));+#553 = ORIENTED_EDGE('',*,*,#554,.F.);+#554 = EDGE_CURVE('',#166,#545,#555,.T.);+#555 = LINE('',#556,#557);+#556 = CARTESIAN_POINT('',(0.4625,-0.25,0.15));+#557 = VECTOR('',#558,1.);+#558 = DIRECTION('',(0.,0.,-1.));+#559 = ORIENTED_EDGE('',*,*,#165,.T.);+#560 = ORIENTED_EDGE('',*,*,#157,.T.);+#561 = ORIENTED_EDGE('',*,*,#149,.F.);+#562 = ORIENTED_EDGE('',*,*,#563,.F.);+#563 = EDGE_CURVE('',#564,#142,#566,.T.);+#564 = VERTEX_POINT('',#565);+#565 = CARTESIAN_POINT('',(0.4625,-0.25,0.2));+#566 = LINE('',#567,#568);+#567 = CARTESIAN_POINT('',(0.4625,-0.25,0.15));+#568 = VECTOR('',#569,1.);+#569 = DIRECTION('',(0.,0.,-1.));+#570 = ORIENTED_EDGE('',*,*,#571,.T.);+#571 = EDGE_CURVE('',#564,#572,#574,.T.);+#572 = VERTEX_POINT('',#573);+#573 = CARTESIAN_POINT('',(0.485,-0.25,0.2));+#574 = LINE('',#575,#576);+#575 = CARTESIAN_POINT('',(0.35,-0.25,0.2));+#576 = VECTOR('',#577,1.);+#577 = DIRECTION('',(1.,0.,0.));+#578 = ORIENTED_EDGE('',*,*,#579,.F.);+#579 = EDGE_CURVE('',#580,#572,#582,.T.);+#580 = VERTEX_POINT('',#581);+#581 = CARTESIAN_POINT('',(0.5,-0.25,0.185));+#582 = CIRCLE('',#583,1.5E-02);+#583 = AXIS2_PLACEMENT_3D('',#584,#585,#586);+#584 = CARTESIAN_POINT('',(0.485,-0.25,0.185));+#585 = DIRECTION('',(0.,-1.,0.));+#586 = DIRECTION('',(0.,0.,1.));+#587 = ORIENTED_EDGE('',*,*,#588,.F.);+#588 = EDGE_CURVE('',#589,#580,#591,.T.);+#589 = VERTEX_POINT('',#590);+#590 = CARTESIAN_POINT('',(0.5,-0.25,1.5E-02));+#591 = LINE('',#592,#593);+#592 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#593 = VECTOR('',#594,1.);+#594 = DIRECTION('',(0.,0.,1.));+#595 = ORIENTED_EDGE('',*,*,#596,.T.);+#596 = EDGE_CURVE('',#589,#547,#597,.T.);+#597 = CIRCLE('',#598,1.5E-02);+#598 = AXIS2_PLACEMENT_3D('',#599,#600,#601);+#599 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#600 = DIRECTION('',(0.,1.,0.));+#601 = DIRECTION('',(0.,0.,1.));+#602 = PLANE('',#603);+#603 = AXIS2_PLACEMENT_3D('',#604,#605,#606);+#604 = CARTESIAN_POINT('',(0.35,-0.25,0.));+#605 = DIRECTION('',(0.,1.,0.));+#606 = DIRECTION('',(0.,0.,1.));+#607 = ADVANCED_FACE('',(#608),#626,.T.);+#608 = FACE_BOUND('',#609,.T.);+#609 = EDGE_LOOP('',(#610,#618,#619,#620));+#610 = ORIENTED_EDGE('',*,*,#611,.F.);+#611 = EDGE_CURVE('',#214,#612,#614,.T.);+#612 = VERTEX_POINT('',#613);+#613 = CARTESIAN_POINT('',(0.4625,-0.1875,0.185));+#614 = LINE('',#615,#616);+#615 = CARTESIAN_POINT('',(-1.125E-02,-0.1875,0.185));+#616 = VECTOR('',#617,1.);+#617 = DIRECTION('',(1.,0.,0.));+#618 = ORIENTED_EDGE('',*,*,#213,.T.);+#619 = ORIENTED_EDGE('',*,*,#141,.T.);+#620 = ORIENTED_EDGE('',*,*,#621,.F.);+#621 = EDGE_CURVE('',#612,#142,#622,.T.);+#622 = LINE('',#623,#624);+#623 = CARTESIAN_POINT('',(0.4625,-0.28125,0.185));+#624 = VECTOR('',#625,1.);+#625 = DIRECTION('',(0.,-1.,0.));+#626 = PLANE('',#627);+#627 = AXIS2_PLACEMENT_3D('',#628,#629,#630);+#628 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#629 = DIRECTION('',(0.,0.,1.));+#630 = DIRECTION('',(1.,0.,0.));+#631 = ADVANCED_FACE('',(#632),#657,.T.);+#632 = FACE_BOUND('',#633,.T.);+#633 = EDGE_LOOP('',(#634,#642,#643,#651));+#634 = ORIENTED_EDGE('',*,*,#635,.F.);+#635 = EDGE_CURVE('',#230,#636,#638,.T.);+#636 = VERTEX_POINT('',#637);+#637 = CARTESIAN_POINT('',(0.4625,0.25,0.185));+#638 = LINE('',#639,#640);+#639 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#640 = VECTOR('',#641,1.);+#641 = DIRECTION('',(1.,0.,0.));+#642 = ORIENTED_EDGE('',*,*,#229,.T.);+#643 = ORIENTED_EDGE('',*,*,#644,.F.);+#644 = EDGE_CURVE('',#645,#222,#647,.T.);+#645 = VERTEX_POINT('',#646);+#646 = CARTESIAN_POINT('',(0.4625,0.1875,0.185));+#647 = LINE('',#648,#649);+#648 = CARTESIAN_POINT('',(-0.47375,0.1875,0.185));+#649 = VECTOR('',#650,1.);+#650 = DIRECTION('',(-1.,0.,0.));+#651 = ORIENTED_EDGE('',*,*,#652,.F.);+#652 = EDGE_CURVE('',#636,#645,#653,.T.);+#653 = LINE('',#654,#655);+#654 = CARTESIAN_POINT('',(0.4625,-3.125E-02,0.185));+#655 = VECTOR('',#656,1.);+#656 = DIRECTION('',(0.,-1.,0.));+#657 = PLANE('',#658);+#658 = AXIS2_PLACEMENT_3D('',#659,#660,#661);+#659 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#660 = DIRECTION('',(0.,0.,1.));+#661 = DIRECTION('',(1.,0.,0.));+#662 = ADVANCED_FACE('',(#663),#690,.T.);+#663 = FACE_BOUND('',#664,.T.);+#664 = EDGE_LOOP('',(#665,#666,#675,#683));+#665 = ORIENTED_EDGE('',*,*,#221,.F.);+#666 = ORIENTED_EDGE('',*,*,#667,.T.);+#667 = EDGE_CURVE('',#214,#668,#670,.T.);+#668 = VERTEX_POINT('',#669);+#669 = CARTESIAN_POINT('',(0.365,-0.1875,0.2));+#670 = CIRCLE('',#671,1.5E-02);+#671 = AXIS2_PLACEMENT_3D('',#672,#673,#674);+#672 = CARTESIAN_POINT('',(0.365,-0.1875,0.185));+#673 = DIRECTION('',(0.,1.,-0.));+#674 = DIRECTION('',(-1.,0.,0.));+#675 = ORIENTED_EDGE('',*,*,#676,.T.);+#676 = EDGE_CURVE('',#668,#677,#679,.T.);+#677 = VERTEX_POINT('',#678);+#678 = CARTESIAN_POINT('',(0.365,0.1875,0.2));+#679 = LINE('',#680,#681);+#680 = CARTESIAN_POINT('',(0.365,-0.25,0.2));+#681 = VECTOR('',#682,1.);+#682 = DIRECTION('',(0.,1.,0.));+#683 = ORIENTED_EDGE('',*,*,#684,.F.);+#684 = EDGE_CURVE('',#222,#677,#685,.T.);+#685 = CIRCLE('',#686,1.5E-02);+#686 = AXIS2_PLACEMENT_3D('',#687,#688,#689);+#687 = CARTESIAN_POINT('',(0.365,0.1875,0.185));+#688 = DIRECTION('',(0.,1.,-0.));+#689 = DIRECTION('',(-1.,0.,0.));+#690 = CYLINDRICAL_SURFACE('',#691,1.5E-02);+#691 = AXIS2_PLACEMENT_3D('',#692,#693,#694);+#692 = CARTESIAN_POINT('',(0.365,-0.25,0.185));+#693 = DIRECTION('',(0.,1.,0.));+#694 = DIRECTION('',(-1.,0.,0.));+#695 = ADVANCED_FACE('',(#696),#746,.T.);+#696 = FACE_BOUND('',#697,.T.);+#697 = EDGE_LOOP('',(#698,#706,#714,#720,#721,#722,#723,#731,#739,#745)+);+#698 = ORIENTED_EDGE('',*,*,#699,.F.);+#699 = EDGE_CURVE('',#700,#473,#702,.T.);+#700 = VERTEX_POINT('',#701);+#701 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#702 = LINE('',#703,#704);+#703 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#704 = VECTOR('',#705,1.);+#705 = DIRECTION('',(1.,0.,0.));+#706 = ORIENTED_EDGE('',*,*,#707,.T.);+#707 = EDGE_CURVE('',#700,#708,#710,.T.);+#708 = VERTEX_POINT('',#709);+#709 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#710 = LINE('',#711,#712);+#711 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#712 = VECTOR('',#713,1.);+#713 = DIRECTION('',(0.,0.,1.));+#714 = ORIENTED_EDGE('',*,*,#715,.T.);+#715 = EDGE_CURVE('',#708,#252,#716,.T.);+#716 = LINE('',#717,#718);+#717 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#718 = VECTOR('',#719,1.);+#719 = DIRECTION('',(1.,0.,0.));+#720 = ORIENTED_EDGE('',*,*,#251,.T.);+#721 = ORIENTED_EDGE('',*,*,#285,.F.);+#722 = ORIENTED_EDGE('',*,*,#635,.T.);+#723 = ORIENTED_EDGE('',*,*,#724,.T.);+#724 = EDGE_CURVE('',#636,#725,#727,.T.);+#725 = VERTEX_POINT('',#726);+#726 = CARTESIAN_POINT('',(0.485,0.25,0.185));+#727 = LINE('',#728,#729);+#728 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#729 = VECTOR('',#730,1.);+#730 = DIRECTION('',(1.,0.,0.));+#731 = ORIENTED_EDGE('',*,*,#732,.F.);+#732 = EDGE_CURVE('',#733,#725,#735,.T.);+#733 = VERTEX_POINT('',#734);+#734 = CARTESIAN_POINT('',(0.485,0.25,1.5E-02));+#735 = LINE('',#736,#737);+#736 = CARTESIAN_POINT('',(0.485,0.25,1.5E-02));+#737 = VECTOR('',#738,1.);+#738 = DIRECTION('',(0.,0.,1.));+#739 = ORIENTED_EDGE('',*,*,#740,.F.);+#740 = EDGE_CURVE('',#465,#733,#741,.T.);+#741 = LINE('',#742,#743);+#742 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#743 = VECTOR('',#744,1.);+#744 = DIRECTION('',(1.,0.,0.));+#745 = ORIENTED_EDGE('',*,*,#472,.F.);+#746 = PLANE('',#747);+#747 = AXIS2_PLACEMENT_3D('',#748,#749,#750);+#748 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#749 = DIRECTION('',(0.,1.,0.));+#750 = DIRECTION('',(0.,0.,1.));+#751 = ADVANCED_FACE('',(#752),#770,.F.);+#752 = FACE_BOUND('',#753,.F.);+#753 = EDGE_LOOP('',(#754,#762,#768,#769));+#754 = ORIENTED_EDGE('',*,*,#755,.F.);+#755 = EDGE_CURVE('',#756,#310,#758,.T.);+#756 = VERTEX_POINT('',#757);+#757 = CARTESIAN_POINT('',(-0.4625,0.1875,0.2));+#758 = LINE('',#759,#760);+#759 = CARTESIAN_POINT('',(-0.48125,0.1875,0.2));+#760 = VECTOR('',#761,1.);+#761 = DIRECTION('',(1.,0.,0.));+#762 = ORIENTED_EDGE('',*,*,#763,.T.);+#763 = EDGE_CURVE('',#756,#260,#764,.T.);+#764 = LINE('',#765,#766);+#765 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#766 = VECTOR('',#767,1.);+#767 = DIRECTION('',(-0.,-0.,-1.));+#768 = ORIENTED_EDGE('',*,*,#267,.F.);+#769 = ORIENTED_EDGE('',*,*,#317,.F.);+#770 = PLANE('',#771);+#771 = AXIS2_PLACEMENT_3D('',#772,#773,#774);+#772 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#773 = DIRECTION('',(0.,-1.,0.));+#774 = DIRECTION('',(1.,0.,0.));+#775 = ADVANCED_FACE('',(#776),#794,.F.);+#776 = FACE_BOUND('',#777,.F.);+#777 = EDGE_LOOP('',(#778,#779,#787,#793));+#778 = ORIENTED_EDGE('',*,*,#763,.F.);+#779 = ORIENTED_EDGE('',*,*,#780,.F.);+#780 = EDGE_CURVE('',#781,#756,#783,.T.);+#781 = VERTEX_POINT('',#782);+#782 = CARTESIAN_POINT('',(-0.4625,0.25,0.2));+#783 = LINE('',#784,#785);+#784 = CARTESIAN_POINT('',(-0.4625,3.125E-02,0.2));+#785 = VECTOR('',#786,1.);+#786 = DIRECTION('',(0.,-1.,0.));+#787 = ORIENTED_EDGE('',*,*,#788,.F.);+#788 = EDGE_CURVE('',#252,#781,#789,.T.);+#789 = LINE('',#790,#791);+#790 = CARTESIAN_POINT('',(-0.4625,0.25,0.15));+#791 = VECTOR('',#792,1.);+#792 = DIRECTION('',(0.,0.,1.));+#793 = ORIENTED_EDGE('',*,*,#259,.F.);+#794 = PLANE('',#795);+#795 = AXIS2_PLACEMENT_3D('',#796,#797,#798);+#796 = CARTESIAN_POINT('',(-0.4625,0.3125,0.3));+#797 = DIRECTION('',(-1.,0.,0.));+#798 = DIRECTION('',(0.,-1.,0.));+#799 = ADVANCED_FACE('',(#800),#818,.F.);+#800 = FACE_BOUND('',#801,.F.);+#801 = EDGE_LOOP('',(#802,#810,#816,#817));+#802 = ORIENTED_EDGE('',*,*,#803,.F.);+#803 = EDGE_CURVE('',#804,#333,#806,.T.);+#804 = VERTEX_POINT('',#805);+#805 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.2));+#806 = LINE('',#807,#808);+#807 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#808 = VECTOR('',#809,1.);+#809 = DIRECTION('',(-0.,-0.,-1.));+#810 = ORIENTED_EDGE('',*,*,#811,.F.);+#811 = EDGE_CURVE('',#301,#804,#812,.T.);+#812 = LINE('',#813,#814);+#813 = CARTESIAN_POINT('',(-1.875E-02,-0.1875,0.2));+#814 = VECTOR('',#815,1.);+#815 = DIRECTION('',(-1.,0.,0.));+#816 = ORIENTED_EDGE('',*,*,#300,.T.);+#817 = ORIENTED_EDGE('',*,*,#342,.F.);+#818 = PLANE('',#819);+#819 = AXIS2_PLACEMENT_3D('',#820,#821,#822);+#820 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#821 = DIRECTION('',(0.,1.,0.));+#822 = DIRECTION('',(-1.,0.,0.));+#823 = ADVANCED_FACE('',(#824),#851,.T.);+#824 = FACE_BOUND('',#825,.T.);+#825 = EDGE_LOOP('',(#826,#834,#840,#841,#847,#848,#849,#850));+#826 = ORIENTED_EDGE('',*,*,#827,.F.);+#827 = EDGE_CURVE('',#828,#781,#830,.T.);+#828 = VERTEX_POINT('',#829);+#829 = CARTESIAN_POINT('',(-0.485,0.25,0.2));+#830 = LINE('',#831,#832);+#831 = CARTESIAN_POINT('',(-0.5,0.25,0.2));+#832 = VECTOR('',#833,1.);+#833 = DIRECTION('',(1.,0.,0.));+#834 = ORIENTED_EDGE('',*,*,#835,.F.);+#835 = EDGE_CURVE('',#384,#828,#836,.T.);+#836 = LINE('',#837,#838);+#837 = CARTESIAN_POINT('',(-0.485,-0.25,0.2));+#838 = VECTOR('',#839,1.);+#839 = DIRECTION('',(0.,1.,0.));+#840 = ORIENTED_EDGE('',*,*,#392,.T.);+#841 = ORIENTED_EDGE('',*,*,#842,.F.);+#842 = EDGE_CURVE('',#804,#393,#843,.T.);+#843 = LINE('',#844,#845);+#844 = CARTESIAN_POINT('',(-0.4625,-0.21875,0.2));+#845 = VECTOR('',#846,1.);+#846 = DIRECTION('',(0.,-1.,0.));+#847 = ORIENTED_EDGE('',*,*,#811,.F.);+#848 = ORIENTED_EDGE('',*,*,#309,.T.);+#849 = ORIENTED_EDGE('',*,*,#755,.F.);+#850 = ORIENTED_EDGE('',*,*,#780,.F.);+#851 = PLANE('',#852);+#852 = AXIS2_PLACEMENT_3D('',#853,#854,#855);+#853 = CARTESIAN_POINT('',(-0.5,-0.25,0.2));+#854 = DIRECTION('',(0.,0.,1.));+#855 = DIRECTION('',(1.,0.,0.));+#856 = ADVANCED_FACE('',(#857),#863,.F.);+#857 = FACE_BOUND('',#858,.F.);+#858 = EDGE_LOOP('',(#859,#860,#861,#862));+#859 = ORIENTED_EDGE('',*,*,#842,.F.);+#860 = ORIENTED_EDGE('',*,*,#803,.T.);+#861 = ORIENTED_EDGE('',*,*,#332,.F.);+#862 = ORIENTED_EDGE('',*,*,#400,.T.);+#863 = PLANE('',#864);+#864 = AXIS2_PLACEMENT_3D('',#865,#866,#867);+#865 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#866 = DIRECTION('',(-1.,0.,0.));+#867 = DIRECTION('',(0.,-1.,0.));+#868 = ADVANCED_FACE('',(#869),#926,.F.);+#869 = FACE_BOUND('',#870,.F.);+#870 = EDGE_LOOP('',(#871,#881,#887,#888,#896,#904,#912,#920));+#871 = ORIENTED_EDGE('',*,*,#872,.F.);+#872 = EDGE_CURVE('',#873,#875,#877,.T.);+#873 = VERTEX_POINT('',#874);+#874 = CARTESIAN_POINT('',(-0.485,0.25,-1.734723475977E-18));+#875 = VERTEX_POINT('',#876);+#876 = CARTESIAN_POINT('',(-0.4625,0.25,0.));+#877 = LINE('',#878,#879);+#878 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#879 = VECTOR('',#880,1.);+#880 = DIRECTION('',(1.,0.,0.));+#881 = ORIENTED_EDGE('',*,*,#882,.F.);+#882 = EDGE_CURVE('',#357,#873,#883,.T.);+#883 = LINE('',#884,#885);+#884 = CARTESIAN_POINT('',(-0.485,-0.25,-1.734723475977E-18));+#885 = VECTOR('',#886,1.);+#886 = DIRECTION('',(0.,1.,0.));+#887 = ORIENTED_EDGE('',*,*,#356,.T.);+#888 = ORIENTED_EDGE('',*,*,#889,.F.);+#889 = EDGE_CURVE('',#890,#359,#892,.T.);+#890 = VERTEX_POINT('',#891);+#891 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.));+#892 = LINE('',#893,#894);+#893 = CARTESIAN_POINT('',(-0.4625,-0.21875,0.));+#894 = VECTOR('',#895,1.);+#895 = DIRECTION('',(0.,-1.,0.));+#896 = ORIENTED_EDGE('',*,*,#897,.F.);+#897 = EDGE_CURVE('',#898,#890,#900,.T.);+#898 = VERTEX_POINT('',#899);+#899 = CARTESIAN_POINT('',(-0.365,-0.1875,-1.734723475977E-18));+#900 = LINE('',#901,#902);+#901 = CARTESIAN_POINT('',(-1.875E-02,-0.1875,0.));+#902 = VECTOR('',#903,1.);+#903 = DIRECTION('',(-1.,0.,0.));+#904 = ORIENTED_EDGE('',*,*,#905,.T.);+#905 = EDGE_CURVE('',#898,#906,#908,.T.);+#906 = VERTEX_POINT('',#907);+#907 = CARTESIAN_POINT('',(-0.365,0.1875,-1.734723475977E-18));+#908 = LINE('',#909,#910);+#909 = CARTESIAN_POINT('',(-0.365,-0.25,-1.734723475977E-18));+#910 = VECTOR('',#911,1.);+#911 = DIRECTION('',(0.,1.,0.));+#912 = ORIENTED_EDGE('',*,*,#913,.F.);+#913 = EDGE_CURVE('',#914,#906,#916,.T.);+#914 = VERTEX_POINT('',#915);+#915 = CARTESIAN_POINT('',(-0.4625,0.1875,0.));+#916 = LINE('',#917,#918);+#917 = CARTESIAN_POINT('',(-0.48125,0.1875,0.));+#918 = VECTOR('',#919,1.);+#919 = DIRECTION('',(1.,0.,0.));+#920 = ORIENTED_EDGE('',*,*,#921,.F.);+#921 = EDGE_CURVE('',#875,#914,#922,.T.);+#922 = LINE('',#923,#924);+#923 = CARTESIAN_POINT('',(-0.4625,3.125E-02,0.));+#924 = VECTOR('',#925,1.);+#925 = DIRECTION('',(0.,-1.,0.));+#926 = PLANE('',#927);+#927 = AXIS2_PLACEMENT_3D('',#928,#929,#930);+#928 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#929 = DIRECTION('',(0.,0.,1.));+#930 = DIRECTION('',(1.,0.,0.));+#931 = ADVANCED_FACE('',(#932),#951,.T.);+#932 = FACE_BOUND('',#933,.F.);+#933 = EDGE_LOOP('',(#934,#935,#936,#945));+#934 = ORIENTED_EDGE('',*,*,#366,.T.);+#935 = ORIENTED_EDGE('',*,*,#882,.T.);+#936 = ORIENTED_EDGE('',*,*,#937,.F.);+#937 = EDGE_CURVE('',#938,#873,#940,.T.);+#938 = VERTEX_POINT('',#939);+#939 = CARTESIAN_POINT('',(-0.5,0.25,1.5E-02));+#940 = CIRCLE('',#941,1.5E-02);+#941 = AXIS2_PLACEMENT_3D('',#942,#943,#944);+#942 = CARTESIAN_POINT('',(-0.485,0.25,1.5E-02));+#943 = DIRECTION('',(0.,-1.,0.));+#944 = DIRECTION('',(0.,0.,1.));+#945 = ORIENTED_EDGE('',*,*,#946,.F.);+#946 = EDGE_CURVE('',#367,#938,#947,.T.);+#947 = LINE('',#948,#949);+#948 = CARTESIAN_POINT('',(-0.5,-0.25,1.5E-02));+#949 = VECTOR('',#950,1.);+#950 = DIRECTION('',(0.,1.,0.));+#951 = CYLINDRICAL_SURFACE('',#952,1.5E-02);+#952 = AXIS2_PLACEMENT_3D('',#953,#954,#955);+#953 = CARTESIAN_POINT('',(-0.485,-0.25,1.5E-02));+#954 = DIRECTION('',(0.,1.,0.));+#955 = DIRECTION('',(-1.,0.,0.));+#956 = ADVANCED_FACE('',(#957),#968,.F.);+#957 = FACE_BOUND('',#958,.F.);+#958 = EDGE_LOOP('',(#959,#960,#966,#967));+#959 = ORIENTED_EDGE('',*,*,#423,.T.);+#960 = ORIENTED_EDGE('',*,*,#961,.T.);+#961 = EDGE_CURVE('',#424,#890,#962,.T.);+#962 = LINE('',#963,#964);+#963 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#964 = VECTOR('',#965,1.);+#965 = DIRECTION('',(-0.,-0.,-1.));+#966 = ORIENTED_EDGE('',*,*,#889,.T.);+#967 = ORIENTED_EDGE('',*,*,#409,.T.);+#968 = PLANE('',#969);+#969 = AXIS2_PLACEMENT_3D('',#970,#971,#972);+#970 = CARTESIAN_POINT('',(-0.4625,-0.1875,0.3));+#971 = DIRECTION('',(-1.,0.,0.));+#972 = DIRECTION('',(0.,-1.,0.));+#973 = ADVANCED_FACE('',(#974),#992,.F.);+#974 = FACE_BOUND('',#975,.F.);+#975 = EDGE_LOOP('',(#976,#977,#978,#986));+#976 = ORIENTED_EDGE('',*,*,#375,.F.);+#977 = ORIENTED_EDGE('',*,*,#946,.T.);+#978 = ORIENTED_EDGE('',*,*,#979,.T.);+#979 = EDGE_CURVE('',#938,#980,#982,.T.);+#980 = VERTEX_POINT('',#981);+#981 = CARTESIAN_POINT('',(-0.5,0.25,0.185));+#982 = LINE('',#983,#984);+#983 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#984 = VECTOR('',#985,1.);+#985 = DIRECTION('',(0.,0.,1.));+#986 = ORIENTED_EDGE('',*,*,#987,.F.);+#987 = EDGE_CURVE('',#376,#980,#988,.T.);+#988 = LINE('',#989,#990);+#989 = CARTESIAN_POINT('',(-0.5,-0.25,0.185));+#990 = VECTOR('',#991,1.);+#991 = DIRECTION('',(0.,1.,0.));+#992 = PLANE('',#993);+#993 = AXIS2_PLACEMENT_3D('',#994,#995,#996);+#994 = CARTESIAN_POINT('',(-0.5,-0.25,0.));+#995 = DIRECTION('',(1.,0.,0.));+#996 = DIRECTION('',(0.,0.,1.));+#997 = ADVANCED_FACE('',(#998),#1010,.T.);+#998 = FACE_BOUND('',#999,.T.);+#999 = EDGE_LOOP('',(#1000,#1001,#1002,#1009));+#1000 = ORIENTED_EDGE('',*,*,#383,.T.);+#1001 = ORIENTED_EDGE('',*,*,#835,.T.);+#1002 = ORIENTED_EDGE('',*,*,#1003,.F.);+#1003 = EDGE_CURVE('',#980,#828,#1004,.T.);+#1004 = CIRCLE('',#1005,1.5E-02);+#1005 = AXIS2_PLACEMENT_3D('',#1006,#1007,#1008);+#1006 = CARTESIAN_POINT('',(-0.485,0.25,0.185));+#1007 = DIRECTION('',(0.,1.,0.));+#1008 = DIRECTION('',(0.,0.,1.));+#1009 = ORIENTED_EDGE('',*,*,#987,.F.);+#1010 = CYLINDRICAL_SURFACE('',#1011,1.5E-02);+#1011 = AXIS2_PLACEMENT_3D('',#1012,#1013,#1014);+#1012 = CARTESIAN_POINT('',(-0.485,-0.25,0.185));+#1013 = DIRECTION('',(0.,1.,0.));+#1014 = DIRECTION('',(-1.,0.,0.));+#1015 = ADVANCED_FACE('',(#1016),#1028,.F.);+#1016 = FACE_BOUND('',#1017,.F.);+#1017 = EDGE_LOOP('',(#1018,#1019,#1020,#1027));+#1018 = ORIENTED_EDGE('',*,*,#961,.F.);+#1019 = ORIENTED_EDGE('',*,*,#504,.T.);+#1020 = ORIENTED_EDGE('',*,*,#1021,.T.);+#1021 = EDGE_CURVE('',#497,#898,#1022,.T.);+#1022 = CIRCLE('',#1023,1.5E-02);+#1023 = AXIS2_PLACEMENT_3D('',#1024,#1025,#1026);+#1024 = CARTESIAN_POINT('',(-0.365,-0.1875,1.5E-02));+#1025 = DIRECTION('',(-0.,1.,0.));+#1026 = DIRECTION('',(1.,0.,0.));+#1027 = ORIENTED_EDGE('',*,*,#897,.T.);+#1028 = PLANE('',#1029);+#1029 = AXIS2_PLACEMENT_3D('',#1030,#1031,#1032);+#1030 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1031 = DIRECTION('',(0.,1.,0.));+#1032 = DIRECTION('',(-1.,0.,0.));+#1033 = ADVANCED_FACE('',(#1034),#1046,.T.);+#1034 = FACE_BOUND('',#1035,.T.);+#1035 = EDGE_LOOP('',(#1036,#1037,#1038,#1039));+#1036 = ORIENTED_EDGE('',*,*,#496,.F.);+#1037 = ORIENTED_EDGE('',*,*,#1021,.T.);+#1038 = ORIENTED_EDGE('',*,*,#905,.T.);+#1039 = ORIENTED_EDGE('',*,*,#1040,.F.);+#1040 = EDGE_CURVE('',#489,#906,#1041,.T.);+#1041 = CIRCLE('',#1042,1.5E-02);+#1042 = AXIS2_PLACEMENT_3D('',#1043,#1044,#1045);+#1043 = CARTESIAN_POINT('',(-0.365,0.1875,1.5E-02));+#1044 = DIRECTION('',(-0.,1.,0.));+#1045 = DIRECTION('',(1.,0.,0.));+#1046 = CYLINDRICAL_SURFACE('',#1047,1.5E-02);+#1047 = AXIS2_PLACEMENT_3D('',#1048,#1049,#1050);+#1048 = CARTESIAN_POINT('',(-0.365,-0.25,1.5E-02));+#1049 = DIRECTION('',(0.,1.,0.));+#1050 = DIRECTION('',(1.,0.,0.));+#1051 = ADVANCED_FACE('',(#1052),#1063,.F.);+#1052 = FACE_BOUND('',#1053,.F.);+#1053 = EDGE_LOOP('',(#1054,#1055,#1061,#1062));+#1054 = ORIENTED_EDGE('',*,*,#488,.T.);+#1055 = ORIENTED_EDGE('',*,*,#1056,.T.);+#1056 = EDGE_CURVE('',#481,#914,#1057,.T.);+#1057 = LINE('',#1058,#1059);+#1058 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1059 = VECTOR('',#1060,1.);+#1060 = DIRECTION('',(-0.,-0.,-1.));+#1061 = ORIENTED_EDGE('',*,*,#913,.T.);+#1062 = ORIENTED_EDGE('',*,*,#1040,.F.);+#1063 = PLANE('',#1064);+#1064 = AXIS2_PLACEMENT_3D('',#1065,#1066,#1067);+#1065 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1066 = DIRECTION('',(0.,-1.,0.));+#1067 = DIRECTION('',(1.,0.,0.));+#1068 = ADVANCED_FACE('',(#1069),#1080,.F.);+#1069 = FACE_BOUND('',#1070,.F.);+#1070 = EDGE_LOOP('',(#1071,#1072,#1073,#1079));+#1071 = ORIENTED_EDGE('',*,*,#1056,.F.);+#1072 = ORIENTED_EDGE('',*,*,#480,.T.);+#1073 = ORIENTED_EDGE('',*,*,#1074,.F.);+#1074 = EDGE_CURVE('',#875,#473,#1075,.T.);+#1075 = LINE('',#1076,#1077);+#1076 = CARTESIAN_POINT('',(-0.4625,0.25,0.15));+#1077 = VECTOR('',#1078,1.);+#1078 = DIRECTION('',(0.,0.,1.));+#1079 = ORIENTED_EDGE('',*,*,#921,.T.);+#1080 = PLANE('',#1081);+#1081 = AXIS2_PLACEMENT_3D('',#1082,#1083,#1084);+#1082 = CARTESIAN_POINT('',(-0.4625,0.3125,0.3));+#1083 = DIRECTION('',(-1.,0.,0.));+#1084 = DIRECTION('',(0.,-1.,0.));+#1085 = ADVANCED_FACE('',(#1086),#1111,.F.);+#1086 = FACE_BOUND('',#1087,.F.);+#1087 = EDGE_LOOP('',(#1088,#1089,#1097,#1105));+#1088 = ORIENTED_EDGE('',*,*,#464,.T.);+#1089 = ORIENTED_EDGE('',*,*,#1090,.T.);+#1090 = EDGE_CURVE('',#457,#1091,#1093,.T.);+#1091 = VERTEX_POINT('',#1092);+#1092 = CARTESIAN_POINT('',(0.4625,0.1875,0.));+#1093 = LINE('',#1094,#1095);+#1094 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1095 = VECTOR('',#1096,1.);+#1096 = DIRECTION('',(-0.,-0.,-1.));+#1097 = ORIENTED_EDGE('',*,*,#1098,.T.);+#1098 = EDGE_CURVE('',#1091,#1099,#1101,.T.);+#1099 = VERTEX_POINT('',#1100);+#1100 = CARTESIAN_POINT('',(0.4625,0.25,0.));+#1101 = LINE('',#1102,#1103);+#1102 = CARTESIAN_POINT('',(0.4625,-3.125E-02,0.));+#1103 = VECTOR('',#1104,1.);+#1104 = DIRECTION('',(0.,1.,0.));+#1105 = ORIENTED_EDGE('',*,*,#1106,.F.);+#1106 = EDGE_CURVE('',#465,#1099,#1107,.T.);+#1107 = LINE('',#1108,#1109);+#1108 = CARTESIAN_POINT('',(0.4625,0.25,0.15));+#1109 = VECTOR('',#1110,1.);+#1110 = DIRECTION('',(0.,0.,-1.));+#1111 = PLANE('',#1112);+#1112 = AXIS2_PLACEMENT_3D('',#1113,#1114,#1115);+#1113 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1114 = DIRECTION('',(1.,0.,0.));+#1115 = DIRECTION('',(0.,1.,0.));+#1116 = ADVANCED_FACE('',(#1117),#1136,.F.);+#1117 = FACE_BOUND('',#1118,.F.);+#1118 = EDGE_LOOP('',(#1119,#1120,#1121,#1130));+#1119 = ORIENTED_EDGE('',*,*,#1090,.F.);+#1120 = ORIENTED_EDGE('',*,*,#456,.T.);+#1121 = ORIENTED_EDGE('',*,*,#1122,.F.);+#1122 = EDGE_CURVE('',#1123,#449,#1125,.T.);+#1123 = VERTEX_POINT('',#1124);+#1124 = CARTESIAN_POINT('',(0.365,0.1875,-1.734723475977E-18));+#1125 = CIRCLE('',#1126,1.5E-02);+#1126 = AXIS2_PLACEMENT_3D('',#1127,#1128,#1129);+#1127 = CARTESIAN_POINT('',(0.365,0.1875,1.5E-02));+#1128 = DIRECTION('',(0.,1.,-0.));+#1129 = DIRECTION('',(-1.,0.,0.));+#1130 = ORIENTED_EDGE('',*,*,#1131,.T.);+#1131 = EDGE_CURVE('',#1123,#1091,#1132,.T.);+#1132 = LINE('',#1133,#1134);+#1133 = CARTESIAN_POINT('',(-5.625E-02,0.1875,0.));+#1134 = VECTOR('',#1135,1.);+#1135 = DIRECTION('',(1.,0.,0.));+#1136 = PLANE('',#1137);+#1137 = AXIS2_PLACEMENT_3D('',#1138,#1139,#1140);+#1138 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1139 = DIRECTION('',(0.,-1.,0.));+#1140 = DIRECTION('',(1.,0.,0.));+#1141 = ADVANCED_FACE('',(#1142),#1161,.T.);+#1142 = FACE_BOUND('',#1143,.F.);+#1143 = EDGE_LOOP('',(#1144,#1145,#1154,#1160));+#1144 = ORIENTED_EDGE('',*,*,#448,.F.);+#1145 = ORIENTED_EDGE('',*,*,#1146,.F.);+#1146 = EDGE_CURVE('',#1147,#441,#1149,.T.);+#1147 = VERTEX_POINT('',#1148);+#1148 = CARTESIAN_POINT('',(0.365,-0.1875,-1.734723475977E-18));+#1149 = CIRCLE('',#1150,1.5E-02);+#1150 = AXIS2_PLACEMENT_3D('',#1151,#1152,#1153);+#1151 = CARTESIAN_POINT('',(0.365,-0.1875,1.5E-02));+#1152 = DIRECTION('',(0.,1.,-0.));+#1153 = DIRECTION('',(-1.,0.,0.));+#1154 = ORIENTED_EDGE('',*,*,#1155,.T.);+#1155 = EDGE_CURVE('',#1147,#1123,#1156,.T.);+#1156 = LINE('',#1157,#1158);+#1157 = CARTESIAN_POINT('',(0.365,-0.25,-1.734723475977E-18));+#1158 = VECTOR('',#1159,1.);+#1159 = DIRECTION('',(0.,1.,0.));+#1160 = ORIENTED_EDGE('',*,*,#1122,.T.);+#1161 = CYLINDRICAL_SURFACE('',#1162,1.5E-02);+#1162 = AXIS2_PLACEMENT_3D('',#1163,#1164,#1165);+#1163 = CARTESIAN_POINT('',(0.365,-0.25,1.5E-02));+#1164 = DIRECTION('',(0.,1.,0.));+#1165 = DIRECTION('',(-1.,0.,0.));+#1166 = ADVANCED_FACE('',(#1167),#1185,.F.);+#1167 = FACE_BOUND('',#1168,.F.);+#1168 = EDGE_LOOP('',(#1169,#1170,#1178,#1184));+#1169 = ORIENTED_EDGE('',*,*,#440,.T.);+#1170 = ORIENTED_EDGE('',*,*,#1171,.T.);+#1171 = EDGE_CURVE('',#433,#1172,#1174,.T.);+#1172 = VERTEX_POINT('',#1173);+#1173 = CARTESIAN_POINT('',(0.4625,-0.1875,0.));+#1174 = LINE('',#1175,#1176);+#1175 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1176 = VECTOR('',#1177,1.);+#1177 = DIRECTION('',(-0.,-0.,-1.));+#1178 = ORIENTED_EDGE('',*,*,#1179,.T.);+#1179 = EDGE_CURVE('',#1172,#1147,#1180,.T.);+#1180 = LINE('',#1181,#1182);+#1181 = CARTESIAN_POINT('',(0.40625,-0.1875,0.));+#1182 = VECTOR('',#1183,1.);+#1183 = DIRECTION('',(-1.,0.,0.));+#1184 = ORIENTED_EDGE('',*,*,#1146,.T.);+#1185 = PLANE('',#1186);+#1186 = AXIS2_PLACEMENT_3D('',#1187,#1188,#1189);+#1187 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1188 = DIRECTION('',(0.,1.,0.));+#1189 = DIRECTION('',(-1.,0.,0.));+#1190 = ADVANCED_FACE('',(#1191),#1202,.F.);+#1191 = FACE_BOUND('',#1192,.F.);+#1192 = EDGE_LOOP('',(#1193,#1194,#1195,#1196));+#1193 = ORIENTED_EDGE('',*,*,#1171,.F.);+#1194 = ORIENTED_EDGE('',*,*,#432,.T.);+#1195 = ORIENTED_EDGE('',*,*,#554,.T.);+#1196 = ORIENTED_EDGE('',*,*,#1197,.T.);+#1197 = EDGE_CURVE('',#545,#1172,#1198,.T.);+#1198 = LINE('',#1199,#1200);+#1199 = CARTESIAN_POINT('',(0.4625,-0.28125,0.));+#1200 = VECTOR('',#1201,1.);+#1201 = DIRECTION('',(0.,1.,0.));+#1202 = PLANE('',#1203);+#1203 = AXIS2_PLACEMENT_3D('',#1204,#1205,#1206);+#1204 = CARTESIAN_POINT('',(0.4625,-0.3125,0.3));+#1205 = DIRECTION('',(1.,0.,0.));+#1206 = DIRECTION('',(0.,1.,0.));+#1207 = ADVANCED_FACE('',(#1208),#1233,.T.);+#1208 = FACE_BOUND('',#1209,.T.);+#1209 = EDGE_LOOP('',(#1210,#1218,#1219,#1227));+#1210 = ORIENTED_EDGE('',*,*,#1211,.T.);+#1211 = EDGE_CURVE('',#1212,#513,#1214,.T.);+#1212 = VERTEX_POINT('',#1213);+#1213 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1214 = LINE('',#1215,#1216);+#1215 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1216 = VECTOR('',#1217,1.);+#1217 = DIRECTION('',(0.,0.,1.));+#1218 = ORIENTED_EDGE('',*,*,#512,.T.);+#1219 = ORIENTED_EDGE('',*,*,#1220,.F.);+#1220 = EDGE_CURVE('',#1221,#515,#1223,.T.);+#1221 = VERTEX_POINT('',#1222);+#1222 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1223 = LINE('',#1224,#1225);+#1224 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1225 = VECTOR('',#1226,1.);+#1226 = DIRECTION('',(0.,0.,1.));+#1227 = ORIENTED_EDGE('',*,*,#1228,.F.);+#1228 = EDGE_CURVE('',#1212,#1221,#1229,.T.);+#1229 = LINE('',#1230,#1231);+#1230 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1231 = VECTOR('',#1232,1.);+#1232 = DIRECTION('',(0.,-1.,0.));+#1233 = PLANE('',#1234);+#1234 = AXIS2_PLACEMENT_3D('',#1235,#1236,#1237);+#1235 = CARTESIAN_POINT('',(0.173205080757,0.2,7.5E-03));+#1236 = DIRECTION('',(1.,0.,0.));+#1237 = DIRECTION('',(0.,-1.,0.));+#1238 = ADVANCED_FACE('',(#1239),#1257,.T.);+#1239 = FACE_BOUND('',#1240,.T.);+#1240 = EDGE_LOOP('',(#1241,#1249,#1250,#1251));+#1241 = ORIENTED_EDGE('',*,*,#1242,.T.);+#1242 = EDGE_CURVE('',#1243,#523,#1245,.T.);+#1243 = VERTEX_POINT('',#1244);+#1244 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1245 = LINE('',#1246,#1247);+#1246 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1247 = VECTOR('',#1248,1.);+#1248 = DIRECTION('',(0.,0.,1.));+#1249 = ORIENTED_EDGE('',*,*,#530,.T.);+#1250 = ORIENTED_EDGE('',*,*,#1211,.F.);+#1251 = ORIENTED_EDGE('',*,*,#1252,.F.);+#1252 = EDGE_CURVE('',#1243,#1212,#1253,.T.);+#1253 = LINE('',#1254,#1255);+#1254 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1255 = VECTOR('',#1256,1.);+#1256 = DIRECTION('',(0.866025403784,0.5,0.));+#1257 = PLANE('',#1258);+#1258 = AXIS2_PLACEMENT_3D('',#1259,#1260,#1261);+#1259 = CARTESIAN_POINT('',(-0.173205080757,0.,7.5E-03));+#1260 = DIRECTION('',(-0.5,0.866025403784,0.));+#1261 = DIRECTION('',(0.866025403784,0.5,0.));+#1262 = ADVANCED_FACE('',(#1263),#1274,.T.);+#1263 = FACE_BOUND('',#1264,.T.);+#1264 = EDGE_LOOP('',(#1265,#1266,#1267,#1268));+#1265 = ORIENTED_EDGE('',*,*,#1220,.T.);+#1266 = ORIENTED_EDGE('',*,*,#522,.T.);+#1267 = ORIENTED_EDGE('',*,*,#1242,.F.);+#1268 = ORIENTED_EDGE('',*,*,#1269,.F.);+#1269 = EDGE_CURVE('',#1221,#1243,#1270,.T.);+#1270 = LINE('',#1271,#1272);+#1271 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1272 = VECTOR('',#1273,1.);+#1273 = DIRECTION('',(-0.866025403784,0.5,0.));+#1274 = PLANE('',#1275);+#1275 = AXIS2_PLACEMENT_3D('',#1276,#1277,#1278);+#1276 = CARTESIAN_POINT('',(0.173205080757,-0.2,7.5E-03));+#1277 = DIRECTION('',(-0.5,-0.866025403784,0.));+#1278 = DIRECTION('',(-0.866025403784,0.5,0.));+#1279 = ADVANCED_FACE('',(#1280),#1302,.F.);+#1280 = FACE_BOUND('',#1281,.F.);+#1281 = EDGE_LOOP('',(#1282,#1290,#1291,#1292,#1293,#1294,#1295,#1296));+#1282 = ORIENTED_EDGE('',*,*,#1283,.F.);+#1283 = EDGE_CURVE('',#1099,#1284,#1286,.T.);+#1284 = VERTEX_POINT('',#1285);+#1285 = CARTESIAN_POINT('',(0.485,0.25,-1.734723475977E-18));+#1286 = LINE('',#1287,#1288);+#1287 = CARTESIAN_POINT('',(0.35,0.25,0.));+#1288 = VECTOR('',#1289,1.);+#1289 = DIRECTION('',(1.,0.,0.));+#1290 = ORIENTED_EDGE('',*,*,#1098,.F.);+#1291 = ORIENTED_EDGE('',*,*,#1131,.F.);+#1292 = ORIENTED_EDGE('',*,*,#1155,.F.);+#1293 = ORIENTED_EDGE('',*,*,#1179,.F.);+#1294 = ORIENTED_EDGE('',*,*,#1197,.F.);+#1295 = ORIENTED_EDGE('',*,*,#544,.T.);+#1296 = ORIENTED_EDGE('',*,*,#1297,.T.);+#1297 = EDGE_CURVE('',#547,#1284,#1298,.T.);+#1298 = LINE('',#1299,#1300);+#1299 = CARTESIAN_POINT('',(0.485,-0.25,-1.734723475977E-18));+#1300 = VECTOR('',#1301,1.);+#1301 = DIRECTION('',(0.,1.,0.));+#1302 = PLANE('',#1303);+#1303 = AXIS2_PLACEMENT_3D('',#1304,#1305,#1306);+#1304 = CARTESIAN_POINT('',(0.35,-0.25,0.));+#1305 = DIRECTION('',(0.,0.,1.));+#1306 = DIRECTION('',(1.,0.,0.));+#1307 = ADVANCED_FACE('',(#1308),#1327,.T.);+#1308 = FACE_BOUND('',#1309,.T.);+#1309 = EDGE_LOOP('',(#1310,#1311,#1312,#1321));+#1310 = ORIENTED_EDGE('',*,*,#596,.T.);+#1311 = ORIENTED_EDGE('',*,*,#1297,.T.);+#1312 = ORIENTED_EDGE('',*,*,#1313,.F.);+#1313 = EDGE_CURVE('',#1314,#1284,#1316,.T.);+#1314 = VERTEX_POINT('',#1315);+#1315 = CARTESIAN_POINT('',(0.5,0.25,1.5E-02));+#1316 = CIRCLE('',#1317,1.5E-02);+#1317 = AXIS2_PLACEMENT_3D('',#1318,#1319,#1320);+#1318 = CARTESIAN_POINT('',(0.485,0.25,1.5E-02));+#1319 = DIRECTION('',(0.,1.,0.));+#1320 = DIRECTION('',(0.,0.,1.));+#1321 = ORIENTED_EDGE('',*,*,#1322,.F.);+#1322 = EDGE_CURVE('',#589,#1314,#1323,.T.);+#1323 = LINE('',#1324,#1325);+#1324 = CARTESIAN_POINT('',(0.5,-0.25,1.5E-02));+#1325 = VECTOR('',#1326,1.);+#1326 = DIRECTION('',(0.,1.,0.));+#1327 = CYLINDRICAL_SURFACE('',#1328,1.5E-02);+#1328 = AXIS2_PLACEMENT_3D('',#1329,#1330,#1331);+#1329 = CARTESIAN_POINT('',(0.485,-0.25,1.5E-02));+#1330 = DIRECTION('',(0.,1.,0.));+#1331 = DIRECTION('',(1.,0.,0.));+#1332 = ADVANCED_FACE('',(#1333),#1351,.T.);+#1333 = FACE_BOUND('',#1334,.T.);+#1334 = EDGE_LOOP('',(#1335,#1336,#1337,#1345));+#1335 = ORIENTED_EDGE('',*,*,#588,.F.);+#1336 = ORIENTED_EDGE('',*,*,#1322,.T.);+#1337 = ORIENTED_EDGE('',*,*,#1338,.T.);+#1338 = EDGE_CURVE('',#1314,#1339,#1341,.T.);+#1339 = VERTEX_POINT('',#1340);+#1340 = CARTESIAN_POINT('',(0.5,0.25,0.185));+#1341 = LINE('',#1342,#1343);+#1342 = CARTESIAN_POINT('',(0.5,0.25,0.));+#1343 = VECTOR('',#1344,1.);+#1344 = DIRECTION('',(0.,0.,1.));+#1345 = ORIENTED_EDGE('',*,*,#1346,.F.);+#1346 = EDGE_CURVE('',#580,#1339,#1347,.T.);+#1347 = LINE('',#1348,#1349);+#1348 = CARTESIAN_POINT('',(0.5,-0.25,0.185));+#1349 = VECTOR('',#1350,1.);+#1350 = DIRECTION('',(0.,1.,0.));+#1351 = PLANE('',#1352);+#1352 = AXIS2_PLACEMENT_3D('',#1353,#1354,#1355);+#1353 = CARTESIAN_POINT('',(0.5,-0.25,0.));+#1354 = DIRECTION('',(1.,0.,0.));+#1355 = DIRECTION('',(0.,0.,1.));+#1356 = ADVANCED_FACE('',(#1357),#1376,.T.);+#1357 = FACE_BOUND('',#1358,.F.);+#1358 = EDGE_LOOP('',(#1359,#1360,#1368,#1375));+#1359 = ORIENTED_EDGE('',*,*,#579,.T.);+#1360 = ORIENTED_EDGE('',*,*,#1361,.T.);+#1361 = EDGE_CURVE('',#572,#1362,#1364,.T.);+#1362 = VERTEX_POINT('',#1363);+#1363 = CARTESIAN_POINT('',(0.485,0.25,0.2));+#1364 = LINE('',#1365,#1366);+#1365 = CARTESIAN_POINT('',(0.485,-0.25,0.2));+#1366 = VECTOR('',#1367,1.);+#1367 = DIRECTION('',(0.,1.,0.));+#1368 = ORIENTED_EDGE('',*,*,#1369,.F.);+#1369 = EDGE_CURVE('',#1339,#1362,#1370,.T.);+#1370 = CIRCLE('',#1371,1.5E-02);+#1371 = AXIS2_PLACEMENT_3D('',#1372,#1373,#1374);+#1372 = CARTESIAN_POINT('',(0.485,0.25,0.185));+#1373 = DIRECTION('',(0.,-1.,0.));+#1374 = DIRECTION('',(0.,0.,1.));+#1375 = ORIENTED_EDGE('',*,*,#1346,.F.);+#1376 = CYLINDRICAL_SURFACE('',#1377,1.5E-02);+#1377 = AXIS2_PLACEMENT_3D('',#1378,#1379,#1380);+#1378 = CARTESIAN_POINT('',(0.485,-0.25,0.185));+#1379 = DIRECTION('',(0.,1.,0.));+#1380 = DIRECTION('',(1.,0.,0.));+#1381 = ADVANCED_FACE('',(#1382),#1423,.T.);+#1382 = FACE_BOUND('',#1383,.T.);+#1383 = EDGE_LOOP('',(#1384,#1392,#1400,#1406,#1407,#1415,#1421,#1422));+#1384 = ORIENTED_EDGE('',*,*,#1385,.F.);+#1385 = EDGE_CURVE('',#1386,#1362,#1388,.T.);+#1386 = VERTEX_POINT('',#1387);+#1387 = CARTESIAN_POINT('',(0.4625,0.25,0.2));+#1388 = LINE('',#1389,#1390);+#1389 = CARTESIAN_POINT('',(0.35,0.25,0.2));+#1390 = VECTOR('',#1391,1.);+#1391 = DIRECTION('',(1.,0.,0.));+#1392 = ORIENTED_EDGE('',*,*,#1393,.F.);+#1393 = EDGE_CURVE('',#1394,#1386,#1396,.T.);+#1394 = VERTEX_POINT('',#1395);+#1395 = CARTESIAN_POINT('',(0.4625,0.1875,0.2));+#1396 = LINE('',#1397,#1398);+#1397 = CARTESIAN_POINT('',(0.4625,-3.125E-02,0.2));+#1398 = VECTOR('',#1399,1.);+#1399 = DIRECTION('',(0.,1.,0.));+#1400 = ORIENTED_EDGE('',*,*,#1401,.F.);+#1401 = EDGE_CURVE('',#677,#1394,#1402,.T.);+#1402 = LINE('',#1403,#1404);+#1403 = CARTESIAN_POINT('',(-5.625E-02,0.1875,0.2));+#1404 = VECTOR('',#1405,1.);+#1405 = DIRECTION('',(1.,0.,0.));+#1406 = ORIENTED_EDGE('',*,*,#676,.F.);+#1407 = ORIENTED_EDGE('',*,*,#1408,.F.);+#1408 = EDGE_CURVE('',#1409,#668,#1411,.T.);+#1409 = VERTEX_POINT('',#1410);+#1410 = CARTESIAN_POINT('',(0.4625,-0.1875,0.2));+#1411 = LINE('',#1412,#1413);+#1412 = CARTESIAN_POINT('',(0.40625,-0.1875,0.2));+#1413 = VECTOR('',#1414,1.);+#1414 = DIRECTION('',(-1.,0.,0.));+#1415 = ORIENTED_EDGE('',*,*,#1416,.F.);+#1416 = EDGE_CURVE('',#564,#1409,#1417,.T.);+#1417 = LINE('',#1418,#1419);+#1418 = CARTESIAN_POINT('',(0.4625,-0.28125,0.2));+#1419 = VECTOR('',#1420,1.);+#1420 = DIRECTION('',(0.,1.,0.));+#1421 = ORIENTED_EDGE('',*,*,#571,.T.);+#1422 = ORIENTED_EDGE('',*,*,#1361,.T.);+#1423 = PLANE('',#1424);+#1424 = AXIS2_PLACEMENT_3D('',#1425,#1426,#1427);+#1425 = CARTESIAN_POINT('',(0.35,-0.25,0.2));+#1426 = DIRECTION('',(0.,0.,1.));+#1427 = DIRECTION('',(1.,0.,0.));+#1428 = ADVANCED_FACE('',(#1429),#1440,.F.);+#1429 = FACE_BOUND('',#1430,.F.);+#1430 = EDGE_LOOP('',(#1431,#1437,#1438,#1439));+#1431 = ORIENTED_EDGE('',*,*,#1432,.F.);+#1432 = EDGE_CURVE('',#1409,#612,#1433,.T.);+#1433 = LINE('',#1434,#1435);+#1434 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1435 = VECTOR('',#1436,1.);+#1436 = DIRECTION('',(-0.,-0.,-1.));+#1437 = ORIENTED_EDGE('',*,*,#1416,.F.);+#1438 = ORIENTED_EDGE('',*,*,#563,.T.);+#1439 = ORIENTED_EDGE('',*,*,#621,.F.);+#1440 = PLANE('',#1441);+#1441 = AXIS2_PLACEMENT_3D('',#1442,#1443,#1444);+#1442 = CARTESIAN_POINT('',(0.4625,-0.3125,0.3));+#1443 = DIRECTION('',(1.,0.,0.));+#1444 = DIRECTION('',(0.,1.,0.));+#1445 = ADVANCED_FACE('',(#1446),#1452,.F.);+#1446 = FACE_BOUND('',#1447,.F.);+#1447 = EDGE_LOOP('',(#1448,#1449,#1450,#1451));+#1448 = ORIENTED_EDGE('',*,*,#1408,.F.);+#1449 = ORIENTED_EDGE('',*,*,#1432,.T.);+#1450 = ORIENTED_EDGE('',*,*,#611,.F.);+#1451 = ORIENTED_EDGE('',*,*,#667,.T.);+#1452 = PLANE('',#1453);+#1453 = AXIS2_PLACEMENT_3D('',#1454,#1455,#1456);+#1454 = CARTESIAN_POINT('',(0.4625,-0.1875,0.3));+#1455 = DIRECTION('',(0.,1.,0.));+#1456 = DIRECTION('',(-1.,0.,0.));+#1457 = ADVANCED_FACE('',(#1458),#1474,.F.);+#1458 = FACE_BOUND('',#1459,.F.);+#1459 = EDGE_LOOP('',(#1460,#1461,#1467,#1468));+#1460 = ORIENTED_EDGE('',*,*,#1393,.F.);+#1461 = ORIENTED_EDGE('',*,*,#1462,.T.);+#1462 = EDGE_CURVE('',#1394,#645,#1463,.T.);+#1463 = LINE('',#1464,#1465);+#1464 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1465 = VECTOR('',#1466,1.);+#1466 = DIRECTION('',(-0.,-0.,-1.));+#1467 = ORIENTED_EDGE('',*,*,#652,.F.);+#1468 = ORIENTED_EDGE('',*,*,#1469,.F.);+#1469 = EDGE_CURVE('',#1386,#636,#1470,.T.);+#1470 = LINE('',#1471,#1472);+#1471 = CARTESIAN_POINT('',(0.4625,0.25,0.15));+#1472 = VECTOR('',#1473,1.);+#1473 = DIRECTION('',(0.,0.,-1.));+#1474 = PLANE('',#1475);+#1475 = AXIS2_PLACEMENT_3D('',#1476,#1477,#1478);+#1476 = CARTESIAN_POINT('',(0.4625,0.1875,0.3));+#1477 = DIRECTION('',(1.,0.,0.));+#1478 = DIRECTION('',(0.,1.,0.));+#1479 = ADVANCED_FACE('',(#1480),#1486,.F.);+#1480 = FACE_BOUND('',#1481,.F.);+#1481 = EDGE_LOOP('',(#1482,#1483,#1484,#1485));+#1482 = ORIENTED_EDGE('',*,*,#1462,.F.);+#1483 = ORIENTED_EDGE('',*,*,#1401,.F.);+#1484 = ORIENTED_EDGE('',*,*,#684,.F.);+#1485 = ORIENTED_EDGE('',*,*,#644,.F.);+#1486 = PLANE('',#1487);+#1487 = AXIS2_PLACEMENT_3D('',#1488,#1489,#1490);+#1488 = CARTESIAN_POINT('',(-0.4625,0.1875,0.3));+#1489 = DIRECTION('',(0.,-1.,0.));+#1490 = DIRECTION('',(1.,0.,0.));+#1491 = ADVANCED_FACE('',(#1492),#1504,.T.);+#1492 = FACE_BOUND('',#1493,.T.);+#1493 = EDGE_LOOP('',(#1494,#1495,#1496,#1497,#1498,#1499,#1500,#1501,+#1502,#1503));+#1494 = ORIENTED_EDGE('',*,*,#872,.F.);+#1495 = ORIENTED_EDGE('',*,*,#937,.F.);+#1496 = ORIENTED_EDGE('',*,*,#979,.T.);+#1497 = ORIENTED_EDGE('',*,*,#1003,.T.);+#1498 = ORIENTED_EDGE('',*,*,#827,.T.);+#1499 = ORIENTED_EDGE('',*,*,#788,.F.);+#1500 = ORIENTED_EDGE('',*,*,#715,.F.);+#1501 = ORIENTED_EDGE('',*,*,#707,.F.);+#1502 = ORIENTED_EDGE('',*,*,#699,.T.);+#1503 = ORIENTED_EDGE('',*,*,#1074,.F.);+#1504 = PLANE('',#1505);+#1505 = AXIS2_PLACEMENT_3D('',#1506,#1507,#1508);+#1506 = CARTESIAN_POINT('',(-0.5,0.25,0.));+#1507 = DIRECTION('',(0.,1.,0.));+#1508 = DIRECTION('',(0.,0.,1.));+#1509 = ADVANCED_FACE('',(#1510),#1522,.T.);+#1510 = FACE_BOUND('',#1511,.T.);+#1511 = EDGE_LOOP('',(#1512,#1513,#1514,#1515,#1516,#1517,#1518,#1519,+#1520,#1521));+#1512 = ORIENTED_EDGE('',*,*,#1283,.F.);+#1513 = ORIENTED_EDGE('',*,*,#1106,.F.);+#1514 = ORIENTED_EDGE('',*,*,#740,.T.);+#1515 = ORIENTED_EDGE('',*,*,#732,.T.);+#1516 = ORIENTED_EDGE('',*,*,#724,.F.);+#1517 = ORIENTED_EDGE('',*,*,#1469,.F.);+#1518 = ORIENTED_EDGE('',*,*,#1385,.T.);+#1519 = ORIENTED_EDGE('',*,*,#1369,.F.);+#1520 = ORIENTED_EDGE('',*,*,#1338,.F.);+#1521 = ORIENTED_EDGE('',*,*,#1313,.T.);+#1522 = PLANE('',#1523);+#1523 = AXIS2_PLACEMENT_3D('',#1524,#1525,#1526);+#1524 = CARTESIAN_POINT('',(0.35,0.25,0.));+#1525 = DIRECTION('',(0.,1.,0.));+#1526 = DIRECTION('',(0.,0.,1.));+#1527 = ADVANCED_FACE('',(#1528),#1533,.T.);+#1528 = FACE_BOUND('',#1529,.T.);+#1529 = EDGE_LOOP('',(#1530,#1531,#1532));+#1530 = ORIENTED_EDGE('',*,*,#1252,.T.);+#1531 = ORIENTED_EDGE('',*,*,#1228,.T.);+#1532 = ORIENTED_EDGE('',*,*,#1269,.T.);+#1533 = PLANE('',#1534);+#1534 = AXIS2_PLACEMENT_3D('',#1535,#1536,#1537);+#1535 = CARTESIAN_POINT('',(5.773502691896E-02,0.,7.5E-03));+#1536 = DIRECTION('',(-0.,-0.,-1.));+#1537 = DIRECTION('',(-1.,0.,0.));+#1538 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1542))+GLOBAL_UNIT_ASSIGNED_CONTEXT((#1539,#1540,#1541)) REPRESENTATION_CONTEXT+('Context #1','3D Context with UNIT and UNCERTAINTY') );+#1539 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );+#1540 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );+#1541 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );+#1542 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-07),#1539,+'distance_accuracy_value','confusion accuracy');+#1543 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));+#1544 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(+#1545,#1553,#1560,#1567,#1574,#1581,#1588,#1595,#1603,#1610,#1617,+#1624,#1631,#1638,#1645,#1652,#1659,#1666,#1673,#1680,#1687,#1694,+#1701,#1708,#1715,#1722,#1729,#1736,#1743,#1750,#1757,#1764,#1771,+#1778,#1785,#1792,#1800,#1807,#1814,#1821,#1828,#1835,#1842,#1849,+#1856,#1863,#1870,#1877,#1884,#1891),#1538);+#1545 = STYLED_ITEM('color',(#1546),#17);+#1546 = PRESENTATION_STYLE_ASSIGNMENT((#1547));+#1547 = SURFACE_STYLE_USAGE(.BOTH.,#1548);+#1548 = SURFACE_SIDE_STYLE('',(#1549));+#1549 = SURFACE_STYLE_FILL_AREA(#1550);+#1550 = FILL_AREA_STYLE('',(#1551));+#1551 = FILL_AREA_STYLE_COLOUR('',#1552);+#1552 = COLOUR_RGB('',0.894999980927,0.89099997282,0.813000023365);+#1553 = STYLED_ITEM('color',(#1554),#57);+#1554 = PRESENTATION_STYLE_ASSIGNMENT((#1555));+#1555 = SURFACE_STYLE_USAGE(.BOTH.,#1556);+#1556 = SURFACE_SIDE_STYLE('',(#1557));+#1557 = SURFACE_STYLE_FILL_AREA(#1558);+#1558 = FILL_AREA_STYLE('',(#1559));+#1559 = FILL_AREA_STYLE_COLOUR('',#1552);+#1560 = STYLED_ITEM('color',(#1561),#104);+#1561 = PRESENTATION_STYLE_ASSIGNMENT((#1562));+#1562 = SURFACE_STYLE_USAGE(.BOTH.,#1563);+#1563 = SURFACE_SIDE_STYLE('',(#1564));+#1564 = SURFACE_STYLE_FILL_AREA(#1565);+#1565 = FILL_AREA_STYLE('',(#1566));+#1566 = FILL_AREA_STYLE_COLOUR('',#1552);+#1567 = STYLED_ITEM('color',(#1568),#183);+#1568 = PRESENTATION_STYLE_ASSIGNMENT((#1569));+#1569 = SURFACE_STYLE_USAGE(.BOTH.,#1570);+#1570 = SURFACE_SIDE_STYLE('',(#1571));+#1571 = SURFACE_STYLE_FILL_AREA(#1572);+#1572 = FILL_AREA_STYLE('',(#1573));+#1573 = FILL_AREA_STYLE_COLOUR('',#1552);+#1574 = STYLED_ITEM('color',(#1575),#207);+#1575 = PRESENTATION_STYLE_ASSIGNMENT((#1576));+#1576 = SURFACE_STYLE_USAGE(.BOTH.,#1577);+#1577 = SURFACE_SIDE_STYLE('',(#1578));+#1578 = SURFACE_STYLE_FILL_AREA(#1579);+#1579 = FILL_AREA_STYLE('',(#1580));+#1580 = FILL_AREA_STYLE_COLOUR('',#1552);+#1581 = STYLED_ITEM('color',(#1582),#247);+#1582 = PRESENTATION_STYLE_ASSIGNMENT((#1583));+#1583 = SURFACE_STYLE_USAGE(.BOTH.,#1584);+#1584 = SURFACE_SIDE_STYLE('',(#1585));+#1585 = SURFACE_STYLE_FILL_AREA(#1586);+#1586 = FILL_AREA_STYLE('',(#1587));+#1587 = FILL_AREA_STYLE_COLOUR('',#1552);+#1588 = STYLED_ITEM('color',(#1589),#278);+#1589 = PRESENTATION_STYLE_ASSIGNMENT((#1590));+#1590 = SURFACE_STYLE_USAGE(.BOTH.,#1591);+#1591 = SURFACE_SIDE_STYLE('',(#1592));+#1592 = SURFACE_STYLE_FILL_AREA(#1593);+#1593 = FILL_AREA_STYLE('',(#1594));+#1594 = FILL_AREA_STYLE_COLOUR('',#1552);+#1595 = STYLED_ITEM('color',(#1596),#295);+#1596 = PRESENTATION_STYLE_ASSIGNMENT((#1597));+#1597 = SURFACE_STYLE_USAGE(.BOTH.,#1598);+#1598 = SURFACE_SIDE_STYLE('',(#1599));+#1599 = SURFACE_STYLE_FILL_AREA(#1600);+#1600 = FILL_AREA_STYLE('',(#1601));+#1601 = FILL_AREA_STYLE_COLOUR('',#1602);+#1602 = COLOUR_RGB('',0.85900002718,0.737999975681,0.495999991894);+#1603 = STYLED_ITEM('color',(#1604),#328);+#1604 = PRESENTATION_STYLE_ASSIGNMENT((#1605));+#1605 = SURFACE_STYLE_USAGE(.BOTH.,#1606);+#1606 = SURFACE_SIDE_STYLE('',(#1607));+#1607 = SURFACE_STYLE_FILL_AREA(#1608);+#1608 = FILL_AREA_STYLE('',(#1609));+#1609 = FILL_AREA_STYLE_COLOUR('',#1552);+#1610 = STYLED_ITEM('color',(#1611),#352);+#1611 = PRESENTATION_STYLE_ASSIGNMENT((#1612));+#1612 = SURFACE_STYLE_USAGE(.BOTH.,#1613);+#1613 = SURFACE_SIDE_STYLE('',(#1614));+#1614 = SURFACE_STYLE_FILL_AREA(#1615);+#1615 = FILL_AREA_STYLE('',(#1616));+#1616 = FILL_AREA_STYLE_COLOUR('',#1602);+#1617 = STYLED_ITEM('color',(#1618),#419);+#1618 = PRESENTATION_STYLE_ASSIGNMENT((#1619));+#1619 = SURFACE_STYLE_USAGE(.BOTH.,#1620);+#1620 = SURFACE_SIDE_STYLE('',(#1621));+#1621 = SURFACE_STYLE_FILL_AREA(#1622);+#1622 = FILL_AREA_STYLE('',(#1623));+#1623 = FILL_AREA_STYLE_COLOUR('',#1552);+#1624 = STYLED_ITEM('color',(#1625),#540);+#1625 = PRESENTATION_STYLE_ASSIGNMENT((#1626));+#1626 = SURFACE_STYLE_USAGE(.BOTH.,#1627);+#1627 = SURFACE_SIDE_STYLE('',(#1628));+#1628 = SURFACE_STYLE_FILL_AREA(#1629);+#1629 = FILL_AREA_STYLE('',(#1630));+#1630 = FILL_AREA_STYLE_COLOUR('',#1602);+#1631 = STYLED_ITEM('color',(#1632),#607);+#1632 = PRESENTATION_STYLE_ASSIGNMENT((#1633));+#1633 = SURFACE_STYLE_USAGE(.BOTH.,#1634);+#1634 = SURFACE_SIDE_STYLE('',(#1635));+#1635 = SURFACE_STYLE_FILL_AREA(#1636);+#1636 = FILL_AREA_STYLE('',(#1637));+#1637 = FILL_AREA_STYLE_COLOUR('',#1552);+#1638 = STYLED_ITEM('color',(#1639),#631);+#1639 = PRESENTATION_STYLE_ASSIGNMENT((#1640));+#1640 = SURFACE_STYLE_USAGE(.BOTH.,#1641);+#1641 = SURFACE_SIDE_STYLE('',(#1642));+#1642 = SURFACE_STYLE_FILL_AREA(#1643);+#1643 = FILL_AREA_STYLE('',(#1644));+#1644 = FILL_AREA_STYLE_COLOUR('',#1552);+#1645 = STYLED_ITEM('color',(#1646),#662);+#1646 = PRESENTATION_STYLE_ASSIGNMENT((#1647));+#1647 = SURFACE_STYLE_USAGE(.BOTH.,#1648);+#1648 = SURFACE_SIDE_STYLE('',(#1649));+#1649 = SURFACE_STYLE_FILL_AREA(#1650);+#1650 = FILL_AREA_STYLE('',(#1651));+#1651 = FILL_AREA_STYLE_COLOUR('',#1602);+#1652 = STYLED_ITEM('color',(#1653),#695);+#1653 = PRESENTATION_STYLE_ASSIGNMENT((#1654));+#1654 = SURFACE_STYLE_USAGE(.BOTH.,#1655);+#1655 = SURFACE_SIDE_STYLE('',(#1656));+#1656 = SURFACE_STYLE_FILL_AREA(#1657);+#1657 = FILL_AREA_STYLE('',(#1658));+#1658 = FILL_AREA_STYLE_COLOUR('',#1552);+#1659 = STYLED_ITEM('color',(#1660),#751);+#1660 = PRESENTATION_STYLE_ASSIGNMENT((#1661));+#1661 = SURFACE_STYLE_USAGE(.BOTH.,#1662);+#1662 = SURFACE_SIDE_STYLE('',(#1663));+#1663 = SURFACE_STYLE_FILL_AREA(#1664);+#1664 = FILL_AREA_STYLE('',(#1665));+#1665 = FILL_AREA_STYLE_COLOUR('',#1602);+#1666 = STYLED_ITEM('color',(#1667),#775);+#1667 = PRESENTATION_STYLE_ASSIGNMENT((#1668));+#1668 = SURFACE_STYLE_USAGE(.BOTH.,#1669);+#1669 = SURFACE_SIDE_STYLE('',(#1670));+#1670 = SURFACE_STYLE_FILL_AREA(#1671);+#1671 = FILL_AREA_STYLE('',(#1672));+#1672 = FILL_AREA_STYLE_COLOUR('',#1602);+#1673 = STYLED_ITEM('color',(#1674),#799);+#1674 = PRESENTATION_STYLE_ASSIGNMENT((#1675));+#1675 = SURFACE_STYLE_USAGE(.BOTH.,#1676);+#1676 = SURFACE_SIDE_STYLE('',(#1677));+#1677 = SURFACE_STYLE_FILL_AREA(#1678);+#1678 = FILL_AREA_STYLE('',(#1679));+#1679 = FILL_AREA_STYLE_COLOUR('',#1602);+#1680 = STYLED_ITEM('color',(#1681),#823);+#1681 = PRESENTATION_STYLE_ASSIGNMENT((#1682));+#1682 = SURFACE_STYLE_USAGE(.BOTH.,#1683);+#1683 = SURFACE_SIDE_STYLE('',(#1684));+#1684 = SURFACE_STYLE_FILL_AREA(#1685);+#1685 = FILL_AREA_STYLE('',(#1686));+#1686 = FILL_AREA_STYLE_COLOUR('',#1602);+#1687 = STYLED_ITEM('color',(#1688),#856);+#1688 = PRESENTATION_STYLE_ASSIGNMENT((#1689));+#1689 = SURFACE_STYLE_USAGE(.BOTH.,#1690);+#1690 = SURFACE_SIDE_STYLE('',(#1691));+#1691 = SURFACE_STYLE_FILL_AREA(#1692);+#1692 = FILL_AREA_STYLE('',(#1693));+#1693 = FILL_AREA_STYLE_COLOUR('',#1602);+#1694 = STYLED_ITEM('color',(#1695),#868);+#1695 = PRESENTATION_STYLE_ASSIGNMENT((#1696));+#1696 = SURFACE_STYLE_USAGE(.BOTH.,#1697);+#1697 = SURFACE_SIDE_STYLE('',(#1698));+#1698 = SURFACE_STYLE_FILL_AREA(#1699);+#1699 = FILL_AREA_STYLE('',(#1700));+#1700 = FILL_AREA_STYLE_COLOUR('',#1602);+#1701 = STYLED_ITEM('color',(#1702),#931);+#1702 = PRESENTATION_STYLE_ASSIGNMENT((#1703));+#1703 = SURFACE_STYLE_USAGE(.BOTH.,#1704);+#1704 = SURFACE_SIDE_STYLE('',(#1705));+#1705 = SURFACE_STYLE_FILL_AREA(#1706);+#1706 = FILL_AREA_STYLE('',(#1707));+#1707 = FILL_AREA_STYLE_COLOUR('',#1602);+#1708 = STYLED_ITEM('color',(#1709),#956);+#1709 = PRESENTATION_STYLE_ASSIGNMENT((#1710));+#1710 = SURFACE_STYLE_USAGE(.BOTH.,#1711);+#1711 = SURFACE_SIDE_STYLE('',(#1712));+#1712 = SURFACE_STYLE_FILL_AREA(#1713);+#1713 = FILL_AREA_STYLE('',(#1714));+#1714 = FILL_AREA_STYLE_COLOUR('',#1602);+#1715 = STYLED_ITEM('color',(#1716),#973);+#1716 = PRESENTATION_STYLE_ASSIGNMENT((#1717));+#1717 = SURFACE_STYLE_USAGE(.BOTH.,#1718);+#1718 = SURFACE_SIDE_STYLE('',(#1719));+#1719 = SURFACE_STYLE_FILL_AREA(#1720);+#1720 = FILL_AREA_STYLE('',(#1721));+#1721 = FILL_AREA_STYLE_COLOUR('',#1602);+#1722 = STYLED_ITEM('color',(#1723),#997);+#1723 = PRESENTATION_STYLE_ASSIGNMENT((#1724));+#1724 = SURFACE_STYLE_USAGE(.BOTH.,#1725);+#1725 = SURFACE_SIDE_STYLE('',(#1726));+#1726 = SURFACE_STYLE_FILL_AREA(#1727);+#1727 = FILL_AREA_STYLE('',(#1728));+#1728 = FILL_AREA_STYLE_COLOUR('',#1602);+#1729 = STYLED_ITEM('color',(#1730),#1015);+#1730 = PRESENTATION_STYLE_ASSIGNMENT((#1731));+#1731 = SURFACE_STYLE_USAGE(.BOTH.,#1732);+#1732 = SURFACE_SIDE_STYLE('',(#1733));+#1733 = SURFACE_STYLE_FILL_AREA(#1734);+#1734 = FILL_AREA_STYLE('',(#1735));+#1735 = FILL_AREA_STYLE_COLOUR('',#1602);+#1736 = STYLED_ITEM('color',(#1737),#1033);+#1737 = PRESENTATION_STYLE_ASSIGNMENT((#1738));+#1738 = SURFACE_STYLE_USAGE(.BOTH.,#1739);+#1739 = SURFACE_SIDE_STYLE('',(#1740));+#1740 = SURFACE_STYLE_FILL_AREA(#1741);+#1741 = FILL_AREA_STYLE('',(#1742));+#1742 = FILL_AREA_STYLE_COLOUR('',#1602);+#1743 = STYLED_ITEM('color',(#1744),#1051);+#1744 = PRESENTATION_STYLE_ASSIGNMENT((#1745));+#1745 = SURFACE_STYLE_USAGE(.BOTH.,#1746);+#1746 = SURFACE_SIDE_STYLE('',(#1747));+#1747 = SURFACE_STYLE_FILL_AREA(#1748);+#1748 = FILL_AREA_STYLE('',(#1749));+#1749 = FILL_AREA_STYLE_COLOUR('',#1602);+#1750 = STYLED_ITEM('color',(#1751),#1068);+#1751 = PRESENTATION_STYLE_ASSIGNMENT((#1752));+#1752 = SURFACE_STYLE_USAGE(.BOTH.,#1753);+#1753 = SURFACE_SIDE_STYLE('',(#1754));+#1754 = SURFACE_STYLE_FILL_AREA(#1755);+#1755 = FILL_AREA_STYLE('',(#1756));+#1756 = FILL_AREA_STYLE_COLOUR('',#1602);+#1757 = STYLED_ITEM('color',(#1758),#1085);+#1758 = PRESENTATION_STYLE_ASSIGNMENT((#1759));+#1759 = SURFACE_STYLE_USAGE(.BOTH.,#1760);+#1760 = SURFACE_SIDE_STYLE('',(#1761));+#1761 = SURFACE_STYLE_FILL_AREA(#1762);+#1762 = FILL_AREA_STYLE('',(#1763));+#1763 = FILL_AREA_STYLE_COLOUR('',#1602);+#1764 = STYLED_ITEM('color',(#1765),#1116);+#1765 = PRESENTATION_STYLE_ASSIGNMENT((#1766));+#1766 = SURFACE_STYLE_USAGE(.BOTH.,#1767);+#1767 = SURFACE_SIDE_STYLE('',(#1768));+#1768 = SURFACE_STYLE_FILL_AREA(#1769);+#1769 = FILL_AREA_STYLE('',(#1770));+#1770 = FILL_AREA_STYLE_COLOUR('',#1602);+#1771 = STYLED_ITEM('color',(#1772),#1141);+#1772 = PRESENTATION_STYLE_ASSIGNMENT((#1773));+#1773 = SURFACE_STYLE_USAGE(.BOTH.,#1774);+#1774 = SURFACE_SIDE_STYLE('',(#1775));+#1775 = SURFACE_STYLE_FILL_AREA(#1776);+#1776 = FILL_AREA_STYLE('',(#1777));+#1777 = FILL_AREA_STYLE_COLOUR('',#1602);+#1778 = STYLED_ITEM('color',(#1779),#1166);+#1779 = PRESENTATION_STYLE_ASSIGNMENT((#1780));+#1780 = SURFACE_STYLE_USAGE(.BOTH.,#1781);+#1781 = SURFACE_SIDE_STYLE('',(#1782));+#1782 = SURFACE_STYLE_FILL_AREA(#1783);+#1783 = FILL_AREA_STYLE('',(#1784));+#1784 = FILL_AREA_STYLE_COLOUR('',#1602);+#1785 = STYLED_ITEM('color',(#1786),#1190);+#1786 = PRESENTATION_STYLE_ASSIGNMENT((#1787));+#1787 = SURFACE_STYLE_USAGE(.BOTH.,#1788);+#1788 = SURFACE_SIDE_STYLE('',(#1789));+#1789 = SURFACE_STYLE_FILL_AREA(#1790);+#1790 = FILL_AREA_STYLE('',(#1791));+#1791 = FILL_AREA_STYLE_COLOUR('',#1602);+#1792 = STYLED_ITEM('color',(#1793),#1207);+#1793 = PRESENTATION_STYLE_ASSIGNMENT((#1794));+#1794 = SURFACE_STYLE_USAGE(.BOTH.,#1795);+#1795 = SURFACE_SIDE_STYLE('',(#1796));+#1796 = SURFACE_STYLE_FILL_AREA(#1797);+#1797 = FILL_AREA_STYLE('',(#1798));+#1798 = FILL_AREA_STYLE_COLOUR('',#1799);+#1799 = COLOUR_RGB('',0.340000003576,0.680000007153,0.444999992847);+#1800 = STYLED_ITEM('color',(#1801),#1238);+#1801 = PRESENTATION_STYLE_ASSIGNMENT((#1802));+#1802 = SURFACE_STYLE_USAGE(.BOTH.,#1803);+#1803 = SURFACE_SIDE_STYLE('',(#1804));+#1804 = SURFACE_STYLE_FILL_AREA(#1805);+#1805 = FILL_AREA_STYLE('',(#1806));+#1806 = FILL_AREA_STYLE_COLOUR('',#1799);+#1807 = STYLED_ITEM('color',(#1808),#1262);+#1808 = PRESENTATION_STYLE_ASSIGNMENT((#1809));+#1809 = SURFACE_STYLE_USAGE(.BOTH.,#1810);+#1810 = SURFACE_SIDE_STYLE('',(#1811));+#1811 = SURFACE_STYLE_FILL_AREA(#1812);+#1812 = FILL_AREA_STYLE('',(#1813));+#1813 = FILL_AREA_STYLE_COLOUR('',#1799);+#1814 = STYLED_ITEM('color',(#1815),#1279);+#1815 = PRESENTATION_STYLE_ASSIGNMENT((#1816));+#1816 = SURFACE_STYLE_USAGE(.BOTH.,#1817);+#1817 = SURFACE_SIDE_STYLE('',(#1818));+#1818 = SURFACE_STYLE_FILL_AREA(#1819);+#1819 = FILL_AREA_STYLE('',(#1820));+#1820 = FILL_AREA_STYLE_COLOUR('',#1602);+#1821 = STYLED_ITEM('color',(#1822),#1307);+#1822 = PRESENTATION_STYLE_ASSIGNMENT((#1823));+#1823 = SURFACE_STYLE_USAGE(.BOTH.,#1824);+#1824 = SURFACE_SIDE_STYLE('',(#1825));+#1825 = SURFACE_STYLE_FILL_AREA(#1826);+#1826 = FILL_AREA_STYLE('',(#1827));+#1827 = FILL_AREA_STYLE_COLOUR('',#1602);+#1828 = STYLED_ITEM('color',(#1829),#1332);+#1829 = PRESENTATION_STYLE_ASSIGNMENT((#1830));+#1830 = SURFACE_STYLE_USAGE(.BOTH.,#1831);+#1831 = SURFACE_SIDE_STYLE('',(#1832));+#1832 = SURFACE_STYLE_FILL_AREA(#1833);+#1833 = FILL_AREA_STYLE('',(#1834));+#1834 = FILL_AREA_STYLE_COLOUR('',#1602);+#1835 = STYLED_ITEM('color',(#1836),#1356);+#1836 = PRESENTATION_STYLE_ASSIGNMENT((#1837));+#1837 = SURFACE_STYLE_USAGE(.BOTH.,#1838);+#1838 = SURFACE_SIDE_STYLE('',(#1839));+#1839 = SURFACE_STYLE_FILL_AREA(#1840);+#1840 = FILL_AREA_STYLE('',(#1841));+#1841 = FILL_AREA_STYLE_COLOUR('',#1602);+#1842 = STYLED_ITEM('color',(#1843),#1381);+#1843 = PRESENTATION_STYLE_ASSIGNMENT((#1844));+#1844 = SURFACE_STYLE_USAGE(.BOTH.,#1845);+#1845 = SURFACE_SIDE_STYLE('',(#1846));+#1846 = SURFACE_STYLE_FILL_AREA(#1847);+#1847 = FILL_AREA_STYLE('',(#1848));+#1848 = FILL_AREA_STYLE_COLOUR('',#1602);+#1849 = STYLED_ITEM('color',(#1850),#1428);+#1850 = PRESENTATION_STYLE_ASSIGNMENT((#1851));+#1851 = SURFACE_STYLE_USAGE(.BOTH.,#1852);+#1852 = SURFACE_SIDE_STYLE('',(#1853));+#1853 = SURFACE_STYLE_FILL_AREA(#1854);+#1854 = FILL_AREA_STYLE('',(#1855));+#1855 = FILL_AREA_STYLE_COLOUR('',#1602);+#1856 = STYLED_ITEM('color',(#1857),#1445);+#1857 = PRESENTATION_STYLE_ASSIGNMENT((#1858));+#1858 = SURFACE_STYLE_USAGE(.BOTH.,#1859);+#1859 = SURFACE_SIDE_STYLE('',(#1860));+#1860 = SURFACE_STYLE_FILL_AREA(#1861);+#1861 = FILL_AREA_STYLE('',(#1862));+#1862 = FILL_AREA_STYLE_COLOUR('',#1602);+#1863 = STYLED_ITEM('color',(#1864),#1457);+#1864 = PRESENTATION_STYLE_ASSIGNMENT((#1865));+#1865 = SURFACE_STYLE_USAGE(.BOTH.,#1866);+#1866 = SURFACE_SIDE_STYLE('',(#1867));+#1867 = SURFACE_STYLE_FILL_AREA(#1868);+#1868 = FILL_AREA_STYLE('',(#1869));+#1869 = FILL_AREA_STYLE_COLOUR('',#1602);+#1870 = STYLED_ITEM('color',(#1871),#1479);+#1871 = PRESENTATION_STYLE_ASSIGNMENT((#1872));+#1872 = SURFACE_STYLE_USAGE(.BOTH.,#1873);+#1873 = SURFACE_SIDE_STYLE('',(#1874));+#1874 = SURFACE_STYLE_FILL_AREA(#1875);+#1875 = FILL_AREA_STYLE('',(#1876));+#1876 = FILL_AREA_STYLE_COLOUR('',#1602);+#1877 = STYLED_ITEM('color',(#1878),#1491);+#1878 = PRESENTATION_STYLE_ASSIGNMENT((#1879));+#1879 = SURFACE_STYLE_USAGE(.BOTH.,#1880);+#1880 = SURFACE_SIDE_STYLE('',(#1881));+#1881 = SURFACE_STYLE_FILL_AREA(#1882);+#1882 = FILL_AREA_STYLE('',(#1883));+#1883 = FILL_AREA_STYLE_COLOUR('',#1602);+#1884 = STYLED_ITEM('color',(#1885),#1509);+#1885 = PRESENTATION_STYLE_ASSIGNMENT((#1886));+#1886 = SURFACE_STYLE_USAGE(.BOTH.,#1887);+#1887 = SURFACE_SIDE_STYLE('',(#1888));+#1888 = SURFACE_STYLE_FILL_AREA(#1889);+#1889 = FILL_AREA_STYLE('',(#1890));+#1890 = FILL_AREA_STYLE_COLOUR('',#1602);+#1891 = STYLED_ITEM('color',(#1892),#1527);+#1892 = PRESENTATION_STYLE_ASSIGNMENT((#1893));+#1893 = SURFACE_STYLE_USAGE(.BOTH.,#1894);+#1894 = SURFACE_SIDE_STYLE('',(#1895));+#1895 = SURFACE_STYLE_FILL_AREA(#1896);+#1896 = FILL_AREA_STYLE('',(#1897));+#1897 = FILL_AREA_STYLE_COLOUR('',#1799);+ENDSEC;+END-ISO-10303-21;
IN-S42ATA.svgadded+214
@@ -0,0 +1,214 @@+<?xml version="1.0" standalone="no"?>+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg+  xmlns:svg="http://www.w3.org/2000/svg"+  xmlns="http://www.w3.org/2000/svg"+  xmlns:xlink="http://www.w3.org/1999/xlink"+  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+  version="1.1"+  width="10.5156mm" height="8.5598mm" viewBox="0.0000 0.0000 10.5156 8.5598">+<title>SVG Image created as LED_unit1.svg date 2026-06-08T19:59:30 </title>+  <desc>Image generated by Eeschema-SVG </desc>+<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;+stroke-linecap:round; stroke-linejoin:round;"+ transform="translate(0 0) scale(1 1)">+<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 2.4003,5.0419+0.8763,6.5659+1.6383,6.5659+0.8763,6.5659+0.8763,5.8039+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 3.6703,5.0419+2.1463,6.5659+2.9083,6.5659+2.1463,6.5659+2.1463,5.8039+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,4.2799+6.7183,4.2799+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 4.1783,5.5499+4.1783,3.0099+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 6.7183,5.5499+6.7183,3.0099+4.1783,4.2799+Z" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M4.1783 4.2799+L1.6383 4.2799+" />+<path d="M6.7183 4.2799+L9.2583 4.2799+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="5.4483" y="2.3749"+textLength="2.5618" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">D?</text>+<g class="stroked-text"><desc>D?</desc>+<path d="M4.5713 2.3194+L4.5713 1.0494+" />+<path d="M4.5713 1.0494+L4.8737 1.0494+" />+<path d="M4.8737 1.0494+L5.0551 1.1099+" />+<path d="M5.0551 1.1099+L5.1761 1.2309+" />+<path d="M5.1761 1.2309+L5.2366 1.3518+" />+<path d="M5.2366 1.3518+L5.2970 1.5937+" />+<path d="M5.2970 1.5937+L5.2970 1.7751+" />+<path d="M5.2970 1.7751+L5.2366 2.0170+" />+<path d="M5.2366 2.0170+L5.1761 2.1380+" />+<path d="M5.1761 2.1380+L5.0551 2.2590+" />+<path d="M5.0551 2.2590+L4.8737 2.3194+" />+<path d="M4.8737 2.3194+L4.5713 2.3194+" />+<path d="M6.0228 2.1985+L6.0832 2.2590+" />+<path d="M6.0832 2.2590+L6.0228 2.3194+" />+<path d="M6.0228 2.3194+L5.9623 2.2590+" />+<path d="M5.9623 2.2590+L6.0228 2.1985+" />+<path d="M6.0228 2.1985+L6.0228 2.3194+" />+<path d="M5.7809 1.1099+L5.9018 1.0494+" />+<path d="M5.9018 1.0494+L6.2042 1.0494+" />+<path d="M6.2042 1.0494+L6.3251 1.1099+" />+<path d="M6.3251 1.1099+L6.3856 1.2309+" />+<path d="M6.3856 1.2309+L6.3856 1.3518+" />+<path d="M6.3856 1.3518+L6.3251 1.4728+" />+<path d="M6.3251 1.4728+L6.2647 1.5332+" />+<path d="M6.2647 1.5332+L6.1437 1.5937+" />+<path d="M6.1437 1.5937+L6.0832 1.6542+" />+<path d="M6.0832 1.6542+L6.0228 1.7751+" />+<path d="M6.0228 1.7751+L6.0228 1.8356+" />+</g><text x="5.4483" y="7.4549"+textLength="3.6503" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">LED</text>+<g class="stroked-text"><desc>LED</desc>+<path d="M4.6319 7.3994+L4.0271 7.3994+" />+<path d="M4.0271 7.3994+L4.0271 6.1294+" />+<path d="M5.0552 6.7342+L5.4786 6.7342+" />+<path d="M5.6600 7.3994+L5.0552 7.3994+" />+<path d="M5.0552 7.3994+L5.0552 6.1294+" />+<path d="M5.0552 6.1294+L5.6600 6.1294+" />+<path d="M6.2042 7.3994+L6.2042 6.1294+" />+<path d="M6.2042 6.1294+L6.5066 6.1294+" />+<path d="M6.5066 6.1294+L6.6880 6.1899+" />+<path d="M6.6880 6.1899+L6.8090 6.3109+" />+<path d="M6.8090 6.3109+L6.8695 6.4318+" />+<path d="M6.8695 6.4318+L6.9299 6.6737+" />+<path d="M6.9299 6.6737+L6.9299 6.8551+" />+<path d="M6.9299 6.8551+L6.8695 7.0970+" />+<path d="M6.8695 7.0970+L6.8090 7.2180+" />+<path d="M6.8090 7.2180+L6.6880 7.3390+" />+<path d="M6.6880 7.3390+L6.5066 7.3994+" />+<path d="M6.5066 7.3994+L6.2042 7.3994+" />+</g></g> +</svg>
README.md+14
@@ -1,3 +1,17 @@ # IN-S42ATA +**Inolux Corporation** · Amber · 0402 · LED+ Inolux Corporation · Top View SMD LED · 0402 (1.0 &times; 0.5mm) · AlInGaP++## Characterization++<iframe src="/blob/component/in-s42ata/IN-S42ATA.html" width="100%" height="2400" frameborder="0" style="border: none; border-radius: 8px;" allowfullscreen></iframe>++## Downloads++| File | Description |+|------|-------------|+| [IN-S42ATA.kicad_sym](/blob/component/in-s42ata/IN-S42ATA.kicad_sym) | KiCad Symbol |+| [IN-S42ATA.kicad_mod](/blob/component/in-s42ata/IN-S42ATA.kicad_mod) | KiCad Footprint |+| [IN-S42ATA.step](/blob/component/in-s42ata/IN-S42ATA.step) | 3D STEP Model |