1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/WaitlistBubble.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=9ce4103e"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2import RefreshRuntime from "/@react-refresh"; 3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 4let prevRefreshReg; 5let prevRefreshSig; 6if (import.meta.hot && !inWebWorker) { 7 if (!window.__vite_plugin_react_preamble_installed__) { 8 throw new Error("@vitejs/plugin-react can't detect preamble. Something is wrong. See https://github.com/vitejs/vite-plugin-react/pull/11#discussion_r430879201"); 9 } 10 prevRefreshReg = window.$RefreshReg$; 11 prevRefreshSig = window.$RefreshSig$; 12 window.$RefreshReg$ = (type, id) => { 13 RefreshRuntime.register(type, "/home/runner/workspace/client/src/components/WaitlistBubble.tsx " + id); 14 }; 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(); 18import __vite__cjsImport3_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=9ce4103e"; const useState = __vite__cjsImport3_react["useState"]; const useEffect = __vite__cjsImport3_react["useEffect"]; 19import { Mail, X } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=9ce4103e"; 20import { useLanguage } from "/src/lib/LanguageContext.tsx"; 21import { useLocation } from "/@fs/home/runner/workspace/node_modules/.vite/deps/wouter.js?v=9ce4103e"; 22const WaitlistBubble = () => { 23 _s(); 24 const { t } = useLanguage(); 25 const [location] = useLocation(); 26 const [isVisible, setIsVisible] = useState(false); 27 const [isDismissed, setIsDismissed] = useState(false); 28 const [isExpanded, setIsExpanded] = useState(false); 29 const isPlaybookPage = location.startsWith("/playbook") || location.startsWith("/skincare-guide"); 30 useEffect(() => { 31 const dismissed = sessionStorage.getItem("waitlistBubbleDismissed"); 32 if (dismissed) { 33 setIsDismissed(true); 34 return; 35 } 36 let timeoutId; 37 const showBubble = () => { 38 const cookieConsent = localStorage.getItem("kyn_cookie_consent"); 39 if (!cookieConsent) return; 40 setIsVisible(true); 41 window.removeEventListener("scroll", handleScroll); 42 clearTimeout(timeoutId); 43 }; 44 const handleScroll = () => { 45 const cookieConsent = localStorage.getItem("kyn_cookie_consent"); 46 if (!cookieConsent) return; 47 const scrollableHeight = document.documentElement.scrollHeight - window.innerHeight; 48 if (scrollableHeight <= 0) return; 49 const scrollPercent = window.scrollY / scrollableHeight * 100; 50 if (scrollPercent >= 25) { 51 showBubble(); 52 } 53 }; 54 timeoutId = setTimeout(() => { 55 if (!isVisible) { 56 showBubble(); 57 } 58 }, 5e3); 59 window.addEventListener("scroll", handleScroll); 60 return () => { 61 window.removeEventListener("scroll", handleScroll); 62 clearTimeout(timeoutId); 63 }; 64 }, [isVisible]); 65 const scrollToSubscribe = () => { 66 const subscribeSection = document.getElementById("subscribe-section"); 67 if (subscribeSection) { 68 const navHeight = 118; 69 const elementPosition = subscribeSection.getBoundingClientRect().top + window.scrollY; 70 window.scrollTo({ top: elementPosition - navHeight, behavior: "smooth" }); 71 } 72 setIsVisible(false); 73 setIsDismissed(true); 74 sessionStorage.setItem("waitlistBubbleDismissed", "true"); 75 sessionStorage.setItem("kyn-waitlist-popup-closed", "true"); 76 }; 77 const handleClick = () => { 78 if (isExpanded) { 79 scrollToSubscribe(); 80 } else { 81 setIsExpanded(true); 82 } 83 }; 84 const handleDismiss = (e) => { 85 e.stopPropagation(); 86 setIsVisible(false); 87 setIsDismissed(true); 88 sessionStorage.setItem("waitlistBubbleDismissed", "true"); 89 }; 90 if (isDismissed || isPlaybookPage) return null; 91 return /* @__PURE__ */ jsxDEV(Fragment, { children: [
92 /* @__PURE__ */ jsxDEV( 93 "div", 94 { 95 className: `fixed bottom-6 left-6 z-[100] transition-all duration-500 ease-out hidden md:flex items-center gap-2 ${isVisible ? "translate-x-0 opacity-100" : "-translate-x-full opacity-0"}`, 96 children: [ 97 /* @__PURE__ */ jsxDEV( 98 "button", 99 { 100 className: "flex items-center gap-3 text-white cursor-pointer hover:opacity-90 transition-opacity focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white", 101 style: { 102 padding: "14px 28px", 103 backgroundColor: "#0F0F0F", 104 borderRadius: "2px" 105 }, 106 onClick: scrollToSubscribe, 107 "data-testid": "button-waitlist-fab-desktop", 108 children: /* @__PURE__ */ jsxDEV( 109 "span", 110 { 111 className: "text-[11px] uppercase", 112 style: { 113 letterSpacing: "2px", 114 fontFamily: "Helvetica, Arial, sans-serif", 115 fontWeight: 400 116 }, 117 children: t("beTheFirstToKnow") 118 }, 119 void 0, 120 false, 121 { 122 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 123 lineNumber: 112, 124 columnNumber: 11 125 }, 126 this 127 ) 128 }, 129 void 0, 130 false, 131 { 132 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 133 lineNumber: 102, 134 columnNumber: 9 135 }, 136 this 137 ),
138 /* @__PURE__ */ jsxDEV( 139 "button", 140 { 141 onClick: handleDismiss, 142 className: "flex items-center justify-center text-white hover:opacity-70 transition-opacity", 143 style: { 144 width: "32px", 145 height: "32px", 146 backgroundColor: "#0F0F0F", 147 borderRadius: "2px" 148 }, 149 "aria-label": "Close", 150 "data-testid": "button-waitlist-close-desktop", 151 children: /* @__PURE__ */ jsxDEV(X, { size: 14, strokeWidth: 1.5 }, void 0, false, { 152 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 153 lineNumber: 135, 154 columnNumber: 11 155 }, this) 156 }, 157 void 0, 158 false, 159 { 160 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 161 lineNumber: 123, 162 columnNumber: 9 163 }, 164 this 165 ) 166 ] 167 }, 168 void 0, 169 true, 170 { 171 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 172 lineNumber: 95, 173 columnNumber: 7 174 }, 175 this 176 ), 177 /* @__PURE__ */ jsxDEV( 178 "div", 179 { 180 className: `fixed bottom-6 left-5 z-[100] transition-all duration-500 ease-out md:hidden flex items-center ${isVisible ? "translate-x-0 opacity-100" : "-translate-x-full opacity-0"}`, 181 children: [
182 /* @__PURE__ */ jsxDEV( 183 "button", 184 { 185 className: "relative flex items-center justify-center text-white cursor-pointer transition-all duration-300 ease-out focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white", 186 style: { 187 height: "48px", 188 minWidth: isExpanded ? "160px" : "48px", 189 padding: isExpanded ? "0 20px" : "0", 190 backgroundColor: "#0F0F0F", 191 borderRadius: "24px" 192 }, 193 onClick: handleClick, 194 "data-testid": "button-waitlist-fab", 195 children: [ 196 /* @__PURE__ */ jsxDEV( 197 "span", 198 { 199 className: "absolute flex items-center justify-center text-white transition-opacity duration-200", 200 style: { 201 top: "-3px", 202 right: "-3px", 203 width: "16px", 204 height: "16px", 205 fontSize: "9px", 206 fontWeight: 500, 207 fontFamily: "Helvetica, Arial, sans-serif", 208 backgroundColor: "#0F0F0F", 209 borderRadius: "8px", 210 boxShadow: "0 0 0 1.5px rgba(255,255,255,0.5)", 211 opacity: isExpanded ? 0 : 1, 212 pointerEvents: "none" 213 }, 214 "data-testid": "badge-waitlist-count", 215 children: "1" 216 }, 217 void 0, 218 false, 219 { 220 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 221 lineNumber: 160, 222 columnNumber: 11 223 }, 224 this 225 ), 226 !isExpanded ? /* @__PURE__ */ jsxDEV(Mail, { size: 20, strokeWidth: 1.4 }, void 0, false, { 227 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 228 lineNumber: 183, 229 columnNumber: 11 230 }, this) : /* @__PURE__ */ jsxDEV( 231 "span", 232 { 233 className: "text-[10px] uppercase whitespace-nowrap", 234 style: { 235 letterSpacing: "1.5px", 236 fontFamily: "Helvetica, Arial, sans-serif", 237 fontWeight: 400 238 }, 239 children: t("beTheFirstToKnow") 240 }, 241 void 0, 242 false, 243 { 244 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 245 lineNumber: 185, 246 columnNumber: 11 247 }, 248 this 249 ) 250 ] 251 }, 252 void 0, 253 true, 254 { 255 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 256 lineNumber: 147, 257 columnNumber: 9 258 }, 259 this 260 ),
261 /* @__PURE__ */ jsxDEV( 262 "button", 263 { 264 onClick: handleDismiss, 265 className: "flex items-center justify-center text-white hover:opacity-70 transition-opacity ml-2", 266 style: { 267 width: "32px", 268 height: "32px", 269 backgroundColor: "#0F0F0F", 270 borderRadius: "16px" 271 }, 272 "aria-label": "Close", 273 "data-testid": "button-waitlist-close-mobile", 274 children: /* @__PURE__ */ jsxDEV(X, { size: 12, strokeWidth: 1.5 }, void 0, false, { 275 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 276 lineNumber: 210, 277 columnNumber: 11 278 }, this) 279 }, 280 void 0, 281 false, 282 { 283 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 284 lineNumber: 198, 285 columnNumber: 9 286 }, 287 this 288 ) 289 ] 290 }, 291 void 0, 292 true, 293 { 294 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 295 lineNumber: 140, 296 columnNumber: 7 297 }, 298 this 299 ) 300 ] }, void 0, true, { 301 fileName: "/home/runner/workspace/client/src/components/WaitlistBubble.tsx", 302 lineNumber: 93, 303 columnNumber: 5 304 }, this); 305}; 306_s(WaitlistBubble, "YZG7kRLFtXyiOm+Y4lBy24q9B+A=", false, function() { 307 return [useLanguage, useLocation]; 308}); 309_c = WaitlistBubble; 310export default WaitlistBubble; 311var _c; 312$RefreshReg$(_c, "WaitlistBubble"); 313if (import.meta.hot && !inWebWorker) { 314 window.$RefreshReg$ = prevRefreshReg; 315 window.$RefreshSig$ = prevRefreshSig; 316} 317if (import.meta.hot && !inWebWorker) { 318 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 319 RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/components/WaitlistBubble.tsx", currentExports); 320 import.meta.hot.accept((nextExports) => { 321 if (!nextExports) return; 322 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/components/WaitlistBubble.tsx", currentExports, nextExports); 323 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 324 }); 325 }); 326} 327 328//# sourceMappingURL=data:application/json;base64,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GO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQXdFQTtBQUFBLE9BdkhGO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0F3SEE7QUFFSjtBQUFFaEQsR0FqTklELGdCQUF3QjtBQUFBLFVBQ2RGLGFBQ0tDLFdBQVc7QUFBQTtBQUFBOEQsS0FGMUI3RDtBQW1OTixlQUFlQTtBQUFlLElBQUE2RDtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsidXNlRWZmZWN0IiwiTWFpbCIsIlgiLCJ1c2VMYW5ndWFnZSIsInVzZUxvY2F0aW9uIiwiV2FpdGxpc3RCdWJibGUiLCJfcyIsInQiLCJsb2NhdGlvbiIsImlzVmlzaWJsZSIsInNldElzVmlzaWJsZSIsInVzZVN0YXRlIiwiaXNEaXNtaXNzZWQiLCJzZXRJc0Rpc21pc3NlZCIsImlzRXhwYW5kZWQiLCJzZXRJc0V4cGFuZGVkIiwiaXNQbGF5Ym9va1BhZ2UiLCJzdGFydHNXaXRoIiwiZGlzbWlzc2VkIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwidGltZW91dElkIiwic2hvd0J1YmJsZSIsImNvb2tpZUNvbnNlbnQiLCJsb2NhbFN0b3JhZ2UiLCJ3aW5kb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlU2Nyb2xsIiwiY2xlYXJUaW1lb3V0Iiwic2Nyb2xsYWJsZUhlaWdodCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsSGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJzY3JvbGxQZXJjZW50Iiwic2Nyb2xsWSIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwic2Nyb2xsVG9TdWJzY3JpYmUiLCJzdWJzY3JpYmVTZWN0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJuYXZIZWlnaHQiLCJlbGVtZW50UG9zaXRpb24iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwic2V0SXRlbSIsImhhbmRsZUNsaWNrIiwiaGFuZGxlRGlzbWlzcyIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJwYWRkaW5nIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyUmFkaXVzIiwibGV0dG
328VyU3BhY2luZyIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsInJpZ2h0IiwiZm9udFNpemUiLCJib3hTaGFkb3ciLCJvcGFjaXR5IiwicG9pbnRlckV2ZW50cyIsIl9jIiwiJFJlZnJlc2hSZWckIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIldhaXRsaXN0QnViYmxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWFpbCwgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VMYW5ndWFnZSB9IGZyb20gJ0AvbGliL0xhbmd1YWdlQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gJ3dvdXRlcic7XG5cbmNvbnN0IFdhaXRsaXN0QnViYmxlOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VMYW5ndWFnZSgpO1xuICBjb25zdCBbbG9jYXRpb25dID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgW2lzVmlzaWJsZSwgc2V0SXNWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRGlzbWlzc2VkLCBzZXRJc0Rpc21pc3NlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBIaWRlIG9uIFBsYXlib29rIHBhZ2VzIC0gdXNlcnMgYWxyZWFkeSBoYXZlIGFjY2Vzc1xuICBjb25zdCBpc1BsYXlib29rUGFnZSA9IGxvY2F0aW9uLnN0YXJ0c1dpdGgoJy9wbGF5Ym9vaycpIHx8IGxvY2F0aW9uLnN0YXJ0c1dpdGgoJy9za2luY2FyZS1ndWlkZScpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZGlzbWlzc2VkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnd2FpdGxpc3RCdWJibGVEaXNtaXNzZWQnKTtcbiAgICBpZiAoZGlzbWlzc2VkKSB7XG4gICAgICBzZXRJc0Rpc21pc3NlZCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dDtcbiAgICBcbiAgICBjb25zdCBzaG93QnViYmxlID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29va2llQ29uc2VudCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdreW5fY29va2llX2NvbnNlbnQnKTtcbiAgICAgIGlmICghY29va2llQ29uc2VudCkgcmV0dXJuO1xuICAgICAgXG4gICAgICBzZXRJc1Zpc2libGUodHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb29raWVDb25zZW50ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2t5bl9jb29raWVfY29uc2VudCcpO1xuICAgICAgaWYgKCFjb29raWVDb25zZW50KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNjcm9sbGFibGVIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgaWYgKHNjcm9sbGFibGVIZWlnaHQgPD0gMCkgcmV0dXJuO1xuICAgICAgXG4gICAgICBjb25zdCBzY3JvbGxQZXJjZW50ID0gKHdpbmRvdy5zY3JvbGxZIC8gc2Nyb2xsYWJsZUhlaWdodCkgKiAxMDA7XG4gICAgICBpZiAoc2Nyb2xsUGVyY2VudCA+PSAyNSkge1xuICAgICAgICBzaG93QnViYmxlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICAgICAgc2hvd0J1YmJsZSgpO1xuICAgICAgfVxuICAgIH0sIDUwMDApO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgfTtcbiAgfSwgW2lzVmlzaWJsZV0pO1xuXG4gIGNvbnN0IHNjcm9sbFRvU3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmliZVNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3Vic2NyaWJlLXNlY3Rpb24nKTtcbiAgICBpZiAoc3Vic2NyaWJlU2VjdGlvbikge1xuICAgICAgY29uc3QgbmF2SGVpZ2h0ID0gMTE4O1xuICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gc3Vic2NyaWJlU2VjdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogZWxlbWVudFBvc2l0aW9uIC0gbmF2SGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICAgIC8vIE1hcmsgYnViYmxlIGFzIGRpc21pc3NlZFxuICAgIHNldElzVmlzaWJsZShmYWxzZSk7XG4gICAgc2V0SXNEaXNtaXNzZWQodHJ1ZSk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd2FpdGxpc3RCdWJibGVEaXNtaXNzZWQnLCAndHJ1ZScpO1xuICAgIC8vIEJsb2NrIHRoZSBwb3B1cCBmcm9tIHNob3dpbmcgd2hlbiB1c2VyIGNsaWNrcyB0aGlzIGJ1dHRvblxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2t5bi13YWl0bGlzdC1wb3B1cC1jbG9zZWQnLCAndHJ1ZScpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICBzY3JvbGxUb1N1YnNjcmliZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc0V4cGFuZGVkKHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVEaXNtaXNzID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNldElzVmlzaWJsZShmYWxzZSk7XG4gICAgc2V0SXNEaXNtaXNzZWQodHJ1ZSk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd2FpdGxpc3RCdWJibGVEaXNtaXNzZWQnLCAndHJ1ZScpO1xuICB9O1xuXG4gIGlmIChpc0Rpc21pc3NlZCB8fCBpc1BsYXlib29rUGFnZSkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgey8qIERlc2t0b3AgdmVyc2lvbiAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgZml4ZWQgYm90dG9tLTYgbGVmdC02IHotWzEwMF0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIGVhc2Utb3V0IGhpZGRlbiBtZDpmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiAke1xuICAgICAgICAgIGlzVmlzaWJsZSBcbiAgICAgICAgICAgID8gJ3RyYW5zbGF0ZS14LTAgb3BhY2l0eS0xMDAnIFxuICAgICAgICAgICAgOiAnLXRyYW5zbGF0ZS14LWZ1bGwgb3BhY2l0eS0wJ1xuICAgICAgICB9YH1cbiAgICAgID5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIGhvdmVyOm9wYWNpdHktOTAgdHJhbnNpdGlvbi1vcGFjaXR5IGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXdoaXRlXCJcbiAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgI
328HBhZGRpbmc6ICcxNHB4IDI4cHgnLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzBGMEYwRicsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcycHgnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbGljaz17c2Nyb2xsVG9TdWJzY3JpYmV9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24td2FpdGxpc3QtZmFiLWRlc2t0b3BcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XSB1cHBlcmNhc2VcIlxuICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6ICcycHgnLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiAnSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QoJ2JlVGhlRmlyc3RUb0tub3cnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRGlzbWlzc31cbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGhvdmVyOm9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5XCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgd2lkdGg6ICczMnB4JyxcbiAgICAgICAgICAgIGhlaWdodDogJzMycHgnLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzBGMEYwRicsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcycHgnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi13YWl0bGlzdC1jbG9zZS1kZXNrdG9wXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxYIHNpemU9ezE0fSBzdHJva2VXaWR0aD17MS41fSAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogTW9iaWxlIHZlcnNpb24gLSBQcmVtaXVtIG1pbmltYWwgcGlsbCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgZml4ZWQgYm90dG9tLTYgbGVmdC01IHotWzEwMF0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIGVhc2Utb3V0IG1kOmhpZGRlbiBmbGV4IGl0ZW1zLWNlbnRlciAke1xuICAgICAgICAgIGlzVmlzaWJsZSBcbiAgICAgICAgICAgID8gJ3RyYW5zbGF0ZS14LTAgb3BhY2l0eS0xMDAnIFxuICAgICAgICAgICAgOiAnLXRyYW5zbGF0ZS14LWZ1bGwgb3BhY2l0eS0wJ1xuICAgICAgICB9YH1cbiAgICAgID5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBlYXNlLW91dCBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZVwiXG4gICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICBoZWlnaHQ6ICc0OHB4JyxcbiAgICAgICAgICAgIG1pbldpZHRoOiBpc0V4cGFuZGVkID8gJzE2MHB4JyA6ICc0OHB4JyxcbiAgICAgICAgICAgIHBhZGRpbmc6IGlzRXhwYW5kZWQgPyAnMCAyMHB4JyA6ICcwJyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwRjBGMEYnLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMjRweCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi13YWl0bGlzdC1mYWJcIlxuICAgICAgICA+XG4gICAgICAgICAgey8qIE5vdGlmaWNhdGlvbiBiYWRnZSAtIG9ubHkgdmlzaWJsZSB3aGVuIGNvbGxhcHNlZCAqL31cbiAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgdG9wOiAnLTNweCcsXG4gICAgICAgICAgICAgIHJpZ2h0OiAnLTNweCcsXG4gICAgICAgICAgICAgIHdpZHRoOiAnMTZweCcsXG4gICAgICAgICAgICAgIGhlaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZTogJzlweCcsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogJ0hlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMEYwRjBGJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAwIDAgMS41cHggcmdiYSgyNTUsMjU1LDI1NSwwLjUpJyxcbiAgICAgICAgICAgICAgb3BhY2l0eTogaXNFeHBhbmRlZCA/IDAgOiAxLFxuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJiYWRnZS13YWl0bGlzdC1jb3VudFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgMVxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIHsvKiBDb250ZW50ICovfVxuICAgICAgICAgIHshaXNFeHBhbmRlZCA/IChcbiAgICAgICAgICAgIDxNYWlsIHNpemU9ezIwfSBzdHJva2VXaWR0aD17MS40fSAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1bMTBweF0gdXBwZXJjYXNlIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzEuNXB4JyxcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYmVUaGVGaXJzdFRvS25vdycpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7LyogQ2xvc2UgYnV0dG9uIGZvciBtb2JpbGUgKi99XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEaXNtaXNzfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCB0cmFuc2l0aW9uLW9wYWNpdHkgbWwtMlwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgI
328HdpZHRoOiAnMzJweCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICczMnB4JyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwRjBGMEYnLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLXdhaXRsaXN0LWNsb3NlLW1vYmlsZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8WCBzaXplPXsxMn0gc3Ryb2tlV2lkdGg9ezEuNX0gLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFdhaXRsaXN0QnViYmxlO1xuIl0sImZpbGUiOiIvaG9tZS9ydW5uZXIvd29ya3NwYWNlL2NsaWVudC9zcmMvY29tcG9uZW50cy9XYWl0bGlzdEJ1YmJsZS50c3gifQ==
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.