1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/lib/LanguageContext.tsx");import __vite__cjsImport0_react_jsxDevRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=9ce4103e"; 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/lib/LanguageContext.tsx " + id); 14 }; 15 window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; 16} 17var _s = $RefreshSig$(), _s2 = $RefreshSig$(); 18import __vite__cjsImport3_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=9ce4103e"; const createContext = __vite__cjsImport3_react["createContext"]; const useState = __vite__cjsImport3_react["useState"]; const useContext = __vite__cjsImport3_react["useContext"]; const useEffect = __vite__cjsImport3_react["useEffect"]; 19import { translations, getTranslation } from "/src/lib/translations.ts"; 20const LanguageContext = createContext(void 0); 21export function LanguageProvider({ children }) { 22 _s(); 23 const getInitialLanguage = () => { 24 if (typeof window !== "undefined") { 25 const params = new URLSearchParams(window.location.search); 26 const urlLang = params.get("lang"); 27 if (urlLang && (urlLang === "en" || urlLang === "fr")) { 28 return urlLang; 29 } 30 const savedLanguage = localStorage.getItem("kyn-language"); 31 if (savedLanguage && (savedLanguage === "en" || savedLanguage === "fr")) { 32 return savedLanguage; 33 } 34 const browserLang = navigator.language.toLowerCase(); 35 const frenchLanguageCodes = [ 36 "fr", 37 // French (generic) 38 "fr-fr", 39 // France 40 "fr-ca", 41 // Canada (Quebec) 42 "fr-be", 43 // Belgium 44 "fr-ch", 45 // Switzerland 46 "fr-lu", 47 // Luxembourg 48 "fr-mc", 49 // Monaco 50 "fr-sn", 51 // Senegal 52 "fr-ci", 53 // Côte d'Ivoire 54 "fr-ml", 55 // Mali 56 "fr-ma", 57 // Morocco 58 "fr-dz", 59 // Algeria 60 "fr-tn" 61 // Tunisia 62 ]; 63 if (frenchLanguageCodes.some((code) => browserLang.startsWith(code))) { 64 return "fr"; 65 } 66 } 67 return "en"; 68 }; 69 const [language, setLanguageState] = useState(getInitialLanguage); 70 const [selectedCountry, setSelectedCountryState] = useState(() => { 71 if (typeof window !== "undefined") { 72 return localStorage.getItem("kyn-country") || "US"; 73 } 74 return "US"; 75 }); 76 const setSelectedCountry = (country) => { 77 setSelectedCountryState(country); 78 if (typeof window !== "undefined") { 79 localStorage.setItem("kyn-country", country); 80 } 81 }; 82 const setLanguage = (lang) => { 83 const scrollPosition = typeof window !== "undefined" ? window.scrollY : 0; 84 setLanguageState(lang); 85 if (typeof window !== "undefined") { 86 localStorage.setItem("kyn-language", lang); 87 const url = new URL(window.location.href); 88 url.searchParams.set("lang", lang); 89 window.history.pushState({}, "", url); 90 document.documentElement.lang = lang; 91 const metaDescription = document.querySelector('meta[name="description"]'); 92 if (metaDescription) { 93 metaDescription.setAttribute("content", translations[lang].metaDescription); 94 } 95 document.title = translations[lang].pageTitle; 96 requestAnimationFrame(() => { 97 window.scrollTo(0, scrollPosition); 98 }); 99 } 100 }; 101 const toggleLanguage = () => {
102 setLanguage(language === "en" ? "fr" : "en"); 103 }; 104 const t = (key) => { 105 return getTranslation(language, key); 106 }; 107 useEffect(() => { 108 if (typeof window !== "undefined") { 109 document.documentElement.lang = language; 110 const metaDescription = document.querySelector('meta[name="description"]'); 111 if (metaDescription) { 112 metaDescription.setAttribute("content", translations[language].metaDescription); 113 } else { 114 const meta = document.createElement("meta"); 115 meta.name = "description"; 116 meta.content = translations[language].metaDescription; 117 document.head.appendChild(meta); 118 } 119 const addHreflangLink = (lang) => { 120 const existingLink = document.querySelector(`link[hreflang="${lang}"]`); 121 if (!existingLink) { 122 const link = document.createElement("link"); 123 link.rel = "alternate"; 124 link.hreflang = lang; 125 const url = new URL(window.location.href); 126 url.searchParams.set("lang", lang); 127 link.href = url.toString(); 128 document.head.appendChild(link); 129 } 130 }; 131 addHreflangLink("en"); 132 addHreflangLink("fr"); 133 document.title = translations[language].pageTitle; 134 } 135 }, [language]); 136 return /* @__PURE__ */ jsxDEV(LanguageContext.Provider, { value: { language, setLanguage, t, toggleLanguage, selectedCountry, setSelectedCountry }, children }, void 0, false, { 137 fileName: "/home/runner/workspace/client/src/lib/LanguageContext.tsx", 138 lineNumber: 164, 139 columnNumber: 5 140 }, this); 141} 142_s(LanguageProvider, "CObipuuTvS/GH7z0KKyWJ0EaZI0="); 143_c = LanguageProvider; 144export function useLanguage() { 145 _s2(); 146 const context = useContext(LanguageContext); 147 if (context === void 0) { 148 throw new Error("useLanguage must be used within a LanguageProvider"); 149 } 150 return context; 151} 152_s2(useLanguage, "b9L3QQ+jgeyIrH0NfHrJ8nn7VMU="); 153var _c; 154$RefreshReg$(_c, "LanguageProvider"); 155if (import.meta.hot && !inWebWorker) { 156 window.$RefreshReg$ = prevRefreshReg; 157 window.$RefreshSig$ = prevRefreshSig; 158} 159if (import.meta.hot && !inWebWorker) { 160 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 161 RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/lib/LanguageContext.tsx", currentExports); 162 import.meta.hot.accept((nextExports) => { 163 if (!nextExports) return; 164 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/lib/LanguageContext.tsx", currentExports, nextExports); 165 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 166 }); 167 }); 168} 169 170//# sourceMappingURL=data:application/json;base64,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ZQURIO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FFQTtBQUVKO0FBQUNDLEdBekplRixrQkFBZ0I7QUFBQStELEtBQWhCL0Q7QUEySlQsZ0JBQVNnRSxjQUFtQztBQUFBQyxNQUFBO0FBQ2pELFFBQU1DLFVBQVVDLFdBQVdyRSxlQUFlO0FBQzFDLE1BQUlvRSxZQUFZbkUsUUFBVztBQUN6QixVQUFNLElBQUlxRSxNQUFNLG9EQUFvRDtBQUFBLEVBQ3RFO0FBQ0EsU0FBT0Y7QUFDVDtBQUFDRCxJQU5lRCxhQUFXO0FBQUEsSUFBQUQ7QUFBQU0sYUFBQU4sSUFBQSIsIm5hbWVzIjpbImNyZWF0ZUNvbnRleHQiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIlJlYWN0Tm9kZSIsInRyYW5zbGF0aW9ucyIsImdldFRyYW5zbGF0aW9uIiwiTGFuZ3VhZ2VDb250ZXh0IiwidW5kZWZpbmVkIiwiTGFuZ3VhZ2VQcm92aWRlciIsImNoaWxkcmVuIiwiX3MiLCJnZXRJbml0aWFsTGFuZ3VhZ2UiLCJ3aW5kb3ciLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsInVybExhbmciLCJnZXQiLCJzYXZlZExhbmd1YWdlIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImJyb3dzZXJMYW5nIiwibmF2aWdhdG9yIiwibGFuZ3VhZ2UiLCJ0b0xvd2VyQ2FzZSIsImZyZW5jaExhbmd1YWdlQ29kZXMiLCJzb21lIiwiY29kZSIsInN0YXJ0c1dpdGgiLCJzZXRMYW5ndWFnZVN0YXRlIiwic2VsZWN0ZWRDb3VudHJ5Iiwic2V0U2VsZWN0ZWRDb3VudHJ5U3RhdGUiLCJzZXRTZWxlY3RlZENvdW50cnkiLCJjb3VudHJ5Iiwic2V0SXRlbSIsInNldExhbmd1YWdlIiwibGFuZyIsInNjcm9sbFBvc2l0aW9uIiwic2Nyb2xsWSIsInVybCIsIlVSTCIsImhyZWYiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJoaXN0b3J5IiwicHVzaFN0YXRlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJtZXRhRGVzY3JpcHRpb24iLCJxdWVyeVNlbGVjdG9yIiwic2V0QXR0cmlidXRlIiwidGl0bGUiLCJwYWdlVGl0bGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzY3JvbGxUbyIsInRvZ2dsZUxhbmd1YWdlIiwidCIsImtleSIsIm1ldGEiLCJjcmVhdGVFbGVtZW50IiwibmFtZSIsImNvbnRlbnQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJhZGRIcmVmbGFuZ0xpbmsiLCJleGlzdGluZ0xpbmsiLCJsaW5rIiwicmVsIiwiaHJlZmxhbmciLCJ0b1N0cmluZyIsIl9jIiwidXNlTGFuZ3VhZ2UiLCJfczIiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsIkVycm9yIiwiJFJlZnJlc2hSZWckIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkxhbmd1YWdlQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIHRyYW5zbGF0aW9ucywgZ2V0VHJhbnNsYXRpb24sIFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnLi90cmFuc2xhdGlvbnMnO1xuXG50eXBlIExhbmd1YWdlQ29udGV4dFR5cGUgPSB7XG4gIGxhbmd1YWdlOiBMYW5ndWFnZTtcbiAgc2V0TGFuZ3VhZ2U6IChsYW5nOiBMYW5ndWFnZSkgPT4gdm9pZDtcbiAgdDogKGtleTogVHJhbnNsYXRpb25LZXkpID0+IHN0cmluZztcbiAgdG9nZ2xlTGFuZ3VhZ2U6ICgpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ291bnRyeTogc3RyaW5nO1xuICBzZXRTZWxlY3RlZENvdW50cnk6IChjb3VudHJ5OiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBMYW5ndWFnZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PExhbmd1YWdlQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBMYW5ndWFnZVByb3ZpZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3ROb2RlIH0pIHtcbiAgLy8gVHJ5IHRvIGdldCBsYW5ndWFnZSBmcm9tIFVSTCBwYXJhbXMsIGxvY2FsU3RvcmFnZSwgb3IgYnJvd3NlciBsYW5ndWFnZS9sb2NhdGlvbiwgZGVmYXVsdCB0byAnZW4nXG4gIGNvbnN0IGdldEluaXRpYWxMYW5ndWFnZSA9ICgpOiBMYW5ndWFnZSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyAxLiBGaXJzdCBjaGVjayBVUkwgcGFyYW1ldGVyIChleHBsaWNpdCB1c2VyIGNob2ljZSlcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBjb25zdCB1cmxMYW5nI
170D0gcGFyYW1zLmdldCgnbGFuZycpIGFzIExhbmd1YWdlO1xuICAgICAgaWYgKHVybExhbmcgJiYgKHVybExhbmcgPT09ICdlbicgfHwgdXJsTGFuZyA9PT0gJ2ZyJykpIHtcbiAgICAgICAgcmV0dXJuIHVybExhbmc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIDIuIFRoZW4gY2hlY2sgbG9jYWxTdG9yYWdlIChwcmV2aW91cyB1c2VyIHByZWZlcmVuY2UpXG4gICAgICBjb25zdCBzYXZlZExhbmd1YWdlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2t5bi1sYW5ndWFnZScpIGFzIExhbmd1YWdlO1xuICAgICAgaWYgKHNhdmVkTGFuZ3VhZ2UgJiYgKHNhdmVkTGFuZ3VhZ2UgPT09ICdlbicgfHwgc2F2ZWRMYW5ndWFnZSA9PT0gJ2ZyJykpIHtcbiAgICAgICAgcmV0dXJuIHNhdmVkTGFuZ3VhZ2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIDMuIENoZWNrIGJyb3dzZXIgbGFuZ3VhZ2UgZm9yIEZyZW5jaC1zcGVha2luZyBjb3VudHJpZXMvcmVnaW9uc1xuICAgICAgY29uc3QgYnJvd3NlckxhbmcgPSBuYXZpZ2F0b3IubGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgLy8gRnJlbmNoLXNwZWFraW5nIHJlZ2lvbnNcbiAgICAgIGNvbnN0IGZyZW5jaExhbmd1YWdlQ29kZXMgPSBbXG4gICAgICAgICdmcicsICAgICAgLy8gRnJlbmNoIChnZW5lcmljKVxuICAgICAgICAnZnItZnInLCAgIC8vIEZyYW5jZVxuICAgICAgICAnZnItY2EnLCAgIC8vIENhbmFkYSAoUXVlYmVjKVxuICAgICAgICAnZnItYmUnLCAgIC8vIEJlbGdpdW1cbiAgICAgICAgJ2ZyLWNoJywgICAvLyBTd2l0emVybGFuZFxuICAgICAgICAnZnItbHUnLCAgIC8vIEx1eGVtYm91cmdcbiAgICAgICAgJ2ZyLW1jJywgICAvLyBNb25hY29cbiAgICAgICAgJ2ZyLXNuJywgICAvLyBTZW5lZ2FsXG4gICAgICAgICdmci1jaScsICAgLy8gQ8O0dGUgZCdJdm9pcmVcbiAgICAgICAgJ2ZyLW1sJywgICAvLyBNYWxpXG4gICAgICAgICdmci1tYScsICAgLy8gTW9yb2Njb1xuICAgICAgICAnZnItZHonLCAgIC8vIEFsZ2VyaWFcbiAgICAgICAgJ2ZyLXRuJywgICAvLyBUdW5pc2lhXG4gICAgICBdO1xuICAgICAgXG4gICAgICBpZiAoZnJlbmNoTGFuZ3VhZ2VDb2Rlcy5zb21lKGNvZGUgPT4gYnJvd3Nlckxhbmcuc3RhcnRzV2l0aChjb2RlKSkpIHtcbiAgICAgICAgcmV0dXJuICdmcic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnZW4nO1xuICB9O1xuXG4gIGNvbnN0IFtsYW5ndWFnZSwgc2V0TGFuZ3VhZ2VTdGF0ZV0gPSB1c2VTdGF0ZTxMYW5ndWFnZT4oZ2V0SW5pdGlhbExhbmd1YWdlKTtcbiAgY29uc3QgW3NlbGVjdGVkQ291bnRyeSwgc2V0U2VsZWN0ZWRDb3VudHJ5U3RhdGVdID0gdXNlU3RhdGU8c3RyaW5nPigoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2t5bi1jb3VudHJ5JykgfHwgJ1VTJztcbiAgICB9XG4gICAgcmV0dXJuICdVUyc7XG4gIH0pO1xuXG4gIC8vIFVwZGF0ZSBjb3VudHJ5IHNlbGVjdGlvblxuICBjb25zdCBzZXRTZWxlY3RlZENvdW50cnkgPSAoY291bnRyeTogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRDb3VudHJ5U3RhdGUoY291bnRyeSk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgna3luLWNvdW50cnknLCBjb3VudHJ5KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVXBkYXRlIGxhbmd1YWdlIHdpdGggYWxsIG5lY2Vzc2FyeSBzaWRlIGVmZmVjdHNcbiAgY29uc3Qgc2V0TGFuZ3VhZ2UgPSAobGFuZzogTGFuZ3VhZ2UpID0+IHtcbiAgICAvLyBDYXB0dXJlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGJlZm9yZSBsYW5ndWFnZSBjaGFuZ2VcbiAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnNjcm9sbFkgOiAwO1xuICAgIFxuICAgIHNldExhbmd1YWdlU3RhdGUobGFuZyk7XG4gICAgXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyAxLiBTYXZlIHRvIGxvY2FsU3RvcmFnZVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2t5bi1sYW5ndWFnZScsIGxhbmcpO1xuICAgICAgXG4gICAgICAvLyAyLiBVcGRhdGUgVVJMIHBhcmFtZXRlciB3aXRob3V0IHJlbG9hZGluZyBwYWdlXG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdsYW5nJywgbGFuZyk7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCB1cmwpO1xuICAgICAgXG4gICAgICAvLyAzLiBVcGRhdGUgaHRtbCBsYW5nIGF0dHJpYnV0ZVxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSBsYW5nO1xuICAgICAgXG4gICAgICAvLyA0LiBVcGRhdGUgbWV0YSB0YWdzXG4gICAgICBjb25zdCBtZXRhRGVzY3JpcHRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJkZXNjcmlwdGlvblwiXScpO1xuICAgICAgaWYgKG1ldGFEZXNjcmlwdGlvbikge1xuICAgICAgICBtZXRhRGVzY3JpcHRpb24uc2V0QXR0cmlidXRlKCdjb250ZW50JywgdHJhbnNsYXRpb25zW2xhbmddLm1ldGFEZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIDUuIFVwZGF0ZSBkb2N1bWVudCB0aXRsZVxuICAgICAgZG9jdW1lbnQudGl0bGUgPSB0cmFuc2xhdGlvbnNbbGFuZ10ucGFnZVRpdGxlO1xuICAgICAgXG4gICAgICAvLyA2LiBSZXN0b3JlIHNjcm9sbCBwb3NpdGlvbiBhZnRlciBSZWFjdCByZS1yZW5kZXJzXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgc2Nyb2xsUG9zaXRpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFRvZ2dsZSBiZXR3ZWVuIEVuZ2xpc2ggYW5kIEZyZW5jaFxuICBjb25zdCB0b2dnbGVMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBzZXRMYW5ndWFnZShsYW5ndWFnZSA9PT0gJ2VuJyA/ICdmcicgOiAnZW4nKTtcbiAgfTtcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRyYW5zbGF0aW9uXG4gIGNvbnN0IHQgPSAoa2V5OiBUcmFuc2xhdGlvbktleSk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uKGxhbmd1YWdlLCBrZXkpO1xuICB9O1xuXG4gIC8vIFNldCBpbml0aWFsIEhUTUwgbGFuZyBhdHRyaWJ1dGUgYW5kIG1ldGEgaW5mb3JtYXRpb25cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNldCBIVE1MIGxhbmcgYXR0cmlidXRlXG4gICAgICBkb2
170N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IGxhbmd1YWdlO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgbWV0YSBkZXNjcmlwdGlvblxuICAgICAgY29uc3QgbWV0YURlc2NyaXB0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiZGVzY3JpcHRpb25cIl0nKTtcbiAgICAgIGlmIChtZXRhRGVzY3JpcHRpb24pIHtcbiAgICAgICAgbWV0YURlc2NyaXB0aW9uLnNldEF0dHJpYnV0ZSgnY29udGVudCcsIHRyYW5zbGF0aW9uc1tsYW5ndWFnZV0ubWV0YURlc2NyaXB0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBtZXRhIGRlc2NyaXB0aW9uIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgY29uc3QgbWV0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcbiAgICAgICAgbWV0YS5uYW1lID0gJ2Rlc2NyaXB0aW9uJztcbiAgICAgICAgbWV0YS5jb250ZW50ID0gdHJhbnNsYXRpb25zW2xhbmd1YWdlXS5tZXRhRGVzY3JpcHRpb247XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobWV0YSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkZCBocmVmbGFuZyBsaW5rcyBmb3IgU0VPXG4gICAgICBjb25zdCBhZGRIcmVmbGFuZ0xpbmsgPSAobGFuZzogTGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmbGFuZz1cIiR7bGFuZ31cIl1gKTtcbiAgICAgICAgaWYgKCFleGlzdGluZ0xpbmspIHtcbiAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgIGxpbmsucmVsID0gJ2FsdGVybmF0ZSc7XG4gICAgICAgICAgbGluay5ocmVmbGFuZyA9IGxhbmc7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2xhbmcnLCBsYW5nKTtcbiAgICAgICAgICBsaW5rLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBkb2
170N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBBZGQgbGlua3MgZm9yIGJvdGggbGFuZ3VhZ2VzXG4gICAgICBhZGRIcmVmbGFuZ0xpbmsoJ2VuJyk7XG4gICAgICBhZGRIcmVmbGFuZ0xpbmsoJ2ZyJyk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBkb2N1bWVudCB0aXRsZVxuICAgICAgZG9jdW1lbnQudGl0bGUgPSB0cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdLnBhZ2VUaXRsZTtcbiAgICB9XG4gIH0sIFtsYW5ndWFnZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPExhbmd1YWdlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyBsYW5ndWFnZSwgc2V0TGFuZ3VhZ2UsIHQsIHRvZ2dsZUxhbmd1YWdlLCBzZWxlY3RlZENvdW50cnksIHNldFNlbGVjdGVkQ291bnRyeSB9fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0xhbmd1YWdlQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxhbmd1YWdlKCk6IExhbmd1YWdlQ29udGV4dFR5cGUge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChMYW5ndWFnZUNvbnRleHQpO1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VMYW5ndWFnZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTGFuZ3VhZ2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufSJdLCJmaWxlIjoiL2hvbWUvcnVubmVyL3dvcmtzcGFjZS9jbGllbnQvc3JjL2xpYi9MYW5ndWFnZUNvbnRleHQudHN4In0=
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.