PageSourceSearch

https://kyn-care.com/src/components/IngredientHighlight.tsx

js kyn-care.com collected 2026-10-08 11:37:11 UTC 51,386 bytes, 563 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/IngredientHighlight.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/components/IngredientHighlight.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"]; const useRef = __vite__cjsImport3_react["useRef"];
19import { ChevronRight } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=9ce4103e";
20import { useLanguage } from "/src/lib/LanguageContext.tsx";
21import cocoaImage from "/@fs/home/runner/workspace/attached_assets/cocoa_husks_colorful.png?import";
22import sheaImage from "/@fs/home/runner/workspace/attached_assets/shea_butter_kyn.jpg?import";
23import arganImage from "/@fs/home/runner/workspace/attached_assets/argan_oil_kyn.jpg?import";
24import niacinamideImage from "/@fs/home/runner/workspace/attached_assets/niacinamide_powder_kyn.png?import";
25import hyaluronicImage from "/@fs/home/runner/workspace/attached_assets/hyaluronic_acid_kyn.png?import";
26import kojicImage from "/@fs/home/runner/workspace/attached_assets/generated_images/premium_kojic_acid_crystals.png?import";
27export default function IngredientHighlight() {
28  _s();
29  const { language } = useLanguage();
30  const scrollRef = useRef(null);
31  const sectionRef = useRef(null);
32  const [canScrollRight, setCanScrollRight] = useState(true);
33  const [currentDot, setCurrentDot] = useState(0);
34  const [isMobile, setIsMobile] = useState(false);
35  const [showColor, setShowColor] = useState(false);
36  useEffect(() => {
37    const checkMobile = () => setIsMobile(window.innerWidth < 768);
38    checkMobile();
39    window.addEventListener("resize", checkMobile);
40    return () => window.removeEventListener("resize", checkMobile);
41  }, []);
42  useEffect(() => {
43    let colorTimeout = null;
44    const observer = new IntersectionObserver(
45      (entries) => {
46        entries.forEach((entry) => {
47          if (entry.isIntersecting) {
48            colorTimeout = setTimeout(() => {
49              setShowColor(true);
50            }, 1500);
51          } else {
52            if (colorTimeout) {
53              clearTimeout(colorTimeout);
54            }
55            setShowColor(false);
56          }
57        });
58      },
59      { threshold: 0.3 }
60    );
61    if (sectionRef.current) {
62      observer.observe(sectionRef.current);
63    }
64    return () => {
65      if (colorTimeout) clearTimeout(colorTimeout);
66      observer.disconnect();
67    };
68  }, []);
69  const title = language === "fr" ? "NOS INGRÉDIENTS CLÉS" : "OUR KEY INGREDIENTS";
70  const subtitle = language === "fr" ? "Chaque ingrédient est sélectionné avec rigueur pour sa performance, sa qualité et son sourcing responsable." : "Every ingredient in our formulations is chosen with care, high quality, and ethically sourced.";
71  const ingredients = language === "fr" ? [
72    {
73      name: "COSSE DE CABOSSE",
74      description: "Riche en polyphénols antioxydants. Apaise, protège et unifie le teint. Upcyclée en Côte d'Ivoire.",
75      image: cocoaImage
76    },
77    {
78      name: "BEURRE DE KARITÉ",
79      description: "Nourrit en profondeur avec 5 acides gras essentiels. Répare la barrière cutanée. Issu de filières durables.",
80      image: sheaImage
81    },
82    {
83      name: "HUILE D'ARGAN",
84      description: "Concentrée en vitamine E et omégas. Renforce, protège et illumine la peau.",
85      image: arganImage
86    },
87    {
88      name: "NIACINAMIDE",
89      description: "Resserre les pores, lisse le grain de peau et atténue les rougeurs. Actif polyvalent.",
90      image: niacinamideImage
91    },
92    {
93      name: "ACIDE HYALURONIQUE",
94      description: "Retient 1000x son poids en eau. Hydratation intense et effet repulpant immédiat.",
95      image: hyaluronicImage
96    },
97    {
98      name: "ACIDE KOJIQUE",
99      description: "Inhibe la production de mélanine. Estompe les taches et ravive l'éclat naturel.",
100      image: kojicImage
101    }
102  ] : [
103    {
104      name: "COCOA POD HUSK",
105      description: "Rich in antioxidant polyphenols. Soothes, protects, and evens skin tone. Upcycled in Côte d'Ivoire.",
106      image: cocoaImage
107    },
108    {
109      name: "SHEA BUTTER",
110      description: "Deep nourishment with 5 essential fatty acids. Repairs the skin barrier. Sustainably sourced.",
111      image: sheaImage
112    },
113    {
114      name: "ARGAN OIL",
115      description: "Concentrated vitamin E and omegas. Strengthens, protects, and brightens skin.",
116      image: arganImage
117    },
118    {
119      name: "NIACINAMIDE",
120      description: "Minimizes pores, smooths texture, and reduces redness. A multitasking powerhouse.",
121      image: niacinamideImage
122    },
123    {
124      name: "HYALURONIC ACID",
125      description: "Holds 1000x its weight in water. Intense hydration with instant plumping effect.",
126      image: hyaluronicImage
127    },
128    {
129      name: "KOJIC ACID",
130      description: "Inhibits melanin production. Fades dark spots and restores natural radiance.",
131      image: kojicImage
132    }
133  ];
134  const handleScroll = () => {
135    if (scrollRef.current) {
136      const { scrollLeft, scrollWidth, clientWidth } = scrollRef.current;
137      setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 10);
138      const cardWidth = scrollRef.current.scrollWidth / ingredients.length;
139      const itemsPerView = isMobile ? 2 : 3;
140      const totalDots2 = Math.ceil(ingredients.length / itemsPerView);
141      const newDot = Math.round(scrollLeft / (cardWidth * itemsPerView));
142      setCurrentDot(Math.min(newDot, totalDots2 - 1));
143    }
144  };
145  const totalDots = Math.ceil(ingredients.length / (isMobile ? 2 : 3));
146  const scrollToDot = (index) => {
147    if (scrollRef.current) {
148      const cardWidth = scrollRef.current.scrollWidth / ingredients.length;
149      const itemsPerView = isMobile ? 2 : 3;
150      scrollRef.current.scrollTo({ left: index * cardWidth * itemsPerView, behavior: "smooth" });
151    }
152  };
153  useEffect(() => {
154    handleScroll();
155  }, []);
156  const scrollRight = () => {
157    if (scrollRef.current) {
158      const cardWidth = scrollRef.current.scrollWidth / ingredients.length;
159      scrollRef.current.scrollBy({ left: cardWidth, behavior: "smooth" });
160    }
161  };
162  return /* @__PURE__ */ jsxDEV(
163    "section",
164    {
165      ref: sectionRef,
166      className: "pt-12 pb-16 md:pt-16 md:pb-20",
167      style: { backgroundColor: "#F5F5F5" },
168      "data-testid": "section-ingredients",
169      children: [
170        /* @__PURE__ */ jsxDEV("div", { className: "ingredients-container", children: [
171          /* @__PURE__ */ jsxDEV("div", { className: "ingredients-header", children: [
172            /* @__PURE__ */ jsxDEV(
173              "h2",
174              {
175                className: "ingredients-title",
176                style: {
177                  color: "#1A1A1A",
178                  fontFamily: "Helvetica, Arial, sans-serif",
179                  fontWeight: 400,
180                  letterSpacing: "2px",
181                  fontSize: "20px",
182                  textTransform: "uppercase"
183                },
184                children: title
185              },
186              void 0,
187              false,
188              {
189                fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
190                lineNumber: 176,
191                columnNumber: 11
192              },
193              this
194            ),
195            /* @__PURE__ */ jsxDEV(
196              "p",
197              {
198                className: "ingredients-desc",
199                style: {
200                  fontFamily: "Helvetica, Arial, sans-serif",
201                  fontWeight: 300,
202                  color: "#666666",
203                  lineHeight: 1.7,
204                  letterSpacing: "0.2px",
205                  fontSize: "15px"
206                },
207                children: subtitle
208              },
209              void 0,
210              false,
211              {
212                fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
213                lineNumber: 189,
214                columnNumber: 11
215              },
216              this
217            )
218          ] }, void 0, true, {
219            fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
220            lineNumber: 175,
221            columnNumber: 9
222          }, this),
223          /* @__PURE__ */ jsxDEV("div", { className: "ingredients-wrapper", children: [
224            /* @__PURE__ */ jsxDEV(
225              "div",
226              {
227                ref: scrollRef,
228                className: "ingredients-carousel",
229                onScroll: handleScroll,
230                children: ingredients.map(
231                  (ingredient, index) => /* @__PURE__ */ jsxDEV(
232                    "div",
233                    {
234                      className: "ingredients-card group",
235                      "data-testid": `ingredient-${index}`,
236                      children: [
237                        /* @__PURE__ */ jsxDEV(
238                          "div",
239                          {
240                            className: "aspect-square mb-4 overflow-hidden zoom-container",
241                            style: { backgroundColor: "#EAEAE8" },
242                            children: /* @__PURE__ */ jsxDEV(
243                              "img",
244                              {
245                                src: ingredient.image,
246                                alt: `${ingredient.name} - KYN skincare ingredient`,
247                                loading: "lazy",
248                                decoding: "async",
249                                className: `w-full h-full object-cover zoom-image transition-all duration-1000 ${showColor ? "grayscale-0" : "grayscale"}`
250                              },
251                              void 0,
252                              false,
253                              {
254                                fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
255                                lineNumber: 222,
256                                columnNumber: 17
257                              },
258                              this
259                            )
260                          },
261                          void 0,
262                          false,
263                          {
264                            fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
265                            lineNumber: 218,
266                            columnNumber: 15
267                          },
268                          this
269                        ),
270                        /* @__PURE__ */ jsxDEV(
271                          "h3",
272                          {
273                            className: "text-[13px] md:text-[14px] lg:text-[15px] uppercase tracking-[1.5px] mb-2",
274                            style: {
275                              fontFamily: "Helvetica, Arial, sans-serif",
276                              fontWeight: 500,
277                              color: "#1A1A1A",
278                              letterSpacing: "1.5px"
279                            },
280                            children: ingredient.name
281                          },
282                          void 0,
283                          false,
284                          {
285                            fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
286                            lineNumber: 230,
287                            columnNumber: 15
288                          },
289                          this
290                        ),
291                        /* @__PURE__ */ jsxDEV(
292                          "p",
293                          {
294                            className: "text-[12px] md:text-[13px]",
295                            style: {
296                              fontFamily: "Helvetica, Arial, sans-serif",
297                              fontWeight: 300,
298                              color: "#666666",
299                              lineHeight: 1.5
300                            },
301                            children: ingredient.description
302                          },
303                          void 0,
304                          false,
305                          {
306                            fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
307                            lineNumber: 241,
308                            columnNumber: 15
309                          },
310                          this
311                        )
312                      ]
313                    },
314                    index,
315                    true,
316                    {
317                      fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
318                      lineNumber: 213,
319                      columnNumber: 13
320                    },
321                    this
322                  )
323                )
324              },
325              void 0,
326              false,
327              {
328                fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
329                lineNumber: 207,
330                columnNumber: 9
331              },
332              this
333            ),
334            canScrollRight && /* @__PURE__ */ jsxDEV(
335              "button",
336              {
337                onClick: scrollRight,
338                className: "carousel-next",
339                "aria-label": "Scroll right",
340                "data-testid": "button-ingredients-right",
341                children: /* @__PURE__ */ jsxDEV(ChevronRight, { size: 20, className: "text-gray-800" }, void 0, false, {
342                  fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
343                  lineNumber: 264,
344                  columnNumber: 15
345                }, this)
346              },
347              void 0,
348              false,
349              {
350                fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
351                lineNumber: 258,
352                columnNumber: 11
353              },
354              this
355            )
356          ] }, void 0, true, {
357            fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
358            lineNumber: 205,
359            columnNumber: 9
360          }, this)
361        ] }, void 0, true, {
362          fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
363          lineNumber: 173,
364          columnNumber: 7
365        }, this),
366        /* @__PURE__ */ jsxDEV("div", { className: "ingredient-dots-container flex md:hidden justify-center mt-4", style: { gap: "6px" }, children: Array.from({ length: totalDots }).map(
367          (_, index) => /* @__PURE__ */ jsxDEV(
368            "button",
369            {
370              onClick: () => scrollToDot(index),
371              className: "ingredient-dot",
372              style: {
373                width: currentDot === index ? "14px" : "6px",
374                height: "6px",
375                minWidth: currentDot === index ? "14px" : "6px",
376                minHeight: "6px",
377                maxWidth: currentDot === index ? "14px" : "6px",
378                maxHeight: "6px",
379                borderRadius: "3px",
380                backgroundColor: currentDot === index ? "#1A1A1A" : "#D1D5DB",
381                border: "none",
382                padding: 0,
383                margin: 0,
384                transition: "all 0.3s ease"
385              },
386              "aria-label": `Go to slide ${index + 1}`,
387              "data-testid": `dot-indicator-${index}`
388            },
389            index,
390            false,
391            {
392              fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
393              lineNumber: 273,
394              columnNumber: 9
395            },
396            this
397          )
398        ) }, void 0, false, {
399          fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
400          lineNumber: 271,
401          columnNumber: 7
402        }, this),
403        /* @__PURE__ */ jsxDEV("style", { children: `
404        /* Force tiny dots on mobile */
405        .ingredient-dot {
406          width: 6px !important;
407          height: 6px !important;
408          min-width: 6px !important;
409          min-height: 6px !important;
410          max-width: 6px !important;
411          max-height: 6px !important;
412          border-radius: 3px !important;
413          padding: 0 !important;
414          margin: 0 !important;
415          border: none !important;
416        }
417        .ingredient-dots-container {
418          gap: 6px !important;
419        }
420        
421        /* Shared Parent Container */
422        .ingredients-container {
423          max-width: 1100px;
424          margin: 0 auto;
425          padding: 0 32px;
426          box-sizing: border-box;
427        }
428
429        /* Header styles - no extra padding */
430        .ingredients-header {
431          display: flex;
432          justify-content: space-between;
433          align-items: baseline;
434          width: 100%;
435          margin-bottom: 32px;
436        }
437        .ingredients-title {
438          margin: 0;
439          text-align: left;
440        }
441        .ingredients-desc {
442          margin: 0;
443          text-align: right;
444          max-width: 380px;
445        }
446
447        /* Carousel wrapper */
448        .ingredients-wrapper {
449          position: relative;
450        }
451
452        /* Carousel styles - no extra padding, inherits from parent */
453        .ingredients-carousel {
454          overflow-x: auto;
455          display: flex;
456          gap: 20px;
457          scroll-snap-type: x mandatory;
458          -webkit-overflow-scrolling: touch;
459          scrollbar-width: none;
460          -ms-overflow-style: none;
461        }
462        .ingredients-carousel::-webkit-scrollbar {
463          display: none;
464        }
465
466        /* Card styles - 3 full cards + partial 4th */
467        .ingredients-card {
468          flex: 0 0 calc((100% - 40px) / 3);
469          scroll-snap-align: start;
470        }
471
472        /* Arrow button */
473        .carousel-next {
474          position: absolute;
475          right: 12px;
476          top: 40%;
477          transform: translateY(-50%);
478          background: rgba(255, 255, 255, 0.9);
479          border: none;
480          padding: 8px;
481          border-radius: 50%;
482          box-shadow: 0 2px 8px rgba(0,0,0,0.1);
483          cursor: pointer;
484          display: flex;
485          align-items: center;
486          justify-content: center;
487          transition: all 0.2s;
488          z-index: 10;
489        }
490        .carousel-next:hover {
491          background: white;
492        }
493
494        /* Tablet: 2 cards + partial 3rd */
495        @media (max-width: 1024px) {
496          .ingredients-card {
497            flex: 0 0 calc((100% - 20px) / 2);
498          }
499        }
500
501        /* Mobile styles - 2 cards + partial 3rd */
502        @media (max-width: 768px) {
503          .ingredients-container {
504            padding: 0 16px;
505          }
506          .ingredients-header {
507            flex-direction: column;
508            gap: 12px;
509            align-items: flex-start;
510          }
511          .ingredients-desc {
512            text-align: left;
513            max-width: 100%;
514          }
515          .ingredients-carousel {
516            gap: 12px;
517          }
518          .ingredients-card {
519            flex: 0 0 calc((100% - 24px) / 2);
520          }
521          .carousel-next {
522            display: none;
523          }
524        }
525      ` }, void 0, false, {
526          fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
527          lineNumber: 298,
528          columnNumber: 7
529        }, this)
530      ]
531    },
532    void 0,
533    true,
534    {
535      fileName: "/home/runner/workspace/client/src/components/IngredientHighlight.tsx",
536      lineNumber: 166,
537      columnNumber: 5
538    },
539    this
540  );
541}
542_s(IngredientHighlight, "ThOikLbLjuMVlsot8ZCNtLsjTj8=", false, function() {
543  return [useLanguage];
544});
545_c = IngredientHighlight;
546var _c;
547$RefreshReg$(_c, "IngredientHighlight");
548if (import.meta.hot && !inWebWorker) {
549  window.$RefreshReg$ = prevRefreshReg;
550  window.$RefreshSig$ = prevRefreshSig;
551}
552if (import.meta.hot && !inWebWorker) {
553  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
554    RefreshRuntime.registerExportsForReactRefresh("/home/runner/workspace/client/src/components/IngredientHighlight.tsx", currentExports);
555    import.meta.hot.accept((nextExports) => {
556      if (!nextExports) return;
557      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/home/runner/workspace/client/src/components/IngredientHighlight.tsx", currentExports, nextExports);
558      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
559    });
560  });
561}
562
563//# sourceMappingURL=data:application/json;base64,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BQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxXQUFSO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUEwSEU7QUFBQTtBQUFBO0FBQUEsSUE5UEo7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBK1BBO0FBRUo7QUFBQ3BELEdBNVp1QkQscUJBQW1CO0FBQUEsVUFDcEJQLFdBQVc7QUFBQTtBQUFBMkYsS0FEVnBGO0FBQW1CLElBQUFvRjtBQUFBQyxhQUFBRCxJQUFBIiwibmFtZXMiOlsidXNlRWZmZWN0IiwiQ2hldnJvblJpZ2h0IiwidXNlTGFuZ3VhZ2UiLCJjb2NvYUltYWdlIiwic2hlYUltYWdlIiwiYXJnYW5JbWFnZSIsIm5pYWNpbmFtaWRlSW1hZ2UiLCJoeWFsdXJvbmljSW1hZ2UiLCJrb2ppY0ltYWdlIiwiSW5ncmVkaWVudEhpZ2hsaWdodCIsIl9zIiwibGFuZ3VhZ2UiLCJzY3JvbGxSZWYiLCJ1c2VSZWYiLCJzZWN0aW9uUmVmIiwiY2FuU2Nyb2xsUmlnaHQiLCJzZXRDYW5TY3JvbGxSaWdodCIsInVzZVN0YXRlIiwiY3VycmVudERvdCIsInNldEN1cnJlbnREb3QiLCJpc01vYmlsZSIsInNldElzTW9iaWxlIiwic2hvd0NvbG9yIiwic2V0U2hvd0NvbG9yIiwiY2hlY2tNb2JpbGUiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb2xvclRpbWVvdXQiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImZvckVhY2giLCJlbnRyeSIsImlzSW50ZXJzZWN0aW5nIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInRocmVzaG9sZCIsImN1cnJlbnQiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsInRpdGxlIiwic3VidGl0bGUiLCJpbmdyZWRpZW50cyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImltYWdlIiwiaGFuZGxlU2Nyb2xsIiwic2Nyb2xsTGVmdCIsInNjcm9sbFdpZHR
563oIiwiY2xpZW50V2lkdGgiLCJjYXJkV2lkdGgiLCJsZW5ndGgiLCJpdGVtc1BlclZpZXciLCJ0b3RhbERvdHMiLCJNYXRoIiwiY2VpbCIsIm5ld0RvdCIsInJvdW5kIiwibWluIiwic2Nyb2xsVG9Eb3QiLCJpbmRleCIsInNjcm9sbFRvIiwibGVmdCIsImJlaGF2aW9yIiwic2Nyb2xsUmlnaHQiLCJzY3JvbGxCeSIsImJhY2tncm91bmRDb2xvciIsImNvbG9yIiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJsZXR0ZXJTcGFjaW5nIiwiZm9udFNpemUiLCJ0ZXh0VHJhbnNmb3JtIiwibGluZUhlaWdodCIsIm1hcCIsImluZ3JlZGllbnQiLCJnYXAiLCJBcnJheSIsImZyb20iLCJfIiwid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyIiwicGFkZGluZyIsIm1hcmdpbiIsInRyYW5zaXRpb24iLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJJbmdyZWRpZW50SGlnaGxpZ2h0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlTGFuZ3VhZ2UgfSBmcm9tICdAL2xpYi9MYW5ndWFnZUNvbnRleHQnO1xuaW1wb3J0IGNvY29hSW1hZ2UgZnJvbSAnQGFzc2V0cy9jb2NvYV9odXNrc19jb2xvcmZ1bC5wbmcnO1xuaW1wb3J0IHNoZWFJbWFnZSBmcm9tICdAYXNzZXRzL3NoZWFfYnV0dGVyX2t5bi5qcGcnO1xuaW1wb3J0IGFyZ2FuSW1hZ2UgZnJvbSAnQGFzc2V0cy9hcmdhbl9vaWxfa3luLmpwZyc7XG5pbXBvcnQgbmlhY2luYW1pZGVJbWFnZSBmcm9tICdAYXNzZXRzL25pYWNpbmFtaWRlX3Bvd2Rlcl9reW4ucG5nJztcbmltcG9ydCBoeWFsdXJvbmljSW1hZ2UgZnJvbSAnQGFzc2V0cy9oeWFsdXJvbmljX2FjaWRfa3luLnBuZyc7XG5pbXBvcnQga29qaWNJbWFnZSBmcm9tICdAYXNzZXRzL2dlbmVyYXRlZF9pbWFnZXMvcHJlbWl1bV9rb2ppY19hY2lkX2NyeXN0YWxzLnBuZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEluZ3JlZGllbnRIaWdobGlnaHQoKSB7XG4gIGNvbnN0IHsgbGFuZ3VhZ2UgfSA9IHVzZUxhbmd1YWdlKCk7XG4gIGNvbnN0IHNjcm9sbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlY3Rpb25SZWYgPSB1c2VSZWY8SFRNTEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbY2FuU2Nyb2xsUmlnaHQsIHNldENhblNjcm9sbFJpZ2h0XSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbY3VycmVudERvdCwgc2V0Q3VycmVudERvdF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2lzTW9iaWxlLCBzZXRJc01vYmlsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93Q29sb3IsIHNldFNob3dDb2xvcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjaGVja01vYmlsZSA9ICgpID0+IHNldElzTW9iaWxlKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4KTtcbiAgICBjaGVja01vYmlsZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja01vYmlsZSk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja01vYmlsZSk7XG4gIH0sIFtdKTtcblxuICAvLyBSZXZlYWwgY29sb3IgYWZ0ZXIgMS41IHNlY29uZHMgb2Ygc2VjdGlvbiBiZWluZyBpbiB2aWV3LCByZXNldCB3aGVuIGxlYXZpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY29sb3JUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgLy8gU2VjdGlvbiBpbiB2aWV3IC0gc3RhcnQgdGltZXIgdG8gc2hvdyBjb2xvclxuICAgICAgICAgICAgY29sb3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHNldFNob3dDb2xvcih0cnVlKTtcbiAgICAgICAgICAgIH0sIDE1MDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZWN0aW9uIGxlZnQgdmlldyAtIHJlc2V0IHRvIGdyYXlzY2FsZVxuICAgICAgICAgICAgaWYgKGNvbG9yVGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoY29sb3JUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFNob3dDb2xvcihmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4zIH1cbiAgICApO1xuXG4gICAgaWYgKHNlY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzZWN0aW9uUmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY29sb3JUaW1lb3V0KSBjbGVhclRpbWVvdXQoY29sb3JUaW1lb3V0KTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgdGl0bGUgPSBsYW5ndWFnZSA9PT0gJ2ZyJyA/ICdOT1MgSU5HUsOJRElFTlRTIENMw4lTJyA6ICdPVVIgS0VZIElOR1JFRElFTlRTJztcbiAgY29uc3Qgc3VidGl0bGUgPSBsYW5ndWFnZSA9PT0gJ2ZyJyBcbiAgICA/ICdDaGFxdWUgaW5ncsOpZGllbnQgZXN0IHPDqWxlY3Rpb25uw6kgYXZlYyByaWd1ZXVyIHBvdXIgc2EgcGVyZm9ybWFuY2UsIHNhIHF1YWxpdMOpIGV0IHNvbiBzb3VyY2luZyByZXNwb25zYWJsZS4nXG4gICAgOiAnRXZlcnkgaW5ncmVkaWVudCBpbiBvdXIgZm9ybXVsYXRpb25zIGlzIGNob3NlbiB3aXRoIGNhcmUsIGhpZ2ggcXVhbGl0eSwgYW5kIGV0aGljYWxseSBzb3VyY2VkLic7XG5cbiAgY29uc3QgaW5ncmVkaWVudHMgPSBsYW5ndWFnZSA9PT0gJ2ZyJyA/IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ09TU0UgREUgQ0FCT1NTRScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1JpY2hlIGVuIHBvbHlwaMOpbm9scyBhbnRpb3h5ZGFudHMuIEFwYWlzZSwgcHJvdMOoZ2UgZXQgdW5pZmllIGxlIHRlaW50LiBVcGN5Y2zDqWUgZW4gQ8O0dGUgZFxcJ0l2b2lyZS4nLFxuICAgICAgaW1hZ2U6IGNvY29hSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdCRVVSUkUgREUgS0FSSVTDiScsXG4gICAgICBkZXNjcmlwdGlvbjogJ05vdXJyaXQgZW4gcHJvZm9uZGV1ciBhdmVjIDUgYWNpZGVzIGdyYXMgZXNzZW50aWVscy4gUsOpcGFyZSBsYSBiYXJyacOocmUgY3V0YW7DqWUuIElzc3UgZGUgZmlsacOocmVzIGR1cmFibGVzLicsXG4gICAgICBpbWFnZTogc2hlYUltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSFVJTEUgRFxcJ0FSR0FOJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ29uY2VudHLDqWUgZW4gdml0YW1pbmUgRSBldCBvbcOpZ2FzLiBSZW5mb3JjZSwgcHJvdMOoZ2UgZXQgaWxsdW1pbmUgbGEgcGVhdS4nLFxuICAgICAgaW1hZ2U6IGFyZ2FuSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdOSUFDSU5BTUlERScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1Jlc3NlcnJlIGxlcyBwb3JlcywgbGlzc2UgbGUgZ3JhaW4gZGUgcGVhdSBldCBhdHTDqW51ZSBsZXMgcm91Z2V1cnMuIEFjdGlmIHBvbHl2YWxlbnQuJyxcbiAgICAgIGltYWdlOiBuaWFjaW5hbWlkZUltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnQUNJREUgSFlBTFVST05JUVVFJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmV0aWVudCAxMDAweCBzb24gcG9pZHMgZW4gZWF1LiBIeWRyYXRhdGlvbiBpbnRlbnNlIGV0IGVmZmV0IHJlcHVscGFudCBpbW3DqWRpYXQuJyxcbiAgICAgIGltYWdlOiBoeWFsdXJvbmljSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdBQ0lERSBLT0pJUVVFJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW5oaWJlIGxhIHByb2R1Y3Rpb24gZGUgbcOpbGFuaW5lLiBFc3RvbXBlIGxlcyB0YWNoZXMgZXQgcmF2aXZlIGxcXCfDqWNsYXQgbmF0dXJlbC4nLFxuICAgICAgaW1hZ2U6IGtvamljSW1hZ2VcbiAgICB9XG4gIF0gOiBbXG4gICAge1xuICAgICAgbmFtZTogJ0NPQ09BIFBPRCBIVVNLJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUmljaCBpbiBhbnRpb3hpZGFudCBwb2x5cGhlbm9scy4gU29vdGhlcywgcHJvdGVjdHMsIGFuZCBldmVucyBza2luIHRvbmUuIFVwY3ljbGVkIGluIEPDtHRlIGRcXCdJdm9pcmUuJyxcbiAgICAgIGltYWdlOiBjb2NvYUltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnU0hFQSBCVVRURVInLFxuICAgICAgZGVzY3JpcHRpb246ICdEZWVwIG5vdXJpc2htZW50IHdpdGggNSBlc3NlbnRpYWwgZmF0dHkgYWNpZHMuIFJlcGFpcnMgdGhlIHNraW4gYmFycmllci4gU3VzdGFpbmFibHkgc291cmNlZC4nLFxuICAgICAgaW1hZ2U6IHNoZWFJbWFnZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0FSR0FOIE9JTCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NvbmNlbnRyYXRlZCB2aXRhbWluIEUgYW5kIG9tZWdhcy4gU3RyZW5ndGhlbnMsIHByb3RlY3RzLCBhbmQgYnJpZ2h0ZW5zIHNraW4uJyxcbiAgICAgIGltYWdlOiBhcmdhbkltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTklBQ0lOQU1JREUnLFxuICAgICAgZGVzY3JpcHRpb246ICdNaW5pbWl6ZXMgcG9yZXMsIHNtb290aHMgdGV4dHVyZSwgYW5kIHJlZHVjZXMgcmVkbmVzcy4gQSBtdWx0aXRhc2tpbmcgcG93ZXJob3VzZS4nLFxuICAgICAgaW1hZ2U6IG5pYWNpbmFtaWRlSW1hZ2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdIWUFMVVJPTklDIEFDSUQnLFxuICAgICAgZGVzY3JpcHRpb246ICdIb2xkcyAxMDAweCBpdHMgd2VpZ2h0IGluIHdhdGVyLiBJbnRlbnNlIGh5ZHJhdGlvbiB3aXRoIGluc3RhbnQgcGx1bXBpbmcgZWZmZWN0LicsXG4gICAgICBpbWFnZTogaHlhbHVyb25pY0ltYWdlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnS09KSUMgQUNJRCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0luaGliaXRzIG1lbGFuaW4gcHJvZHVjdGlvbi4gRmFkZXMgZGFyayBzcG9
5630cyBhbmQgcmVzdG9yZXMgbmF0dXJhbCByYWRpYW5jZS4nLFxuICAgICAgaW1hZ2U6IGtvamljSW1hZ2VcbiAgICB9XG4gIF07XG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgIGlmIChzY3JvbGxSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggfSA9IHNjcm9sbFJlZi5jdXJyZW50O1xuICAgICAgc2V0Q2FuU2Nyb2xsUmlnaHQoc2Nyb2xsTGVmdCArIGNsaWVudFdpZHRoIDwgc2Nyb2xsV2lkdGggLSAxMCk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBkb3QgaW5kaWNhdG9yXG4gICAgICBjb25zdCBjYXJkV2lkdGggPSBzY3JvbGxSZWYuY3VycmVudC5zY3JvbGxXaWR0aCAvIGluZ3JlZGllbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGl0ZW1zUGVyVmlldyA9IGlzTW9iaWxlID8gMiA6IDM7XG4gICAgICBjb25zdCB0b3RhbERvdHMgPSBNYXRoLmNlaWwoaW5ncmVkaWVudHMubGVuZ3RoIC8gaXRlbXNQZXJWaWV3KTtcbiAgICAgIGNvbnN0IG5ld0RvdCA9IE1hdGgucm91bmQoc2Nyb2xsTGVmdCAvIChjYXJkV2lkdGggKiBpdGVtc1BlclZpZXcpKTtcbiAgICAgIHNldEN1cnJlbnREb3QoTWF0aC5taW4obmV3RG90LCB0b3RhbERvdHMgLSAxKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRvdGFsRG90cyA9IE1hdGguY2VpbChpbmdyZWRpZW50cy5sZW5ndGggLyAoaXNNb2JpbGUgPyAyIDogMykpO1xuXG4gIGNvbnN0IHNjcm9sbFRvRG90ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoc2Nyb2xsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGNhcmRXaWR0aCA9IHNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbFdpZHR
563oIC8gaW5ncmVkaWVudHMubGVuZ3RoO1xuICAgICAgY29uc3QgaXRlbXNQZXJWaWV3ID0gaXNNb2JpbGUgPyAyIDogMztcbiAgICAgIHNjcm9sbFJlZi5jdXJyZW50LnNjcm9sbFRvKHsgbGVmdDogaW5kZXggKiBjYXJkV2lkdGggKiBpdGVtc1BlclZpZXcsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYW5kbGVTY3JvbGwoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHNjcm9sbFJpZ2h0ID0gKCkgPT4ge1xuICAgIGlmIChzY3JvbGxSZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgY2FyZFdpZHRoID0gc2Nyb2xsUmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggLyBpbmdyZWRpZW50cy5sZW5ndGg7XG4gICAgICBzY3JvbGxSZWYuY3VycmVudC5zY3JvbGxCeSh7IGxlZnQ6IGNhcmRXaWR0aCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIFxuICAgICAgcmVmPXtzZWN0aW9uUmVmfVxuICAgICAgY2xhc3NOYW1lPVwicHQtMTIgcGItMTYgbWQ6cHQtMTYgbWQ6cGItMjBcIiBcbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogJyNGNUY1RjUnIH19IFxuICAgICAgZGF0YS10ZXN0aWQ9XCJzZWN0aW9uLWluZ3JlZGllbnRzXCJcbiAgICA+XG4gICAgICB7LyogU2hhcmVkIFBhcmVudCBDb250YWluZXIgZm9yIEhlYWRlciBhbmQgQ2Fyb3VzZWwgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLWNvbnRhaW5lclwiPlxuICAgICAgICB7LyogSGVhZGVyIFJvdyAtIFR3byBDb2x1bW4gTGF5b3V0ICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLWhlYWRlclwiPlxuICAgICAgICAgIDxoMiBcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLXRpdGxlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICBjb2xvcjogJyMxQTFBMUEnLCBcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnMjBweCcsXG4gICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxwIFxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5ncmVkaWVudHMtZGVzY1wiXG4gICAgICAgICAgICBzdHlsZT17eyBcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgY29sb3I6ICcjNjY2NjY2JyxcbiAgICAgICAgICAgICAgbGluZUhlaWdodDogMS43LFxuICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiAnMC4ycHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZTogJzE1cHgnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzdWJ0aXRsZX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBDYXJvdXNlbCBXcmFwcGVyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLXdyYXBwZXJcIj5cbiAgICAgICAgey8qIFNjcm9sbGFibGUgQ2Fyb3VzZWwgKi99XG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgcmVmPXtzY3JvbGxSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaW5ncmVkaWVudHMtY2Fyb3VzZWxcIlxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGx9XG4gICAgICAgID5cbiAgICAgICAgICB7aW5ncmVkaWVudHMubWFwKChpbmdyZWRpZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImluZ3JlZGllbnRzLWNhcmQgZ3JvdXBcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YGluZ3JlZGllbnQtJHtpbmRleH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFzcGVjdC1zcXVhcmUgbWItNCBvdmVyZmxvdy1oaWRkZW4gem9vbS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogJyNFQUVBRTgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nIFxuICAgICAgICAgICAgICAgICAgc3JjPXtpbmdyZWRpZW50LmltYWdlfVxuICAgICAgICAgICAgICAgICAgYWx0PXtgJHtpbmdyZWRpZW50Lm5hbWV9IC0gS1lOIHNraW5jYXJlIGluZ3JlZGllbnRgfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgZGVjb2Rpbmc9XCJhc3luY1wiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2B3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB6b29tLWltYWdlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTEwMDAgJHtzaG93Q29sb3IgPyAnZ3JheXNjYWxlLTAnIDogJ2dyYXlzY2FsZSd9YH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGgzIFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzEzcHhdIG1kOnRleHQtWzE0cHhdIGxnOnRleHQtWzE1cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMS41cHhdIG1iLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJyMxQTFBMUEnLFxuICAgICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJzEuNXB4J1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7aW5ncmVkaWVudC5uYW1lfVxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICA8cCBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxMnB4XSBtZDp0ZXh0LVsxM3B4XVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzY2NjY2NicsXG4gICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2luZ3JlZGllbnQuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgI
563HsvKiBSaWdodCBBcnJvdyBCdXR0b24gLSBPdXRzaWRlIGNhcm91c2VsIGZvciBwb3NpdGlvbmluZyAqL31cbiAgICAgICAgICB7Y2FuU2Nyb2xsUmlnaHQgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXtzY3JvbGxSaWdodH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2Fyb3VzZWwtbmV4dFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTY3JvbGwgcmlnaHRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1pbmdyZWRpZW50cy1yaWdodFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHQgc2l6ZT17MjB9IGNsYXNzTmFtZT1cInRleHQtZ3JheS04MDBcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERvdCBJbmRpY2F0b3JzIC0gTW9iaWxlIE9ubHkgLSBUaW55IGRvdHMgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImluZ3JlZGllbnQtZG90cy1jb250YWluZXIgZmxleCBtZDpoaWRkZW4ganVzdGlmeS1jZW50ZXIgbXQtNFwiIHN0eWxlPXt7IGdhcDogJzZweCcgfX0+XG4gICAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbERvdHMgfSkubWFwKChfLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzY3JvbGxUb0RvdChpbmRleCl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJpbmdyZWRpZW50LWRvdFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogY3VycmVudERvdCA9PT0gaW5kZXggPyAnMTRweCcgOiAnNnB4JyxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnNnB4JyxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IGN1cnJlbnREb3QgPT09IGluZGV4ID8gJzE0cHgnIDogJzZweCcsXG4gICAgICAgICAgICAgIG1pbkhlaWdodDogJzZweCcsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBjdXJyZW50RG90ID09PSBpbmRleCA/ICcxNHB4JyA6ICc2cHgnLFxuICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICc2cHgnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICczcHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGN1cnJlbnREb3QgPT09IGluZGV4ID8gJyMxQTFBMUEnIDogJyNEMUQ1REInLFxuICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YEdvIHRvIHNsaWRlICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YGRvdC1pbmRpY2F0b3ItJHtpbmRleH1gfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBDb21wb25lbnQgU3R5bGVzICovfVxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIC8qIEZvcmNlIHRpbnkgZG90cyBvbiBtb2JpbGUgKi9cbiAgICAgICAgLmluZ3JlZGllbnQtZG90IHtcbiAgICAgICAgICB3aWR0aDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiA2cHggIWltcG9ydGFudDtcbiAgICAgICAgICBtaW4td2lkdGg6IDZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1heC13aWR0aDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgbWF4LWhlaWdodDogNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC5pbmdyZWRpZW50LWRvdHMtY29udGFpbmVyIHtcbiAgICAgICAgICBnYXA6IDZweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKiBTaGFyZWQgUGFyZW50IENvbnRhaW5lciAqL1xuICAgICAgICAuaW5ncmVkaWVudHMtY29udGFpbmVyIHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDExMDBweDtcbiAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICBwYWRkaW5nOiAwIDMycHg7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEhlYWRlciBzdHlsZXMgLSBubyBleHRyYSBwYWRkaW5nICovXG4gICAgICAgIC5pbmdyZWRpZW50cy1oZWFkZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICAgICAgICB9XG4gICAgICAgIC5pbmdyZWRpZW50cy10aXRsZSB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmluZ3JlZGllbnRzLWRlc2Mge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICBtYXgtd2lkdGg6IDM4MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLyogQ2Fyb3VzZWwgd3JhcHBlciAqL1xuICAgICAgICAuaW5ncmVkaWVudHMtd3JhcHBlciB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogQ2Fyb3VzZWwgc3R5bGVzIC0gbm8gZXh0cmEgcGFkZGluZywgaW5oZXJpdHMgZnJvbSBwYXJlbnQgKi9cbiAgICAgICAgLmluZ3JlZGllbnRzLWNhcm91c2VsIHtcbiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZ2FwOiAyMHB4O1xuICAgICAgICAgI
563HNjcm9sbC1zbmFwLXR5cGU6IHggbWFuZGF0b3J5O1xuICAgICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xuICAgICAgICB9XG4gICAgICAgIC5pbmdyZWRpZW50cy1jYXJvdXNlbDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBDYXJkIHN0eWxlcyAtIDMgZnVsbCBjYXJkcyArIHBhcnRpYWwgNHRoICovXG4gICAgICAgIC5pbmdyZWRpZW50cy1jYXJkIHtcbiAgICAgICAgICBmbGV4OiAwIDAgY2FsYygoMTAwJSAtIDQwcHgpIC8gMyk7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLyogQXJyb3cgYnV0dG9uICovXG4gICAgICAgIC5jYXJvdXNlbC1uZXh0IHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICAgICAgdG9wOiA0MCU7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLDAsMCwwLjEpO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgIH1cbiAgICAgICAgLmNhcm91c2VsLW5leHQ6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogVGFibGV0OiAyIGNhcmRzICsgcGFydGlhbCAzcmQgKi9cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgICAgIC5pbmdyZWRpZW50cy1jYXJkIHtcbiAgICAgICAgICAgIGZsZXg6IDAgMCBjYWxjKCgxMDAlIC0gMjBweCkgLyAyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBNb2JpbGUgc3R5bGVzIC0gMiBjYXJkcyArIHBhcnRpYWwgM3JkICovXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgIC5pbmdyZWRpZW50cy1jb250YWluZXIge1xuICAgICAgICAgICAgcGFkZGluZzogMCAxNnB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAuaW5ncmVkaWVudHMtaGVhZGVyIHtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmluZ3JlZGllbnRzLWRlc2Mge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmluZ3JlZGllbnRzLWNhcm91c2VsIHtcbiAgICAgICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmluZ3JlZGllbnRzLWNhcmQge1xuICAgICAgICAgICAgZmxleDogMCAwIGNhbGMoKDEwMCUgLSAyNHB4KSAvIDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuY2Fyb3VzZWwtbmV4dCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cbiJdLCJmaWxlIjoiL2hvbWUvcnVubmVyL3dvcmtzcGFjZS9jbGllbnQvc3JjL2NvbXBvbmVudHMvSW5ncmVkaWVudEhpZ2hsaWdodC50c3gifQ==

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.