1<!DOCTYPE html> 2<html lang="en" data-lang="en"> 3<head> 4<meta charset="UTF-8" /> 5<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6<link rel="icon" type="image/svg+xml" href="assets/favicon.svg"> 7<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32.png"> 8<link rel="icon" type="image/png" sizes="192x192" href="assets/favicon-192.png"> 9<link rel="apple-touch-icon" sizes="180x180" href="assets/favicon-180.png"> 10<link rel="shortcut icon" href="assets/favicon.ico"> 11<meta name="theme-color" content="#E1251B"> 12<title>Plenary Speakers · MIPCC 2026</title> 13<link rel="preconnect" href="https://fonts.googleapis.com"> 14<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 15<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,[email protected],300;9..144,400;9..144,500;9..144,600&family=Inter+Tight:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"> 16<link rel="stylesheet" href="styles.css"> 17<link rel="stylesheet" href="concierge.css"> 18<style> 19 .speakers-grid-full { 20 display: grid; 21 grid-template-columns: repeat(2, 1fr); 22 gap: 32px; 23 } 24 .speaker-detail { 25 display: grid; 26 grid-template-columns: 1fr 1.4fr; 27 gap: 0; 28 background: var(--paper); 29 border: 1px solid var(--line); 30 overflow: hidden; 31 transition: box-shadow 0.4s, transform 0.4s; 32 } 33 .speaker-detail:hover { 34 box-shadow: 0 30px 60px -20px rgba(14, 27, 44, 0.15); 35 transform: translateY(-4px); 36 } 37 .speaker-detail-image { 38 aspect-ratio: 1/1.2; position: relative; overflow: hidden; 39 display: flex; align-items: flex-end; padding: 24px; 40 background: var(--ink); 41 } 42 .speaker-detail-image.has-photo img { 43 position: absolute; inset: 0; 44 width: 100%; height: 100%; 45 object-fit: cover; 46 object-position: top center; 47 filter: grayscale(100%) contrast(1.05); 48 transition: filter 0.6s, transform 0.8s; 49 } 50 .speaker-detail:hover .speaker-detail-image.has-photo img { 51 filter: grayscale(0%) contrast(1.0); 52 transform: scale(1.03); 53 } 54 .speaker-detail-image.style-1 { background: linear-gradient(135deg, var(--mipcc-blue-deep) 0%, var(--ink) 100%); } 55 .speaker-detail-image.style-2 { background: linear-gradient(135deg, var(--mipcc-red) 0%, var(--mipcc-blue-deep) 100%); } 56 .speaker-detail-image.style-3 { background: linear-gradient(135deg, var(--gold-deep) 0%, var(--mipcc-blue-deep) 100%); } 57 .speaker-detail-image.style-4 { background: linear-gradient(135deg, var(--mipcc-blue-light) 0%, var(--mipcc-blue-deep) 100%); } 58 .speaker-detail-image::before { 59 content: ''; position: absolute; inset: 0; 60 background: linear-gradient(180deg, transparent 55%, rgba(14, 27, 44, 0.9)); 61 pointer-events: none; 62 } 63 .speaker-detail-image .initial { 64 position: absolute; top: 24px; right: 28px; 65 font-family: 'Fraunces', serif; 66 font-size: 88px; font-weight: 300; 67 color: var(--paper); opacity: 0.3; line-height: 1; 68 } 69 .speaker-detail-image .tag { 70 position: relative; z-index: 2; 71 font-family: 'JetBrains Mono', monospace; 72 font-size: 10px; color: var(--gold); 73 letter-spacing: 0.15em; text-transform: uppercase; 74 } 75 .speaker-detail-info { 76 padding: 36px; 77 display: flex; 78 flex-direction: column; 79 justify-content: center; 80 } 81 .speaker-detail-info .name { 82 font-family: 'Fraunces', serif; 83 font-size: 24px; font-weight: 500; 84 margin-bottom: 8px; color: var(--ink); 85 line-height: 1.25; 86 } 87 .speaker-detail-info .creds { 88 font-size: 13px; color: var(--mipcc-red); 89 font-weight: 500; margin-bottom: 16px; 90 } 91 .speaker-detail-info .affiliation { 92 font-size: 14px; color: var(--mipcc-blue-deep); 93 font-weight: 600; margin-bottom: 16px; 94 padding-bottom: 16px; 95 border-bottom: 1px dotted var(--line); 96 } 97 .speaker-detail-info .title { 98 font-size: 14px; line-height: 1.7; 99 color: var(--whisper); 100 margin-bottom: 20px; 101 } 102 .read-bio-btn { 103 align-self: flex-start; 104 background: transparent; 105 color: var(--ink); 106 padding: 10px 0; 107 border: none; 108 font-family: 'Inter Tight', sans-serif; 109 font-size: 12px; font-weight: 600; 110 letter-spacing: 0.06em; cursor: pointer; 111 text-transform: uppercase; 112 border-bottom: 1px solid var(--mipcc-blue-deep); 113 transition: all 0.3s; 114 display: inline-flex; align-items: center; gap: 8px; 115 } 116 .read-bio-btn:hover { 117 color: var(--mipcc-red); 118 border-color: var(--mipcc-red); 119 gap: 12px; 120 } 121 122 /* MODAL */ 123 .bio-modal-overlay { 124 position: fixed; inset: 0; 125 background: rgba(14, 27, 44, 0.85); 126 backdrop-filter: blur(8px); 127 z-index: 1000; 128 display: none;
129 align-items: flex-start; justify-content: center; 130 padding: 80px 20px; 131 overflow-y: auto; 132 opacity: 0; 133 transition: opacity 0.3s; 134 } 135 .bio-modal-overlay.active { 136 display: flex; 137 opacity: 1; 138 } 139 .bio-modal { 140 background: var(--paper); 141 max-width: 760px; width: 100%; 142 position: relative; 143 padding: 0; 144 border: 1px solid var(--gold); 145 box-shadow: 0 40px 80px -20px rgba(0, 0, 0, 0.5); 146 transform: translateY(-10px); 147 transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); 148 } 149 .bio-modal-overlay.active .bio-modal { 150 transform: translateY(0); 151 } 152 .bio-modal-header { 153 display: grid; 154 grid-template-columns: 140px 1fr; 155 gap: 28px; 156 padding: 36px 36px 28px; 157 border-bottom: 1px solid var(--line); 158 align-items: start; 159 } 160 .bio-modal-photo { 161 aspect-ratio: 4/5; 162 overflow: hidden; 163 border: 1px solid var(--gold); 164 } 165 .bio-modal-photo img { 166 width: 100%; height: 100%; 167 object-fit: cover; 168 filter: grayscale(100%) contrast(1.05); 169 } 170 .bio-modal-photo.no-photo { 171 background: linear-gradient(135deg, var(--mipcc-blue-deep), var(--ink)); 172 display: flex; align-items: center; justify-content: center; 173 color: var(--gold); 174 font-family: 'Fraunces', serif; 175 font-size: 56px; font-weight: 300; 176 } 177 .bio-modal-header-info { 178 padding-top: 4px; 179 } 180 .bio-modal-eyebrow { 181 font-family: 'JetBrains Mono', monospace; 182 font-size: 10px; color: var(--mipcc-red); 183 letter-spacing: 0.15em; text-transform: uppercase; 184 margin-bottom: 12px; font-weight: 500; 185 } 186 .bio-modal-name { 187 font-family: 'Fraunces', serif; 188 font-size: 28px; font-weight: 500; 189 color: var(--ink); line-height: 1.2; 190 margin-bottom: 8px; 191 } 192 .bio-modal-creds { 193 font-size: 13px; color: var(--mipcc-red); 194 font-weight: 500; margin-bottom: 12px; 195 } 196 .bio-modal-affiliation { 197 font-size: 14px; color: var(--mipcc-blue-deep); 198 font-weight: 600; margin-bottom: 10px; 199 } 200 .bio-modal-title { 201 font-size: 13px; line-height: 1.6; 202 color: var(--whisper); 203 } 204 .bio-modal-body { 205 padding: 32px 36px 40px; 206 max-height: 50vh; 207 overflow-y: auto; 208 } 209 .bio-modal-body p { 210 font-size: 15px; line-height: 1.75; 211 color: var(--ink); margin-bottom: 16px; 212 } 213 .bio-modal-body p:last-child { margin-bottom: 0; } 214 .bio-modal-close { 215 position: absolute; 216 top: 16px; right: 16px; 217 width: 40px; height: 40px; 218 background: transparent; 219 border: 1px solid var(--line); 220 cursor: pointer; 221 font-size: 20px; 222 color: var(--ink); 223 transition: all 0.3s; 224 display: flex; align-items: center; justify-content: center; 225 line-height: 1; 226 } 227 .bio-modal-close:hover { 228 background: var(--ink); 229 color: var(--paper); 230 border-color: var(--ink); 231 } 232 body.modal-open { overflow: hidden; } 233 @media (max-width: 768px) { 234 .speakers-grid-full { grid-template-columns: 1fr; } 235 .speaker-detail { grid-template-columns: 1fr; } 236 .speaker-detail-image { aspect-ratio: 4/5; } 237 .bio-modal-overlay { padding: 20px; } 238 .bio-modal-header { 239 grid-template-columns: 100px 1fr; 240 padding: 24px 20px 20px; 241 gap: 20px; 242 } 243 .bio-modal-body { padding: 24px 20px 28px; max-height: 60vh; } 244 .bio-modal-name { font-size: 22px; } 245 } 246</style> 247</head> 248<body> 249 250<nav> 251 <a class='nav-logo' href='/'><img src="assets/logo-horizontal.png" alt="Montreal International Palliative Care Congress"></a> 252 <ul class="nav-links"> 253 <li><a data-i18n='nav.about' href='/#about'>About</a></li> 254 <li><a data-i18n='nav.committee' href='/committee'>Committee</a></li> 255 <li><a class='current' data-i18n='nav.speakers' href='/speakers'>Speakers</a></li> 256 <li><a data-i18n='nav.program' href='/#program'>Program</a></li> 257 <li><a data-i18n='nav.fees' href='/registration'>Registration</a></li> 258 <li><a data-i18n='nav.innovation' href='/innovation'>Innovation</a></li> 259 <li><a data-i18n='nav.travel' href='/travel'>Travel</a></li> 260 <li><a data-i18n='nav.faq' href='/faq'>FAQ</a></li> 261 <li><a data-i18n='nav.partners' href='/partners'>Partners</a></li> 262 </ul> 263 <div class="nav-actions"> 264 <button class="menu-toggle" id="menuToggle" aria-label="Menu">
265 <span></span> 266 <span></span> 267 <span></span> 268 </button> 269 <div class="lang-toggle"> 270 <button data-setlang="en" class="active">EN</button><span class="sep">/</span> 271 <button data-setlang="fr">FR</button><span class="sep">/</span> 272 <button data-setlang="es">ES</button> 273 </div> 274 <span class="btn-outline is-disabled" data-i18n="nav.submitClosed" aria-disabled="true">Submissions Closed</span> 275 <a href="https://event.fourwaves.com/mipcc2026/registration" class="btn-primary" data-i18n="nav.register">Register</a> 276 </div> 277</nav> 278 279<div class="mobile-menu" id="mobileMenu"> 280 <ul> 281 <li><a data-i18n='nav.about' href='/#about'>About</a></li> 282 <li><a data-i18n='nav.committee' href='/committee'>Committee</a></li> 283 <li><a class='current' data-i18n='nav.speakers' href='/speakers'>Speakers</a></li> 284 <li><a data-i18n='nav.program' href='/#program'>Program</a></li> 285 <li><a data-i18n='nav.fees' href='/registration'>Registration</a></li> 286 <li><a data-i18n='nav.innovation' href='/innovation'>Innovation Challenge</a></li> 287 <li><a data-i18n='nav.travel' href='/travel'>Travel & Visa</a></li> 288 <li><a data-i18n='nav.faq' href='/faq'>FAQ</a></li> 289 <li><a data-i18n='nav.partners' href='/partners'>Partners</a></li> 290 </ul> 291 <div class="menu-footer"> 292 <div class="lang-toggle"> 293 <button data-setlang="en" class="active">EN</button><span class="sep">/</span> 294 <button data-setlang="fr">FR</button><span class="sep">/</span> 295 <button data-setlang="es">ES</button> 296 </div> 297 <span class="btn-outline is-disabled" data-i18n="nav.submitClosed" aria-disabled="true" style="margin-bottom:10px;">Submissions Closed</span> 298 <a href="https://event.fourwaves.com/mipcc2026/registration" class="btn-primary" data-i18n="nav.register">Register</a> 299 </div> 300</div> 301 302 303<header class="page-header"> 304 <div class="breadcrumb"> 305 <a data-i18n='summaries.backToHome' href='/'>â Back to home</a> 306 </div> 307 <h1> 308 <span data-i18n="speakers.title">The voices</span> <em data-i18n="speakers.titleEm">of the 50th</em> 309 </h1> 310 <p class="lead" data-i18n="speakers.intro">Clinicians, researchers, and humanists chosen to carry the legacy and shape the next chapter.</p> 311</header> 312 313<section style="padding-top: 80px;"> 314 <div class="speakers-grid-full" id="speakersGrid"></div> 315</section> 316 317<!-- BIO MODAL --> 318<div class="bio-modal-overlay" id="bioModalOverlay"> 319 <div class="bio-modal"> 320 <button class="bio-modal-close" id="bioModalClose" aria-label="Close">Ã</button> 321 <div class="bio-modal-header"> 322 <div class="bio-modal-photo" id="bioModalPhoto"></div> 323 <div class="bio-modal-header-info"> 324 <div class="bio-modal-eyebrow">Plenary Speaker</div> 325 <div class="bio-modal-name" id="bioModalName"></div> 326 <div class="bio-modal-creds" id="bioModalCreds"></div> 327 <div class="bio-modal-affiliation" id="bioModalAffiliation"></div> 328 <div class="bio-modal-title" id="bioModalTitle"></div> 329 </div> 330 </div> 331 <div class="bio-modal-body" id="bioModalBody"></div> 332 </div> 333</div> 334 335<footer> 336 <div class="footer-grid"> 337 <div class="footer-brand"> 338 <img src="assets/logo-horizontal-white.png" alt="Montreal International Palliative Care Congress" class="footer-logo"> 339 <p data-i18n-html="footer.tagline">MIPCC 2026</p> 340 </div> 341 <div class="footer-col"> 342 <h4 data-i18n="footer.eventTitle">Event</h4> 343 <ul> 344 <li><a data-i18n='nav.about' href='/#about'>About</a></li> 345 <li><a data-i18n='nav.committee' href='/committee'>Committee</a></li> 346 <li><a data-i18n='nav.speakers' href='/speakers'>Speakers</a></li> 347 <li><a data-i18n='nav.program' href='/#program'>Program</a></li> 348 </ul> 349 </div> 350 <div class="footer-col"> 351 <h4 data-i18n="footer.infoTitle">Information</h4> 352 <ul> 353 <li><a data-i18n='nav.innovation' href='/innovation'>Innovation Challenge</a></li> 354 <li><a data-i18n='nav.travel' href='/travel'>Travel & Visa</a></li> 355 <li><a data-i18n='nav.faq' href='/faq'>FAQ</a></li> 356 <li><a data-i18n='nav.partners' href='/partners'>Partners</a></li> 357 </ul> 358 </div> 359 <div class="footer-col"> 360 <h4 data-i18n="footer.contactTitle">Contact</h4> 361 <ul> 362 <li data-i18n="footer.contactGeneral">[email protected]</li> 363 <li><a href="https://www.linkedin.com/company/palliative-care-mcgill-mcgill-university/" target="_blank" rel="noopener" data-i18n="footer.linkedin">LinkedIn</a></li> 364 </ul> 365 </div> 366 </div> 367 <div class="footer-bottom"> 368 <div data-i18n="footer.copyright">© MIPCC 2026</div> 369 <div><a href="https://neoevents.ca" target="_blank" rel="noopener" data-i18n="footer.credit" style="color: rgba(250, 247, 242, 0.4); text-decoration: none; transition: color 0.3s;" onmouseover="this.style.color='var(--gold)'" onmouseout="this.style.color='rgba(250, 247, 242, 0.4)'">Produced by NEO</a></div> 370 </div> 371</footer> 372
373<script src="translations.js"></script>
vendor: 1 bytes, line 373
373
374<script> 375 let currentLang = 'en'; 376 function getNested(obj, path) { 377 return path.split('.').reduce((acc, key) => acc && acc[key], obj); 378 } 379 function setLanguage(lang) { 380 currentLang = lang; 381 document.documentElement.setAttribute('data-lang', lang); 382 document.documentElement.setAttribute('lang', lang); 383 document.querySelectorAll('[data-setlang]').forEach(btn => { 384 btn.classList.toggle('active', btn.dataset.setlang === lang); 385 }); 386 document.querySelectorAll('[data-i18n]').forEach(el => { 387 const key = el.getAttribute('data-i18n'); 388 const value = getNested(translations[lang], key); 389 if (value !== undefined) el.textContent = value; 390 }); 391 document.querySelectorAll('[data-i18n-html]').forEach(el => { 392 const key = el.getAttribute('data-i18n-html'); 393 const value = getNested(translations[lang], key); 394 if (value !== undefined) el.innerHTML = value; 395 }); 396 renderSpeakers(); 397 } 398 function renderSpeakers() { 399 const grid = document.getElementById('speakersGrid'); 400 const L = currentLang; 401 const pick = v => (v && typeof v === 'object' && v[L] !== undefined) ? v[L] : v; 402 grid.innerHTML = plenarySpeakers.map((s, i) => { 403 const initials = s.name.split(' ').map(w => w.charAt(0)).slice(0, 2).join(''); 404 const hasPhoto = s.photo; 405 const t = translations[currentLang].speakers || {}; 406 const readBioLabel = t.readBio || 'Read bio â'; 407 return ` 408 <div class="speaker-detail"> 409 <div class="speaker-detail-image ${hasPhoto ? 'has-photo' : 'style-' + ((i % 4) + 1)}"> 410 ${hasPhoto ? `<img src="assets/speakers/${s.photo}.png" alt="${s.name}">` : `<span class="initial">${initials}</span>`} 411 <span class="tag">Plenary Speaker</span> 412 </div> 413 <div class="speaker-detail-info"> 414 <div class="name">${s.name}</div> 415 ${s.credentials ? `<div class="creds">${s.credentials}</div>` : ''} 416 <div class="affiliation">${pick(s.affiliation)}</div> 417 <div class="title">${pick(s.title)}</div> 418 ${s.bio ? `<button class="read-bio-btn" data-speaker-idx="${i}">${readBioLabel}</button>` : ''} 419 </div> 420 </div> 421 `; 422 }).join(''); 423 424 // Wire up bio buttons 425 grid.querySelectorAll('.read-bio-btn').forEach(btn => { 426 btn.addEventListener('click', () => { 427 const idx = parseInt(btn.dataset.speakerIdx); 428 openBioModal(plenarySpeakers[idx]); 429 }); 430 }); 431 } 432 433 // BIO MODAL 434 function openBioModal(speaker) { 435 const L = currentLang; 436 const pick = v => (v && typeof v === 'object' && v[L] !== undefined) ? v[L] : v; 437 const overlay = document.getElementById('bioModalOverlay'); 438 const photo = document.getElementById('bioModalPhoto'); 439 const initials = speaker.name.split(' ').map(w => w.charAt(0)).slice(0, 2).join(''); 440 441 if (speaker.photo) { 442 photo.className = 'bio-modal-photo'; 443 photo.innerHTML = `<img src="assets/speakers/${speaker.photo}.png" alt="${speaker.name}">`; 444 } else { 445 photo.className = 'bio-modal-photo no-photo'; 446 photo.innerHTML = `<span>${initials}</span>`; 447 } 448 449 document.getElementById('bioModalName').textContent = speaker.name; 450 document.getElementById('bioModalCreds').textContent = speaker.credentials || ''; 451 document.getElementById('bioModalCreds').style.display = speaker.credentials ? 'block' : 'none'; 452 document.getElementById('bioModalAffiliation').textContent = pick(speaker.affiliation); 453 document.getElementById('bioModalTitle').textContent = pick(speaker.title); 454 455 const bioText = pick(speaker.bio) || ''; 456 const paragraphs = bioText.split('\n\n').map(p => `<p>${p.trim()}</p>`).join(''); 457 document.getElementById('bioModalBody').innerHTML = paragraphs; 458 459 overlay.classList.add('active'); 460 document.body.classList.add('modal-open'); 461 } 462 function closeBioModal() { 463 document.getElementById('bioModalOverlay').classList.remove('active'); 464 document.body.classList.remove('modal-open'); 465 } 466 document.getElementById('bioModalOverlay').addEventListener('click', (e) => { 467 if (e.target.id === 'bioModalOverlay') closeBioModal(); 468 }); 469 document.getElementById('bioModalClose').addEventListener('click', closeBioModal); 470 document.addEventListener('keydown', (e) => { 471 if (e.key === 'Escape') closeBioModal(); 472 }); 473 document.querySelectorAll('[data-setlang]').forEach(btn => { 474 btn.addEventListener('click', () => setLanguage(btn.dataset.setlang)); 475 }); 476 // ---- URL-based language routing (shareable links: /fr, ?lang=es, #en) ---- 477 (function initLanguageFromURL() { 478 const supported = ['en', 'fr', 'es']; 479 function detect() { 480 // 1) path segment, e.g. /fr or /fr/ (works with Netlify redirects)
481 const seg = window.location.pathname.split('/').filter(Boolean)[0]; 482 if (seg && supported.includes(seg.toLowerCase())) return seg.toLowerCase(); 483 // 2) query param, e.g. ?lang=fr 484 const q = new URLSearchParams(window.location.search).get('lang'); 485 if (q && supported.includes(q.toLowerCase())) return q.toLowerCase(); 486 // 3) hash, e.g. #fr 487 const h = window.location.hash.replace('#', '').toLowerCase(); 488 if (supported.includes(h)) return h; 489 return 'en'; 490 } 491 setLanguage(detect()); 492 // keep the hash in sync when the user switches language, so the URL is shareable 493 document.querySelectorAll('[data-setlang]').forEach(btn => { 494 btn.addEventListener('click', () => { 495 const lang = btn.dataset.setlang; 496 if (history.replaceState) { 497 history.replaceState(null, '', '#' + lang); 498 } else { 499 window.location.hash = lang; 500 } 501 }); 502 }); 503 // respond to back/forward navigation and manual hash edits 504 window.addEventListener('hashchange', () => { 505 const h = window.location.hash.replace('#', '').toLowerCase(); 506 if (supported.includes(h)) setLanguage(h); 507 }); 508 })(); 509 510 // Mobile menu toggle 511 const menuToggle = document.getElementById('menuToggle'); 512 const mobileMenu = document.getElementById('mobileMenu'); 513 if (menuToggle && mobileMenu) { 514 menuToggle.addEventListener('click', () => { 515 menuToggle.classList.toggle('active'); 516 mobileMenu.classList.toggle('active'); 517 document.body.style.overflow = mobileMenu.classList.contains('active') ? 'hidden' : ''; 518 }); 519 // Close menu when clicking a link 520 mobileMenu.querySelectorAll('a').forEach(link => { 521 link.addEventListener('click', () => { 522 menuToggle.classList.remove('active'); 523 mobileMenu.classList.remove('active'); 524 document.body.style.overflow = ''; 525 }); 526 }); 527 } 528 529</script>
vendor: 1 bytes, line 529
529
530<script src="faq-data.js"></script>
vendor: 1 bytes, line 530
530
531<script src="kb-source.js"></script>
vendor: 1 bytes, line 531
531
532<script src="concierge.js"></script>
532 533
534<script async id="netlify-rum-container" src="/.netlify/scripts/rum" data-netlify-rum-site-id="db8d0af5-78ad-416e-aa64-ad0add87f63b" data-netlify-deploy-branch="" data-netlify-deploy-context="production" data-netlify-cwv-token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlX2lkIjoiZGI4ZDBhZjUtNzhhZC00MTZlLWFhNjQtYWQwYWRkODdmNjNiIiwiYWNjb3VudF9pZCI6IjY5ZmRjMWMzNjE2NjJmMzlkNDEzYjQ4NSIsImRlcGxveV9pZCI6IjZhYzNkZDczZGQwOTY0MDRkZjI0MmNmYSIsImlzc3VlciI6Im5mc2VydmVyIn0.EfTXMdHyvZU3wvEXUc1lNMVqp-7LlpBwyIUD0trVt1M"></script>
534 535</body> 536</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.