{"version":3,"sources":["node_modules/browser-pack/_prelude.js","frontend/js/common/internationalization.js","frontend/js/components/AccordionCarousel/AccordionCarouselApp.jsx","frontend/js/components/AccordionCarousel/renderAccordionCarousel.jsx","frontend/js/components/AccordionTabs/AccordionTabsApp.jsx","frontend/js/components/AccordionTabs/renderAccordionTabs.jsx","frontend/js/components/ClientQuotes/ClientQuotesApp.jsx","frontend/js/components/ClientQuotes/renderClientQuotes.jsx","frontend/js/components/Common/Hooks/useClickOutside.jsx","frontend/js/components/Common/Hooks/useMediaQuery.jsx","frontend/js/components/Common/Hooks/useTallestNodeHeight.jsx","frontend/js/components/Common/Icon.js","frontend/js/components/Common/Map/MapStyles.js","frontend/js/components/Common/Map/index.jsx","frontend/js/components/Common/MultiLevelNav/index.jsx","frontend/js/components/Common/index.js","frontend/js/components/ContactMap/ContactMapApp.jsx","frontend/js/components/ContactMap/renderContactMap.jsx","frontend/js/components/ContentAccordion/ContentAccordionApp.jsx","frontend/js/components/ContentAccordion/renderContentAccordion.jsx","frontend/js/components/CtaNav/CtaNav.jsx","frontend/js/components/FeatureCarousel/FeatureCarouselApp.jsx","frontend/js/components/FeatureCarousel/renderFeatureCarousel.jsx","frontend/js/components/LocationsMap/LocationsMapApp.jsx","frontend/js/components/LocationsMap/renderLocationsMap.jsx","frontend/js/components/Logo/Logo.jsx","frontend/js/components/MainNav/MainNav.jsx","frontend/js/components/MobileNav/MobileNav.jsx","frontend/js/components/NavPromo/NavPromo.jsx","frontend/js/components/PrimaryNav/PrimaryNavApp.jsx","frontend/js/components/PrimaryNav/renderPrimaryNav.jsx","frontend/js/components/SubNav/SubNav.jsx","frontend/js/components/TabbedText/TabbedTextApp.jsx","frontend/js/components/TabbedText/renderTabbedText.jsx","frontend/js/components/ToolNav/ToolNav.jsx","frontend/js/components/VideoPlayer/VideoPlayerApp.jsx","frontend/js/components/VideoPlayer/renderVideoPlayer.jsx","frontend/js/components/VideoPromo/VideoPromoApp.jsx","frontend/js/components/VideoPromo/renderVideoPromo.jsx","frontend/js/index.js","frontend/js/polyfill/closest.js","frontend/js/polyfill/es6-polyfill.js","frontend/js/polyfill/index.js","frontend/js/polyfill/popstate-event.js","node_modules/object-assign/index.js","node_modules/process/browser.js","node_modules/react/cjs/react-jsx-runtime.development.js","node_modules/react/cjs/react-jsx-runtime.production.min.js","node_modules/react/jsx-runtime.js"],"names":[],"mappings":"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","file":"index-generated.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","/**\r\n * Dictionary mapping\r\n *\r\n * Example entry:\r\n * BackToPeople: { key: \"/Associate Bios/Back to People\", default: \"Back to People\" }\r\n *\r\n * The title should be a friendly codename for the dictionary entry,\r\n * the key should be the path of the dictionary entry item in Sitecore\r\n * (not including the dictionary item path)\r\n * and the default should be a default value to show in Storybook or\r\n * if the dictionary is non-functional.\r\n */\r\nexport const dictionaryKeys = {\r\n BackToPeople: {\r\n key: \"/Associate Bios/Back to People\",\r\n default: \"Back to People\",\r\n },\r\n\r\n IconClose: { key: \"/Icons/Close\", default: \"Close\" },\r\n IconEmail: { key: \"/Icons/Email\", default: \"Email\" },\r\n IconLanguage: { key: \"/Icons/Language\", default: \"Language\" },\r\n IconMenu: { key: \"/Icons/Menu\", default: \"Menu\" },\r\n IconPlay: { key: \"/Icons/Play\", default: \"Play\" },\r\n IconSearch: { key: \"/Icons/Search\", default: \"Search\" },\r\n IconTool: { key: \"/Icons/Tool\", default: \"Tool\" },\r\n IconVideo: { key: \"/Icons/Video\", default: \"Video\" },\r\n\r\n Search: { key: \"/Header/Search\", default: \"Search\" },\r\n};\r\n\r\nconst dictionaryHashmap = getFullDictionary();\r\n\r\nfunction getFullDictionary() {\r\n var dataDict = document.body.getAttribute(\"data-dictionary\");\r\n\r\n if (!dataDict || dataDict.length < 5) {\r\n console.error(\r\n \"If on live site, dictionary attribute likely not configured correctly. Value: \",\r\n dataDict,\r\n );\r\n return {};\r\n }\r\n\r\n try {\r\n return JSON.parse(dataDict).entries;\r\n } catch (error) {\r\n console.error(error);\r\n return {};\r\n }\r\n}\r\n\r\n/**\r\n *dictionaryKey should be a property of dictionaryKeys.\r\n *e.g. dictionaryKeys.GoBack\r\n */\r\nexport function dictionary(dictionaryKey) {\r\n if (!dictionaryKey || !dictionaryKey.key || !dictionaryKey.default) {\r\n console.error(\"Dictionary key not configured properly: \", dictionaryKey);\r\n }\r\n\r\n var dictionaryEntry = dictionaryHashmap[dictionaryKey.key];\r\n\r\n if (!dictionaryEntry) {\r\n return dictionaryKey.default;\r\n }\r\n\r\n return dictionaryEntry;\r\n}\r\n\r\n/**\r\n * Sample usage in a component:\r\n *\r\n * const labels = {\r\n * search: dictionary(dictionaryKeys.BackToPeople)\r\n * };\r\n *\r\n * return <p>{labels.search}</p>;\r\n */\r\n","import React, { useRef, useState, useEffect } from \"react\";\r\nimport Slider from \"react-slick\";\r\nimport { IconArrowSmall } from \"../Common\";\r\n\r\nconst AccordionCarousel = ({ slides }) => {\r\n\r\n const carousel = useRef();\r\n const next = (e) => {\r\n e.preventDefault();\r\n carousel?.current?.slickNext();\r\n };\r\n const prev = (e) => {\r\n e.preventDefault();\r\n carousel?.current?.slickPrev();\r\n };\r\n\r\n const carouselSettings = {\r\n dots: false,\r\n infinite: false,\r\n speed: 500,\r\n arrows: true,\r\n slidesToShow: slides.perPage,\r\n slidesToScroll: 1,\r\n responsive: [\r\n {\r\n breakpoint: 740,\r\n settings: {\r\n initialSlide: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n },\r\n },\r\n {\r\n breakpoint: 980,\r\n settings: {\r\n initialSlide: 0,\r\n slidesToShow: 3,\r\n slidesToScroll: 1,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n const getShowArrows = () => {\r\n return ((window.innerWidth < 740 && slides.items.length > 1) || (window.innerWidth < 980 && slides.items.length > 3) || slides.items.length > 5);\r\n };\r\n\r\n const [windowWidth, setWindowWidth] = useState(0);\r\n const [showArrows, setShowArrows] = useState(getShowArrows());\r\n\r\n useEffect(() => {\r\n function handleResize() {\r\n const show = getShowArrows();\r\n console.log(show);\r\n setShowArrows(show);\r\n }\r\n\r\n window.addEventListener('resize', handleResize)\r\n })\r\n\r\n const slidesClass = \"accordion-slides--inner\" + (showArrows ? \"\" : \" full-width\" );\r\n const slideClass = \"c-card c-card--large \" + slides.slideClass;\r\n\r\n return (\r\n <section>\r\n <div className=\"accordion-slides\">\r\n {slides.title && (\r\n <div className=\"accordion-slides--title\"> \r\n <p>{slides.title}</p>\r\n </div>\r\n )}\r\n <div className={slidesClass}>\r\n <Slider {...carouselSettings} ref={carousel}>\r\n {slides.items.map(\r\n (item) =>\r\n item.url && (\r\n <div key={item.name} className=\"swiper-slide\">\r\n\r\n <article className={slideClass}>\r\n <a href={item.url}>\r\n {item.image && (\r\n <div className=\"img\">\r\n <img src={item.image} alt={item.imageAlt} />\r\n </div>\r\n )}\r\n\r\n <div class=\"c-card__body\">\r\n <div class=\"c-card__content\">\r\n {item.name &&\r\n <h3 class=\"c-card__title u-h5\">{item.name}</h3>\r\n }\r\n {item.line1 &&\r\n <h3 class=\"c-card__title u-h5\">{item.line1}</h3>\r\n }\r\n {item.line2 &&\r\n <p class=\"c-card__title u-h5\">{item.line2}</p>\r\n }\r\n {item.line3 &&\r\n <p class=\"c-card__title u-h5\">{item.line3}</p>\r\n }\r\n {item.blueText && (\r\n <p className=\"u-color--secondary uppercase\">{item.blueText}</p>\r\n )}\r\n </div>\r\n </div>\r\n </a>\r\n </article>\r\n </div>\r\n )\r\n )}\r\n </Slider>\r\n {showArrows && (\r\n <div className=\"accordion-slides--nav\">\r\n <a className=\"prev\" href=\"#\" onClick={prev}>\r\n <IconArrowSmall direction=\"left\" />\r\n </a>\r\n <a className=\"next\" href=\"#\" onClick={next}>\r\n <IconArrowSmall direction=\"right\" />\r\n </a>\r\n </div>\r\n )}\r\n </div> \r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default AccordionCarousel;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport AccordionCarouselApp from \"./AccordionCarouselApp.jsx\";\r\n\r\nexport default function renderAccordionCarousel(ancestor) {\r\n\r\n console.log(\"Render Accordion Carousel\");\r\n\r\n if (!ancestor) {\r\n ancestor = document;\r\n }\r\n\r\n ancestor.querySelectorAll(\".js-accordion-carousel-mount\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model); \r\n\r\n ReactDom.render(<AccordionCarouselApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport lateRender from \"../../index\";\r\n\r\nfunction AccordionItemTitle(props) {\r\n const isOpen = props.index === props.activeIndex;\r\n\r\n return (\r\n <button\r\n className={`accordiontabs--title ${isOpen ? \"open\" : \"\"}`}\r\n onClick={() => props.onClick(props.index)}\r\n >\r\n {props.title}\r\n </button>\r\n );\r\n}\r\n\r\nfunction AccordionItemContent(props) {\r\n const isOpen = props.index === props.activeIndex;\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <div className=\"accordiontabs--content\">\r\n <div dangerouslySetInnerHTML={{ __html: props.content }} />\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nfunction AccordionList(props) {\r\n return (\r\n <div className=\"accordiontabs--list\">\r\n {props.items.map((item, index) => (\r\n <AccordionItemTitle\r\n key={index}\r\n index={index}\r\n title={item.title}\r\n content={item.content}\r\n activeIndex={props.activeIndex}\r\n onClick={props.onClick}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nfunction AccordionTabs(props) {\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n\r\n const handleItemToggle = (index) => {\r\n setActiveIndex((prevActiveIndex) =>\r\n prevActiveIndex === index ? prevActiveIndex : index,\r\n );\r\n };\r\n\r\n //after tab changes are rendered (when activeIndex changes), render any components that could appear on tabs.\r\n useEffect(() => {\r\n document.querySelectorAll(\".js-accordion-tabs\").forEach((mount) => {\r\n lateRender(mount);\r\n });\r\n }, [activeIndex]);\r\n\r\n return (\r\n <div className=\"accordiontabs\">\r\n <div className=\"accordiontabs--list-wrapper\">\r\n <AccordionList\r\n items={props.items}\r\n onClick={handleItemToggle}\r\n activeIndex={activeIndex}\r\n />\r\n </div>\r\n <div className=\"accordiontabs--wrapper\">\r\n {props.items.map((item, index) => (\r\n <AccordionItemContent\r\n key={index}\r\n index={index}\r\n title={item.title}\r\n content={item.content}\r\n activeIndex={activeIndex}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AccordionTabs;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport AccordionTabsApp from \"./AccordionTabsApp.jsx\";\r\n\r\nexport default function renderAccordionTabs() {\r\n document.querySelectorAll(\".js-accordion-tabs\").forEach((mount) => {\r\n let accordionItems = mount.querySelectorAll(\".js-accordion-item\");\r\n\r\n let dataModel = [];\r\n\r\n accordionItems.forEach((itemMount) => {\r\n const model = JSON.parse(itemMount.dataset.model);\r\n dataModel.push(model);\r\n });\r\n\r\n const appContainer = document.createElement(\"div\");\r\n appContainer.classList.add(\"accordiontabs--app-container\");\r\n mount.appendChild(appContainer);\r\n\r\n ReactDom.render(<AccordionTabsApp items={dataModel} />, appContainer);\r\n });\r\n}\r\n","import React, { useRef } from \"react\";\r\nimport Slider from \"react-slick\";\r\nimport { IconArrowSmall } from \"../Common\";\r\n\r\nconst ClientQuotes = ({ quotes }) => {\r\n const carousel = useRef();\r\n const next = (e) => {\r\n e.preventDefault();\r\n carousel?.current?.slickNext();\r\n };\r\n const prev = (e) => {\r\n e.preventDefault();\r\n carousel?.current?.slickPrev();\r\n };\r\n\r\n const carouselSettings = {\r\n dots: false,\r\n infinite: false,\r\n speed: 500,\r\n arrows: false,\r\n };\r\n\r\n const quotesClass = \"clientquotes--quotes\" + (quotes.title ? \"\" : \" full-width\" );\r\n\r\n return (\r\n <section>\r\n <div className=\"clientquotes\">\r\n {quotes.title && (\r\n <div className=\"clientquotes--title\">\r\n <h2 className=\"h1\">{quotes.title}</h2>\r\n </div>\r\n )}\r\n <div className={quotesClass}>\r\n <Slider {...carouselSettings} ref={carousel}>\r\n {quotes.items.map(\r\n (item) =>\r\n item.text && (\r\n <div key={item.text} className=\"clientquotes--quote\">\r\n <div className=\"client-quotes--inner\">\r\n <div className=\"quote-body\">\r\n <p>{item.text}</p>\r\n {item.logo && <img src={item.logo} alt={item.alt} />}\r\n\r\n <p className=\"body-sm snug\">\r\n <span>{item.name}</span>{\" \"}\r\n {item.name && item.jobTitle ? \"|\" : \"\"}{\" \"}\r\n <span>{item.jobTitle}</span>\r\n </p>\r\n <p className=\"body-sm snug\">{item.company}</p>\r\n </div>\r\n {item.image && (\r\n <div className=\"quote-img\">\r\n <img src={item.image} alt={item.imageAlt} />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n )}\r\n </Slider>\r\n {quotes.items.length > 1 && (\r\n <div className=\"clientquotes--nav\">\r\n <a href=\"#\" onClick={prev}>\r\n <IconArrowSmall direction=\"left\" />\r\n </a>\r\n <a href=\"#\" onClick={next}>\r\n <IconArrowSmall direction=\"right\" />\r\n </a>\r\n </div>\r\n )}\r\n </div> \r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default ClientQuotes;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport ClientQuotesApp from \"./ClientQuotesApp.jsx\";\r\n\r\nexport default function renderClientQuotes(ancestor) {\r\n if (!ancestor) {\r\n ancestor = document;\r\n }\r\n ancestor.querySelectorAll(\".js-client-quotes-mount\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<ClientQuotesApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import { useState, useEffect } from \"react\";\r\n\r\nfunction useClickOutside(ref) {\r\n const [clickedOutside, setClickedOutside] = useState(false);\r\n\r\n useEffect(() => {\r\n function handleClickOutside(event) {\r\n if (ref.current && !ref.current.contains(event.target)) {\r\n setClickedOutside(true);\r\n } else {\r\n setClickedOutside(false);\r\n }\r\n }\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [ref]);\r\n\r\n return clickedOutside;\r\n}\r\n\r\nexport default useClickOutside;\r\n","import { useEffect, useState } from \"react\";\r\n\r\nfunction useMediaQuery(screenSize) {\r\n const [matches, setMatches] = useState(false);\r\n\r\n useEffect(() => {\r\n const mediaQuery = window.matchMedia(`(max-width: ${screenSize}px)`);\r\n setMatches(mediaQuery.matches);\r\n\r\n const handler = () => setMatches(mediaQuery.matches);\r\n mediaQuery.addListener(handler);\r\n\r\n return () => mediaQuery.removeListener(handler);\r\n }, [screenSize]);\r\n\r\n return matches;\r\n}\r\n\r\nexport default useMediaQuery;\r\n","import { useState, useEffect } from \"react\";\r\n\r\nfunction useTallestNodeValue(ref, selector) {\r\n const [tallestNodeHeight, setTallestNodeHeight] = useState(0);\r\n\r\n useEffect(() => {\r\n if (!ref.current) {\r\n return;\r\n }\r\n\r\n const nodeList = ref.current.querySelectorAll(selector);\r\n\r\n let tallestNodeHeight = 0;\r\n\r\n for (let i = 0; i < nodeList.length; i++) {\r\n const node = nodeList[i];\r\n const nodeHeight = node.getBoundingClientRect().height;\r\n\r\n if (nodeHeight > tallestNodeHeight) {\r\n tallestNodeHeight = nodeHeight;\r\n }\r\n }\r\n\r\n setTallestNodeHeight(tallestNodeHeight);\r\n }, [ref]);\r\n\r\n return tallestNodeHeight;\r\n}\r\n\r\nexport default useTallestNodeValue;\r\n","import React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { dictionary, dictionaryKeys } from \"../../common/internationalization\";\r\n\r\nfunction Icon({\r\n children,\r\n className,\r\n fill = \"currentColor\",\r\n stroke,\r\n viewBox,\r\n ...props\r\n}) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox={viewBox}\r\n {...props}\r\n fill={fill}\r\n stroke={stroke}\r\n className={clsx(\"icon\", className)}\r\n >\r\n {children}\r\n </svg>\r\n );\r\n}\r\n\r\nexport function IconLinkedIn(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>LinkedIn</title>\r\n <path\r\n d=\"M20.4705 2.00014H3.53055C3.34013 1.9975 3.15105 2.03239 2.97411 2.10282C2.79718 2.17326 2.63585 2.27786 2.49934 2.41065C2.36284 2.54344 2.25383 2.70182 2.17854 2.87675C2.10325 3.05167 2.06316 3.23972 2.06055 3.43014V20.5701C2.06316 20.7606 2.10325 20.9486 2.17854 21.1235C2.25383 21.2985 2.36284 21.4568 2.49934 21.5896C2.63585 21.7224 2.79718 21.827 2.97411 21.8975C3.15105 21.9679 3.34013 22.0028 3.53055 22.0001H20.4705C20.661 22.0028 20.85 21.9679 21.027 21.8975C21.2039 21.827 21.3652 21.7224 21.5017 21.5896C21.6383 21.4568 21.7473 21.2985 21.8226 21.1235C21.8978 20.9486 21.9379 20.7606 21.9405 20.5701V3.43014C21.9379 3.23972 21.8978 3.05167 21.8226 2.87675C21.7473 2.70182 21.6383 2.54344 21.5017 2.41065C21.3652 2.27786 21.2039 2.17326 21.027 2.10282C20.85 2.03239 20.661 1.9975 20.4705 2.00014ZM8.09055 18.7401H5.09055V9.74014H8.09055V18.7401ZM6.59055 8.48014C6.17681 8.48014 5.78002 8.31578 5.48746 8.02323C5.1949 7.73067 5.03055 7.33388 5.03055 6.92014C5.03055 6.5064 5.1949 6.10961 5.48746 5.81705C5.78002 5.5245 6.17681 5.36014 6.59055 5.36014C6.81024 5.33522 7.03272 5.35699 7.24342 5.42402C7.45412 5.49105 7.64829 5.60183 7.8132 5.7491C7.97812 5.89637 8.11007 6.07682 8.20042 6.27862C8.29076 6.48043 8.33746 6.69904 8.33746 6.92014C8.33746 7.14124 8.29076 7.35985 8.20042 7.56166C8.11007 7.76346 7.97812 7.94391 7.8132 8.09118C7.64829 8.23845 7.45412 8.34923 7.24342 8.41626C7.03272 8.48329 6.81024 8.50505 6.59055 8.48014ZM18.9105 18.7401H15.9105V13.9101C15.9105 12.7001 15.4805 11.9101 14.3905 11.9101C14.0532 11.9126 13.7247 12.0184 13.4494 12.2133C13.174 12.4082 12.965 12.6828 12.8505 13.0001C12.7723 13.2352 12.7384 13.4827 12.7505 13.7301V18.7301H9.75055C9.75055 18.7301 9.75055 10.5501 9.75055 9.73014H12.7505V11.0001C13.0231 10.5272 13.4195 10.1377 13.897 9.87334C14.3745 9.60902 14.9151 9.47999 15.4605 9.50014C17.4605 9.50014 18.9105 10.7901 18.9105 13.5601V18.7401Z\"\r\n fill=\"currentColor\"\r\n />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconEmail(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>{dictionary(dictionaryKeys.IconEmail)}</title>\r\n\r\n <path\r\n d=\"M19 4H5C4.20435 4 3.44129 4.31607 2.87868 4.87868C2.31607 5.44129 2 6.20435 2 7V17C2 17.7956 2.31607 18.5587 2.87868 19.1213C3.44129 19.6839 4.20435 20 5 20H19C19.7956 20 20.5587 19.6839 21.1213 19.1213C21.6839 18.5587 22 17.7956 22 17V7C22 6.20435 21.6839 5.44129 21.1213 4.87868C20.5587 4.31607 19.7956 4 19 4ZM5 6H19C19.2652 6 19.5196 6.10536 19.7071 6.29289C19.8946 6.48043 20 6.73478 20 7L12 11.88L4 7C4 6.73478 4.10536 6.48043 4.29289 6.29289C4.48043 6.10536 4.73478 6 5 6ZM20 17C20 17.2652 19.8946 17.5196 19.7071 17.7071C19.5196 17.8946 19.2652 18 19 18H5C4.73478 18 4.48043 17.8946 4.29289 17.7071C4.10536 17.5196 4 17.2652 4 17V9.28L11.48 13.85C11.632 13.9378 11.8045 13.984 11.98 13.984C12.1555 13.984 12.328 13.9378 12.48 13.85L20 9.28V17Z\"\r\n fill=\"currentColor\"\r\n />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconFacebook(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>Facebook</title>\r\n\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M5.88816 17.5V9.74607H8.52509L8.92071 6.72333H5.88816V4.79375C5.88816 3.91887 6.1334 3.32265 7.40644 3.32265L9.02745 3.32199V0.618345C8.74712 0.582404 7.78484 0.5 6.66485 0.5C4.32613 0.5 2.725 1.90842 2.725 4.49438V6.72333H0.0800781V9.74607H2.725V17.5H5.88816Z\"\r\n fill=\"currentColor\"\r\n />\r\n </Icon>\r\n );\r\n}\r\nexport function IconTwitter(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>Twitter</title>\r\n <path\r\n d=\"M13.9432 2.05832C13.4987 2.28524 13.0069 2.42274 12.5273 2.51351C12.7549 2.47035 13.0893 2.00537 13.2234 1.81715C13.4277 1.53016 13.5977 1.20356 13.6932 0.85027C13.7058 0.822683 13.7145 0.787977 13.69 0.767509C13.6592 0.753716 13.6395 0.760835 13.6151 0.774628C13.0799 1.09855 12.5257 1.33304 11.9361 1.49946C11.8876 1.51325 11.8509 1.49946 11.8205 1.46475C11.7716 1.40246 11.7259 1.34372 11.6738 1.29567C11.4261 1.05762 11.1603 0.871183 10.8606 0.733248C10.467 0.552152 10.0371 0.47562 9.61347 0.506766C9.20092 0.537023 8.79627 0.668285 8.43026 0.883642C8.06347 1.09989 7.73612 1.40068 7.47542 1.76331C7.20604 2.13841 7.00726 2.58158 6.90551 3.05145C6.8073 3.50442 6.81519 3.95337 6.87514 4.41123C6.88421 4.48732 6.87829 4.49755 6.81716 4.48732C4.51189 4.10021 2.60101 3.16981 1.04944 1.17509C0.981993 1.08832 0.945708 1.08832 0.890492 1.18176C0.211332 2.32974 0.541052 4.17407 1.38901 5.08044C1.50221 5.20147 1.61856 5.32205 1.74358 5.4324C1.69783 5.44308 1.13344 5.37411 0.630581 5.08044C0.563138 5.03239 0.529614 5.05997 0.523304 5.14629C0.516993 5.27044 0.526459 5.38434 0.541841 5.51872C0.671993 6.68272 1.38625 7.75906 2.36476 8.1791C2.48111 8.23427 2.60929 8.28277 2.73432 8.3068C2.51148 8.36197 2.28194 8.40113 1.64262 8.34462C1.56295 8.32727 1.53258 8.37221 1.56295 8.45853C2.04333 9.93533 3.08021 10.3749 3.85678 10.6254C3.96091 10.6459 4.06463 10.6459 4.16915 10.6735C4.16284 10.6842 4.15653 10.6842 4.15061 10.6944C3.89307 11.1376 3.00014 11.4669 2.58405 11.631C1.82798 11.9296 1.00447 12.0635 0.205022 11.9745C0.0772358 11.9532 0.0504165 11.955 0.0153148 11.9745C-0.019787 11.999 0.0109763 12.0337 0.0519941 12.0707C0.214093 12.1917 0.379347 12.2989 0.547362 12.4021C1.05496 12.7056 1.58424 12.9477 2.13759 13.1199C4.99542 14.0102 8.21453 13.3561 10.3605 10.9507C12.0453 9.06188 12.6362 6.45713 12.6362 3.84881C12.6362 3.74692 12.743 3.69041 12.8065 3.63657C13.2451 3.26503 13.5985 2.82008 13.9259 2.32351C13.9992 2.21183 14 2.11305 14 2.07211V2.05876C14 2.01694 13.9992 2.0294 13.9424 2.05876L13.9432 2.05832Z\"\r\n fill=\"currentColor\"\r\n />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconVideo(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>{dictionary(dictionaryKeys.IconVideo)}</title>\r\n <svg fill=\"none\">\r\n <g filter=\"url(#filter0_b_800_20341)\">\r\n <rect\r\n x=\"1\"\r\n y=\"1\"\r\n width=\"21\"\r\n height=\"21\"\r\n rx=\"10.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n />\r\n </g>\r\n <path\r\n d=\"M15.0607 10.9783C15.4563 11.2139 15.4563 11.7868 15.0607 12.0224L10.3107 14.8505C9.90567 15.0917 9.39226 14.7998 9.39226 14.3285L9.39226 8.67223C9.39226 8.20088 9.90567 7.90904 10.3107 8.15017L15.0607 10.9783Z\"\r\n fill=\"currentColor\"\r\n />\r\n <defs>\r\n <filter\r\n id=\"filter0_b_800_20341\"\r\n x=\"-13.2235\"\r\n y=\"-13.2235\"\r\n width=\"49.4471\"\r\n height=\"49.4471\"\r\n filterUnits=\"userSpaceOnUse\"\r\n clorInterpolationFilters=\"sRGB\"\r\n >\r\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feGaussianBlur in=\"BackgroundImageFix\" stdDeviation=\"6.61177\" />\r\n <feComposite\r\n in2=\"SourceAlpha\"\r\n operator=\"in\"\r\n result=\"effect1_backgroundBlur_800_20341\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect1_backgroundBlur_800_20341\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconArrowSmall({ direction = \"right\", ...props }) {\r\n let rotate;\r\n\r\n switch (direction) {\r\n case \"left\":\r\n rotate = \"flip-h\";\r\n break;\r\n case \"right\":\r\n rotate = \"\";\r\n break;\r\n default:\r\n rotate = \"\";\r\n }\r\n return (\r\n <Icon\r\n {...props}\r\n className={clsx(\"arrow-small\", rotate)}\r\n style={{\r\n width: \"54px\",\r\n height: \"14px\",\r\n }}\r\n >\r\n <path d=\"M52.6209 7.62093C52.9639 7.278 52.9639 6.72201 52.6209 6.37908L47.0326 0.790723C46.6896 0.447793 46.1336 0.447793 45.7907 0.790723C45.4478 1.13365 45.4478 1.68965 45.7907 2.03258L50.7581 7L45.7907 11.9674C45.4478 12.3104 45.4478 12.8664 45.7907 13.2093C46.1336 13.5522 46.6896 13.5522 47.0326 13.2093L52.6209 7.62093ZM-7.67681e-08 7.87813L52 7.87813L52 6.12188L7.67681e-08 6.12187L-7.67681e-08 7.87813Z\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconLanguage(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>{dictionary(dictionaryKeys.IconLanguage)}</title>\r\n <svg fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={\"lang\"}>\r\n <path\r\n d=\"M6.46414 13.3573C5.58071 13.3573 4.74576 13.1819 3.95929 12.831C3.17282 12.4806 2.48611 12.002 1.89917 11.3951C1.31179 10.7887 0.848527 10.0792 0.509375 9.26664C0.169792 8.45407 0 7.59141 0 6.67866C0 5.75478 0.169792 4.88944 0.509375 4.08266C0.848527 3.27544 1.31179 2.56861 1.89917 1.96219C2.48611 1.35532 3.17282 0.876462 3.95929 0.52561C4.74576 0.175203 5.58071 0 6.46414 0C7.35835 0 8.19589 0.175203 8.97676 0.52561C9.75806 0.876462 10.4422 1.35532 11.0291 1.96219C11.6165 2.56861 12.0798 3.27544 12.4189 4.08266C12.7585 4.88944 12.9283 5.75478 12.9283 6.67866C12.9283 7.59141 12.7585 8.45407 12.4189 9.26664C12.0798 10.0792 11.6165 10.7887 11.0291 11.3951C10.4422 12.002 9.75806 12.4806 8.97676 12.831C8.19589 13.1819 7.35835 13.3573 6.46414 13.3573ZM6.46414 11.9882C6.74426 11.5875 6.98666 11.1701 7.19136 10.7359C7.39606 10.3018 7.56305 9.83989 7.69233 9.35012H5.23596C5.36524 9.83989 5.53223 10.3018 5.73693 10.7359C5.94163 11.1701 6.18403 11.5875 6.46414 11.9882ZM4.78347 11.721C4.58954 11.3537 4.41997 10.9724 4.27474 10.577C4.12908 10.1821 4.00777 9.7731 3.91081 9.35012H2.00388C2.31632 9.90667 2.70675 10.3909 3.17519 10.8027C3.64405 11.2146 4.18015 11.5207 4.78347 11.721ZM8.14482 11.721C8.74814 11.5207 9.28402 11.2146 9.75245 10.8027C10.2213 10.3909 10.612 9.90667 10.9244 9.35012H9.01748C8.92052 9.7731 8.79942 10.1821 8.65419 10.577C8.50854 10.9724 8.33875 11.3537 8.14482 11.721ZM1.45443 8.01439H3.65224C3.61992 7.79177 3.59557 7.57182 3.5792 7.35454C3.56325 7.1377 3.55528 6.91241 3.55528 6.67866C3.55528 6.4449 3.56325 6.21961 3.5792 6.00278C3.59557 5.7855 3.61992 5.56555 3.65224 5.34293H1.45443C1.40056 5.56555 1.36006 5.7855 1.33291 6.00278C1.30619 6.21961 1.29283 6.4449 1.29283 6.67866C1.29283 6.91241 1.30619 7.1377 1.33291 7.35454C1.36006 7.57182 1.40056 7.79177 1.45443 8.01439ZM4.94507 8.01439H7.98322C8.01554 7.79177 8.03989 7.57182 8.05626 7.35454C8.07221 7.1377 8.08018 6.91241 8.08018 6.67866C8.08018 6.4449 8.07221 6.21961 8.05626 6.00278C8.03989 5.7855 8.01554 5.56555 7.98322 5.34293H4.94507C4.91275 5.56555 4.88862 5.7855 4.87267 6.00278C4.8563 6.21961 4.84811 6.4449 4.84811 6.67866C4.84811 6.91241 4.8563 7.1377 4.87267 7.35454C4.88862 7.57182 4.91275 7.79177 4.94507 8.01439ZM9.27605 8.01439H11.4739C11.5277 7.79177 11.5682 7.57182 11.5954 7.35454C11.6221 7.1377 11.6355 6.91241 11.6355 6.67866C11.6355 6.4449 11.6221 6.21961 11.5954 6.00278C11.5682 5.7855 11.5277 5.56555 11.4739 5.34293H9.27605C9.30837 5.56555 9.3325 5.7855 9.34844 6.00278C9.36482 6.21961 9.37301 6.4449 9.37301 6.67866C9.37301 6.91241 9.36482 7.1377 9.34844 7.35454C9.3325 7.57182 9.30837 7.79177 9.27605 8.01439ZM9.01748 4.00719H10.9244C10.612 3.45064 10.2213 2.96644 9.75245 2.55459C9.28402 2.14274 8.74814 1.83663 8.14482 1.63627C8.33875 2.0036 8.50854 2.38473 8.65419 2.77966C8.79942 3.17503 8.92052 3.58421 9.01748 4.00719ZM5.23596 4.00719H7.69233C7.56305 3.51743 7.39606 3.05549 7.19136 2.62137C6.98666 2.18726 6.74426 1.76984 6.46414 1.36912C6.18403 1.76984 5.94163 2.18726 5.73693 2.62137C5.53223 3.05549 5.36524 3.51743 5.23596 4.00719ZM2.00388 4.00719H3.91081C4.00777 3.58421 4.12908 3.17503 4.27474 2.77966C4.41997 2.38473 4.58954 2.0036 4.78347 1.63627C4.18015 1.83663 3.64405 2.14274 3.17519 2.55459C2.70675 2.96644 2.31632 3.45064 2.00388 4.00719Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconTool(props) {\r\n return (\r\n <Icon\r\n {...props}\r\n style={{\r\n width: \"13px\",\r\n height: \"13px\",\r\n }}\r\n >\r\n <title>{dictionary(dictionaryKeys.IconTool)}</title>\r\n <svg\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M11.6378 13.1347L6.89739 8.60805C6.63622 8.70699 6.37191 8.7812 6.10446 8.83067C5.83649 8.88014 5.55233 8.90488 5.25198 8.90488C3.94609 8.90488 2.83608 8.472 1.92196 7.60625C1.00784 6.7405 0.550781 5.68923 0.550781 4.45244C0.550781 4.00719 0.616076 3.58347 0.746664 3.18127C0.877253 2.77956 1.06008 2.39937 1.29514 2.0407L4.15503 4.74927L5.56539 3.41354L2.7055 0.704969C3.0842 0.482347 3.48563 0.309197 3.90979 0.185518C4.33446 0.0618394 4.78186 0 5.25198 0C6.55786 0 7.66787 0.432876 8.58199 1.29863C9.49611 2.16438 9.95317 3.21565 9.95317 4.45244C9.95317 4.7369 9.92705 5.00578 9.87482 5.25907C9.82258 5.51286 9.74423 5.76343 9.63976 6.01079L14.4193 10.5003C14.576 10.6487 14.6544 10.8281 14.6544 11.0383C14.6544 11.2486 14.576 11.4279 14.4193 11.5763L12.7739 13.1347C12.6172 13.2831 12.4278 13.3573 12.2058 13.3573C11.9838 13.3573 11.7945 13.2831 11.6378 13.1347ZM12.2058 11.5578L12.7347 11.0569L7.7201 6.30762C7.95516 6.06026 8.12493 5.77259 8.2294 5.44459C8.33387 5.11709 8.38611 4.78637 8.38611 4.45244C8.38611 3.71037 8.13485 3.06402 7.63235 2.5134C7.12932 1.96328 6.50563 1.63256 5.76127 1.52125L7.21081 2.89408C7.36751 3.0425 7.44587 3.21565 7.44587 3.41354C7.44587 3.61142 7.36751 3.78457 7.21081 3.93299L4.7035 6.30762C4.5468 6.45604 4.36397 6.53024 4.15503 6.53024C3.94609 6.53024 3.76326 6.45604 3.60656 6.30762L2.15702 4.93479C2.27455 5.63975 2.62401 6.2302 3.20539 6.70611C3.78625 7.18252 4.46844 7.42073 5.25198 7.42073C5.59151 7.42073 5.93104 7.37126 6.27057 7.27232C6.6101 7.17337 6.91698 7.01877 7.19122 6.80852L12.2058 11.5578Z\"\r\n fill=\"#001E5A\"\r\n />\r\n </svg>\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconSearch(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>Search</title>\r\n <path d=\"M12.0536 13.3573L7.52871 8.68225C7.16959 8.97908 6.75661 9.21407 6.28975 9.38722C5.8229 9.56037 5.32612 9.64695 4.79941 9.64695C3.49461 9.64695 2.39044 9.18019 1.48689 8.24666C0.582871 7.31263 0.130859 6.17157 0.130859 4.82347C0.130859 3.47538 0.582871 2.33431 1.48689 1.40029C2.39044 0.466764 3.49461 0 4.79941 0C6.10421 0 7.20862 0.466764 8.11264 1.40029C9.01618 2.33431 9.46795 3.47538 9.46795 4.82347C9.46795 5.36766 9.38416 5.88093 9.21657 6.36328C9.04898 6.84562 8.82154 7.27232 8.53425 7.64335L13.0591 12.3184L12.0536 13.3573ZM4.79941 8.1628C5.6972 8.1628 6.46045 7.83827 7.08915 7.1892C7.71737 6.53964 8.03148 5.75107 8.03148 4.82347C8.03148 3.89588 7.71737 3.10731 7.08915 2.45775C6.46045 1.80868 5.6972 1.48415 4.79941 1.48415C3.90161 1.48415 3.13836 1.80868 2.50966 2.45775C1.88144 3.10731 1.56734 3.89588 1.56734 4.82347C1.56734 5.75107 1.88144 6.53964 2.50966 7.1892C3.13836 7.83827 3.90161 8.1628 4.79941 8.1628Z\" />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconHamburger(props) {\r\n return (\r\n <Icon\r\n {...props}\r\n style={{\r\n width: \"30px\",\r\n height: \"22px\",\r\n }}\r\n >\r\n <title>{dictionary(dictionaryKeys.IconMenu)}</title>\r\n <svg\r\n width=\"30\"\r\n height=\"22\"\r\n viewBox=\"0 0 30 22\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect width=\"30\" height=\"2\" fill=\"#001E5A\" />\r\n <rect y=\"10\" width=\"30\" height=\"2\" fill=\"#001E5A\" />\r\n <rect y=\"20\" width=\"30\" height=\"2\" fill=\"#001E5A\" />\r\n </svg>\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconClose(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>{dictionary(dictionaryKeys.IconClose)}</title>\r\n <path\r\n d=\"M9.56861 9.06861C9.05421 9.583 9.05421 10.417 9.56861 10.9314L17.9511 19.3139C18.4655 19.8283 19.2995 19.8283 19.8139 19.3139C20.3283 18.7995 20.3283 17.9655 19.8139 17.4511L12.3628 10L19.8139 2.54886C20.3283 2.03447 20.3283 1.20047 19.8139 0.686077C19.2995 0.171684 18.4655 0.171684 17.9511 0.686077L9.56861 9.06861ZM12 8.68281H10.5V11.3172H12V8.68281Z\"\r\n fill=\"#0056DA\"\r\n />\r\n <path\r\n d=\"M11.4314 9.06861C11.9458 9.583 11.9458 10.417 11.4314 10.9314L3.04886 19.3139C2.53447 19.8283 1.70047 19.8283 1.18608 19.3139C0.671684 18.7995 0.671684 17.9655 1.18608 17.4511L8.63722 10L1.18608 2.54886C0.671684 2.03447 0.671684 1.20047 1.18608 0.686077C1.70047 0.171684 2.53447 0.171684 3.04886 0.686077L11.4314 9.06861ZM9 8.68281H10.5V11.3172H9V8.68281Z\"\r\n fill=\"#0056DA\"\r\n />\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconPlay(props) {\r\n return (\r\n <Icon {...props}>\r\n <title>{dictionary(dictionaryKeys.IconPlay)}</title>\r\n <svg\r\n width=\"120\"\r\n height=\"118\"\r\n viewBox=\"0 0 120 118\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n focusable=\"true\"\r\n >\r\n <g filter=\"url(#filter0_b_800_23189)\">\r\n <rect width=\"120\" height=\"117.219\" rx=\"58.6097\" fill=\"currentColor\" />\r\n </g>\r\n <path\r\n d=\"M71.0332 57.5974C71.8095 58.0489 71.8095 59.1702 71.0332 59.6216L55.9523 68.3927C55.1717 68.8466 54.1928 68.2835 54.1928 67.3806L54.1928 49.8385C54.1928 48.9356 55.1717 48.3724 55.9523 48.8264L71.0332 57.5974Z\"\r\n fill=\"white\"\r\n />\r\n <defs>\r\n <filter\r\n id=\"filter0_b_800_23189\"\r\n x=\"-46.8333\"\r\n y=\"-46.8333\"\r\n width=\"213.667\"\r\n height=\"210.886\"\r\n filterUnits=\"userSpaceOnUse\"\r\n colorInterpolationFilters=\"sRGB\"\r\n >\r\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feGaussianBlur in=\"BackgroundImageFix\" stdDeviation=\"23.4167\" />\r\n <feComposite\r\n in2=\"SourceAlpha\"\r\n operator=\"in\"\r\n result=\"effect1_backgroundBlur_800_23189\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect1_backgroundBlur_800_23189\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </Icon>\r\n );\r\n}\r\n\r\nexport function IconMapPin(props) {\r\n return (\r\n <Icon {...props}>\r\n <svg\r\n width=\"25\"\r\n height=\"25\"\r\n viewBox=\"0 0 25 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.885 11.6911C13.2787 11.6911 13.6635 11.5744 13.9909 11.3557C14.3182 11.137 14.5734 10.8261 14.724 10.4624C14.8747 10.0986 14.9141 9.6984 14.8373 9.31228C14.7605 8.92615 14.5709 8.57147 14.2925 8.29309C14.0141 8.01471 13.6595 7.82513 13.2733 7.74832C12.8872 7.67152 12.487 7.71094 12.1233 7.8616C11.7595 8.01226 11.4487 8.26739 11.2299 8.59473C11.0112 8.92207 10.8945 9.30692 10.8945 9.70061C10.8945 10.2285 11.1042 10.7348 11.4775 11.1081C11.8508 11.4814 12.3571 11.6911 12.885 11.6911ZM12.1784 18.5685C12.2709 18.6617 12.381 18.7358 12.5022 18.7863C12.6235 18.8368 12.7536 18.8629 12.885 18.8629C13.0164 18.8629 13.1465 18.8368 13.2678 18.7863C13.389 18.7358 13.4991 18.6617 13.5916 18.5685L17.6623 14.4879C18.6077 13.5429 19.2517 12.3388 19.5128 11.0278C19.7738 9.71677 19.6402 8.3578 19.1288 7.12276C18.6174 5.88771 17.7512 4.83207 16.6398 4.08935C15.5284 3.34663 14.2217 2.9502 12.885 2.9502C11.5483 2.9502 10.2416 3.34663 9.13016 4.08935C8.01876 4.83207 7.15258 5.88771 6.6412 7.12276C6.12982 8.3578 5.9962 9.71677 6.25724 11.0278C6.51828 12.3388 7.16225 13.5429 8.10771 14.4879L12.1784 18.5685ZM8.13757 9.24279C8.20557 8.53318 8.43119 7.84771 8.79795 7.23644C9.16472 6.62517 9.66336 6.10352 10.2575 5.70959C11.038 5.19712 11.9513 4.92408 12.885 4.92408C13.8187 4.92408 14.732 5.19712 15.5125 5.70959C16.1027 6.10217 16.5985 6.62066 16.9643 7.22775C17.3302 7.83485 17.5569 8.51548 17.6283 9.22068C17.6997 9.92589 17.6139 10.6381 17.3771 11.3062C17.1404 11.9743 16.7585 12.5816 16.259 13.0845L12.885 16.4585L9.51104 13.0845C9.01094 12.5865 8.62816 11.9833 8.39057 11.3187C8.15298 10.6542 8.06655 9.94497 8.13757 9.24279ZM19.8519 20.8476H5.91812C5.65416 20.8476 5.40101 20.9525 5.21436 21.1391C5.02771 21.3258 4.92285 21.5789 4.92285 21.8429C4.92285 22.1068 5.02771 22.36 5.21436 22.5466C5.40101 22.7333 5.65416 22.8382 5.91812 22.8382H19.8519C20.1158 22.8382 20.369 22.7333 20.5556 22.5466C20.7423 22.36 20.8471 22.1068 20.8471 21.8429C20.8471 21.5789 20.7423 21.3258 20.5556 21.1391C20.369 20.9525 20.1158 20.8476 19.8519 20.8476Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n </Icon>\r\n );\r\n}\r\n","export default [\r\n {\r\n featureType: \"all\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n lightness: \"-2\",\r\n },\r\n {\r\n gamma: \"1.00\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n saturation: \"-100\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.province\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"landscape\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n saturation: -100,\r\n },\r\n {\r\n lightness: 65,\r\n },\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n saturation: -100,\r\n },\r\n {\r\n lightness: \"50\",\r\n },\r\n {\r\n visibility: \"simplified\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n saturation: \"-100\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road.highway\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"simplified\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road.arterial\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n lightness: \"30\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road.local\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n lightness: \"40\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"transit\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n saturation: -100,\r\n },\r\n {\r\n visibility: \"simplified\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n color: \"#acaeb4\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n hue: \"#ffff00\",\r\n },\r\n {\r\n lightness: -25,\r\n },\r\n {\r\n saturation: -97,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n lightness: -25,\r\n },\r\n {\r\n saturation: -100,\r\n },\r\n ],\r\n },\r\n];\r\n","import React from \"react\";\r\nimport { GoogleMap, useJsApiLoader } from \"@react-google-maps/api\";\r\nimport mapStyles from \"./MapStyles\";\r\n\r\nconst Map = ({ zoom, center, customClass, children, draggable }) => {\r\n var googleMapsApiKey = document.body.getAttribute(\"data-googleMapsApiKey\");\r\n const { isLoaded } = useJsApiLoader({\r\n id: \"google-map-script\",\r\n googleMapsApiKey:\r\n googleMapsApiKey ?? process.env.STORYBOOK_GOOGLE_MAPS_API_KEY ?? \"\",\r\n });\r\n\r\n return (\r\n <>\r\n {isLoaded ? (\r\n <GoogleMap\r\n zoom={zoom}\r\n center={center}\r\n draggable={draggable}\r\n mapContainerClassName={customClass}\r\n options={{ styles: mapStyles, disableDefaultUI: true }} \r\n >\r\n {children}\r\n </GoogleMap>\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Map;\r\n","import React, { useState } from \"react\";\r\nimport { IconArrowSmall, IconLanguage, IconTool } from \"../index.js\";\r\nimport NavPromo from \"../../NavPromo/NavPromo.jsx\";\r\n\r\nconst MultilevelNav = ({ data }) => {\r\n const [currentMenus, setCurrentMenus] = useState(data);\r\n const [previousStack, setPreviousStack] = useState([]);\r\n const [currentParent, setCurrentParent] = useState({});\r\n\r\n const renderMenuItems = (data) => {\r\n return data.map((item, index) =>\r\n item?.children && item?.children.length && !(item.mobile === false) ? (\r\n <li\r\n className=\"parent\"\r\n key={index}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n previousStack.push(data);\r\n setPreviousStack(previousStack);\r\n setCurrentMenus(item.children);\r\n setCurrentParent(item);\r\n }}\r\n >\r\n <a href=\"#\">\r\n {\r\n {\r\n lang: <IconLanguage />,\r\n tool: <IconTool />,\r\n }[item.icon]\r\n }\r\n {item.name} <IconArrowSmall />\r\n </a>\r\n </li>\r\n ) : (\r\n item.name &&\r\n !(item.mobile === false) && (\r\n <li key={index} className={previousStack.length ? \"children\" : \"\"}>\r\n <a href={item.url}>\r\n {item.name}\r\n {item.text && <p>{item.text}</p>}\r\n </a>\r\n </li>\r\n )\r\n )\r\n );\r\n };\r\n\r\n return (\r\n data && (\r\n <>\r\n <ul className={`multilevel-nav ${previousStack.length && \"has-sub\"}`}>\r\n {previousStack.length ? (\r\n <li\r\n onClick={(e) => {\r\n const prevState = previousStack.pop();\r\n setPreviousStack(previousStack);\r\n setCurrentMenus(prevState);\r\n }}\r\n >\r\n <a className=\"back-nav\" href=\"#\">\r\n <IconArrowSmall direction=\"left\" />\r\n {\r\n {\r\n lang: <IconLanguage />,\r\n tool: <IconTool />,\r\n }[currentParent.icon]\r\n }\r\n {currentParent.name}\r\n </a>\r\n </li>\r\n ) : null}\r\n {renderMenuItems(currentMenus)}\r\n {currentMenus.length && currentMenus[0].promoData && (\r\n <NavPromo data={currentMenus[0].promoData} />\r\n )}\r\n </ul>\r\n </>\r\n )\r\n );\r\n};\r\nexport default MultilevelNav;\r\n","export * from \"./Icon\";\r\n","import { Marker } from \"@react-google-maps/api\";\r\nimport React from \"react\";\r\nimport useMediaQuery from \"../Common/Hooks/useMediaQuery.jsx\";\r\nimport Map from \"../Common/Map/index.jsx\";\r\n\r\nconst ContactMapApp = (props) => {\r\n const zoom = 15;\r\n const customClass = \"contactmap--map\";\r\n const icon = \"https://www.cresa.com/images/icons/map-pin-blue.png\";\r\n const pin = { lat: props.latitude, lng: props.longitude };\r\n const isMobile = useMediaQuery(980);\r\n\r\n return (\r\n <section>\r\n <div className=\"contactmap\">\r\n <Map\r\n zoom={zoom}\r\n draggable={false}\r\n center={{\r\n lat: props.latitude,\r\n lng: props.longitude + (isMobile ? 0 : 0.01),\r\n }}\r\n customClass={customClass}\r\n >\r\n <Marker key={props.name} position={pin} icon={icon} />\r\n </Map>\r\n <aside className=\"contactmap--box\">\r\n <h3 className=\"h3-alt-lg\">{props.name}</h3>\r\n <div className=\"contactmap--box-data\">\r\n <span>\r\n <img src=\"/images/icons/map-pin-blue.png\" alt=\"Map pin\" />\r\n </span>\r\n <div>\r\n <p>{props.address1}</p>\r\n <p>{props.address2}</p>\r\n <p>{props.address3}</p>\r\n {props.address4 && \r\n <p>{props.address4}</p>\r\n }\r\n {props.phone &&\r\n <a href={`tel:${props.phone}`}>\r\n <p>{`Phone: ${props.phone}`}</p>\r\n </a>\r\n }\r\n {props.fax && \r\n <p>{`Fax: ${props.fax}`}</p>\r\n }\r\n {props.email &&\r\n <a href={`mailto:${props.email}`}>\r\n <p>{`Email: ${props.email}`}</p>\r\n </a>\r\n }\r\n\r\n\r\n {props.socials.rss && props.socials.rss.Url && \r\n <a className=\"rss-link\" target={props.socials.rss.Target} href={props.socials.rss.Url}>\r\n <p>{props.socials.rssCaption}</p>\r\n </a>\r\n }\r\n\r\n {props.socials && \r\n <div className=\"social-links\">\r\n <ul>\r\n {props.socials.facebook &&\r\n <li>\r\n <a href={props.socials.facebook.Url} target=\"_blank\"><img src=\"/images/icons/fb.svg\" alt=\"facebook icon\" /></a>\r\n </li>\r\n }\r\n {props.socials.instagram &&\r\n <li>\r\n <a href={props.socials.instagram.Url} target=\"_blank\"><img src=\"/images/icons/ig.svg\" alt=\"instagram icon\" /></a>\r\n </li>\r\n }\r\n {props.socials.linkedin &&\r\n <li>\r\n <a href={props.socials.linkedin.Url} target=\"_blank\"><img src=\"/images/icons/ln.svg\" alt=\"linked-in icon\" /></a>\r\n </li>\r\n }\r\n {props.socials.twitter &&\r\n <li>\r\n <a href={props.socials.twitter.Url} target=\"_blank\"><img src=\"/images/icons/tw.svg\" alt=\"twitter icon\" /></a>\r\n </li>\r\n }\r\n {props.socials.youtube &&\r\n <li>\r\n <a href={props.socials.youtube.Url} target=\"_blank\"><img src=\"/images/icons/yt.svg\" alt=\"youtube icon\" /></a>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </aside>\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default ContactMapApp;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport ContactMapApp from \"./ContactMapApp.jsx\";\r\n\r\nexport default function renderContactMap() {\r\n document.querySelectorAll(\".js-contact-map\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<ContactMapApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import React, { useState } from \"react\";\r\n\r\nfunction AccordionItemTitle(props) {\r\n const isOpen = props.index === props.activeIndex;\r\n\r\n return (\r\n <div\r\n className={`contentaccordion--title ${isOpen ? \"open\" : \"\"}`}\r\n onClick={() => props.onClick(props.index)}\r\n >\r\n <h3>{props.title}</h3>\r\n\r\n {isOpen && (\r\n <div className=\"contentaccordion--content-mobile rich-content\">\r\n <div dangerouslySetInnerHTML={{ __html: props.content.text }} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction AccordionItemContent(props) {\r\n const isOpen = props.index === props.activeIndex;\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <div className=\"contentaccordion--content rich-content\">\r\n <h3 className=\"h3-alt-lg\">{props.title}</h3>\r\n <div dangerouslySetInnerHTML={{ __html: props.content.text }} />\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nfunction AccordionItemImage(props) {\r\n const isOpen = props.index === props.activeIndex;\r\n\r\n return (\r\n <>\r\n {isOpen && (\r\n <div className=\"contentaccordion--image vertical-2\">\r\n <img src={props.content.image} alt={props.content.alt} />\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nfunction AccordionList(props) {\r\n return (\r\n <div className=\"contentaccordion--list\">\r\n {props.items.map((item, index) => (\r\n <AccordionItemTitle\r\n key={index}\r\n index={index}\r\n title={item.title}\r\n content={item.content}\r\n activeIndex={props.activeIndex}\r\n onClick={props.onClick}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nfunction ContentAccordion(props) {\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n\r\n const handleItemToggle = (index) => {\r\n setActiveIndex((prevActiveIndex) =>\r\n prevActiveIndex === index ? prevActiveIndex : index\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"contentaccordion\">\r\n <div className=\"contentaccordion--list-image\">\r\n <div className=\"contentaccordion--list-wrapper\">\r\n <AccordionList\r\n items={props.items}\r\n onClick={handleItemToggle}\r\n activeIndex={activeIndex}\r\n />\r\n </div>\r\n {props.items.map((item, index) => (\r\n <AccordionItemImage\r\n key={index}\r\n index={index}\r\n content={item.content}\r\n activeIndex={activeIndex}\r\n />\r\n ))}\r\n </div>\r\n <div className=\"contentaccordion--wrapper\">\r\n <AccordionList\r\n items={props.items}\r\n onClick={handleItemToggle}\r\n activeIndex={activeIndex}\r\n />\r\n\r\n {props.items.map((item, index) => (\r\n <AccordionItemContent\r\n key={index}\r\n index={index}\r\n title={item.title}\r\n content={item.content}\r\n activeIndex={activeIndex}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ContentAccordion;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport ContentAccordion from \"./ContentAccordionApp.jsx\";\r\n\r\nexport default function renderTabbedText() {\r\n document.querySelectorAll(\".js-content-accordion\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<ContentAccordion {...dataModel} />, mount);\r\n });\r\n}\r\n","import React from \"react\";\r\n\r\nconst CtaNav = ({ link }) => {\r\n return (\r\n <div className=\"ctanav nav-padding nav-items-md\">\r\n {link && <a href={link.url}>{link.name}</a>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CtaNav;\r\n","import React, { useRef } from \"react\";\r\nimport Slider from \"react-slick\";\r\nimport { IconArrowSmall } from \"../Common\";\r\n\r\nconst FeatureCarousel = ({ features }) => {\r\n const carousel = useRef();\r\n const next = (e) => {\r\n e.preventDefault();\r\n carousel?.current?.slickNext();\r\n };\r\n const prev = (e) => {\r\n e.preventDefault();\r\n carousel?.current?.slickPrev();\r\n };\r\n\r\n const carouselSettings = {\r\n dots: false,\r\n infinite: false,\r\n speed: 500,\r\n slidesToShow: 4,\r\n slidesToScroll: 1,\r\n arrows: false,\r\n responsive: [\r\n {\r\n breakpoint: 740,\r\n settings: {\r\n initialSlide: 0,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n infinite: false,\r\n dots: true,\r\n },\r\n },\r\n {\r\n breakpoint: 980,\r\n settings: {\r\n initialSlide: 0,\r\n slidesToShow: 3,\r\n slidesToScroll: 1,\r\n infinite: false,\r\n dots: true,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return (\r\n <section>\r\n <div className=\"featurecarousel\">\r\n <div className=\"featurecarousel--hero--wrapper\">\r\n <img src={features.background} alt={features.backgroundAlt} />\r\n <div className=\"featurecarousel--hero\">\r\n <div className=\"featurecarousel--title\">\r\n <h2 className=\"h1\">{features.title}</h2>\r\n <p dangerouslySetInnerHTML={{ __html: features.subTitle }}></p>\r\n </div>\r\n {features.items.length > 1 && (\r\n <div className=\"featurecarousel--nav\">\r\n <a href=\"#\" onClick={prev}>\r\n <IconArrowSmall direction=\"left\" />\r\n </a>\r\n <a href=\"#\" onClick={next}>\r\n <IconArrowSmall direction=\"right\" />\r\n </a>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n <div className=\"featurecarousel--carousel\">\r\n <Slider {...carouselSettings} ref={carousel}>\r\n {features.items.map((item) => (\r\n <div key={item.title} className=\"featurecarousel--item\">\r\n <img src={item.image} alt={item.alt} />\r\n <a href={item.link}>\r\n <h3 className=\"h3-alt-lg\">{item.title}</h3>\r\n </a>\r\n <span className=\"overline-alt\">{item.tag}</span>\r\n <p>{item.text}</p>\r\n </div>\r\n ))}\r\n </Slider>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default FeatureCarousel;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport FeatureCarouselApp from \"./FeatureCarouselApp.jsx\";\r\n\r\nexport default function renderFeatureCarousel() {\r\n document.querySelectorAll(\".js-feature-carousel\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<FeatureCarouselApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import React, { useState, useMemo } from \"react\";\r\nimport { Marker } from \"@react-google-maps/api\";\r\nimport Map from \"../Common/Map/index.jsx\";\r\n\r\nconst LocationsMap = (data) => {\r\n const locations = data.tabs;\r\n const tab1 = locations[0],\r\n tab2 = locations[1];\r\n\r\n const [pins, setPins] = useState(\"usa\");\r\n const center = useMemo(() => {\r\n if (pins === \"usa\") {\r\n return { lat: 39.8283, lng: -98.5795 };\r\n } else if (pins === \"canada\") {\r\n return { lat: 56.1304, lng: -106.3468 };\r\n }\r\n }, [pins]);\r\n\r\n const clickLocation = function(url){\r\n window.location = url;\r\n }\r\n\r\n const zoom = 4;\r\n const customClass = \"locationsmap__map\";\r\n const icon = \"/images/icons/map-pin.png\";\r\n\r\n const AllPins = getAllPins([tab1, tab2]);\r\n\r\n return (\r\n <div className=\"locationsmap\">\r\n <Map zoom={zoom} center={center} customClass={customClass}>\r\n {AllPins.map((pin, index) => {\r\n return (\r\n <Marker\r\n key={pin.url}\r\n position={{ lat: pin.latitude, lng: pin.longitude }}\r\n icon={icon}\r\n onClick={() => clickLocation(pin.url)}\r\n title={pin.name}\r\n />\r\n );\r\n })}\r\n </Map>\r\n\r\n <div className=\"locationsmap--list\">\r\n <div className=\"locationsmap--categories\">\r\n <div\r\n onClick={() => setPins(\"usa\")}\r\n className={`locationsmap--categories-item ${\r\n pins === \"usa\" ? \"active\" : \"\"\r\n }`}\r\n >\r\n <h2 className={`h2-alt ${pins === \"usa\" ? \"active\" : \"\"}`}>\r\n {tab1.name}\r\n </h2>\r\n </div>\r\n <div\r\n onClick={() => setPins(\"canada\")}\r\n className={`locationsmap--categories-item ${\r\n pins === \"canada\" ? \"active\" : \"\"\r\n }`}\r\n >\r\n <h2 className={`h2-alt ${pins === \"canada\" ? \"active\" : \"\"}`}>\r\n {tab2.name}\r\n </h2>\r\n </div>\r\n <div className=\"locationsmap--categories-item\">\r\n <h2 className=\"h2-alt\">\r\n <a href={data.link.url}>{data.link.name}</a>\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <section className=\"locationsmap--lists\">\r\n <div\r\n onClick={() => setPins(\"usa\")}\r\n className={`locationsmap--categories-item ${\r\n pins === \"usa\" ? \"active\" : \"\"\r\n }`}\r\n >\r\n <h2 className={`h2-alt ${pins === \"usa\" ? \"active\" : \"\"}`}>US</h2>\r\n </div>\r\n <div className={`list ${pins === \"usa\" ? \"active\" : \"\"}`}>\r\n <ul>\r\n {tab1.locations.map((state, index) => {\r\n return (\r\n <li key={index}>\r\n <h3 className=\"h3-alt\">{state.state}</h3>\r\n <ul>\r\n {state.offices.map((office, index) => (\r\n <li key={index}>\r\n <a href={office.url}>{office.name}</a>\r\n </li>\r\n ))}\r\n </ul>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n <div\r\n onClick={() => setPins(\"canada\")}\r\n className={`locationsmap--categories-item ${\r\n pins === \"canada\" ? \"active\" : \"\"\r\n }`}\r\n >\r\n <h2 className={`h2-alt ${pins === \"canada\" ? \"active\" : \"\"}`}>\r\n {tab2.name}\r\n </h2>\r\n </div>\r\n <div className={`list ${pins === \"canada\" ? \"active\" : \"\"}`}>\r\n <ul>\r\n {tab2.locations.map((state, index) => {\r\n return (\r\n <li key={index}>\r\n <h3 className=\"h3-alt\">{state.state}</h3>\r\n <ul>\r\n {state.offices.map((office, index) => (\r\n <li key={index}>\r\n <a href={office.url}>{office.name}</a>\r\n </li>\r\n ))}\r\n </ul>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n <div className=\"locationsmap--categories-item\">\r\n <h2 className=\"h2-alt\">\r\n <a href={data.link.url}>{data.link.name}</a>\r\n </h2>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nfunction getAllPins(tabs) {\r\n let allPins = [];\r\n\r\n for (let i = 0; i < tabs.length; i++) {\r\n let thisTab = tabs[i];\r\n if (!thisTab || !thisTab.locations) {\r\n continue;\r\n }\r\n\r\n let thisTabPins = thisTab.locations\r\n .map((state) => {\r\n return state.offices.map((office) => {\r\n return office;\r\n });\r\n })\r\n .flat();\r\n\r\n allPins = allPins.concat(thisTabPins);\r\n }\r\n\r\n return allPins;\r\n}\r\n\r\nexport default LocationsMap;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport LocationsMapApp from \"./LocationsMapApp.jsx\";\r\n\r\nexport default function renderLocationsMap() {\r\n document.querySelectorAll(\".js-locations-map\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<LocationsMapApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import React from \"react\";\r\n\r\nconst Logo = ({ logo }) => {\r\n return (\r\n <div className=\"logo nav-padding\">\r\n {logo && (\r\n <a href=\"/\">\r\n <img src={logo.url} alt={logo.alt} />\r\n </a>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Logo;\r\n","import React from \"react\";\r\nimport MultilevelNav from \"../Common/MultiLevelNav/index.jsx\";\r\nimport SubNav from \"../SubNav/SubNav.jsx\";\r\n\r\nconst MainNav = ({\r\n data,\r\n handleMouseEnter,\r\n handleMouseLeave,\r\n handleFocus,\r\n handleBlur,\r\n}) => {\r\n const items = data.primary;\r\n\r\n return (\r\n <nav className=\"mainnav nav-padding\" aria-label=\"Primary\" role=\"navigation\">\r\n <ul className=\"mainnav--top-items mainnav--desktop nav-items\">\r\n {items.map((item) => {\r\n return item.children && item.children.length && !item.mobile ? (\r\n <li\r\n key={item.id}\r\n className=\"has-sub\"\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n >\r\n <a href={item.url}>{item.name}</a>\r\n {item.children && <SubNav subItems={item.children} />}\r\n </li>\r\n ) : (\r\n !item.mobile && (\r\n <li key={item.id}>\r\n <a href={item.url}>{item.name}</a>\r\n </li>\r\n )\r\n );\r\n })}\r\n </ul>\r\n\r\n <MultilevelNav data={items} />\r\n </nav>\r\n );\r\n};\r\n\r\nexport default MainNav;\r\n","import React from \"react\";\r\nimport { IconClose, IconHamburger, IconSearch } from \"../Common/index.js\";\r\nimport CtaNav from \"../CtaNav/CtaNav.jsx\";\r\nimport MainNav from \"../MainNav/MainNav.jsx\";\r\nimport ToolNav from \"../ToolNav/ToolNav.jsx\";\r\nimport { dictionary, dictionaryKeys } from \"../../common/internationalization\";\r\n\r\nconst MobileNav = ({ primaryData, toolData, handleClick, isOpen }) => {\r\n return (\r\n <div className=\"mobilenav\">\r\n <button onClick={handleClick}>\r\n {isOpen ? <IconClose /> : <IconHamburger />}\r\n </button>\r\n\r\n <div className={`mobilenav--container ${isOpen ? \"open\" : \"\"}`}>\r\n <div className=\"search\">\r\n <a href=\"/search\">\r\n <IconSearch viewBox=\"0 0 12 13\" />\r\n {dictionary(dictionaryKeys.Search)}\r\n </a>\r\n </div>\r\n <MainNav data={primaryData} />\r\n <ToolNav data={toolData} />\r\n <CtaNav link={primaryData.connectLink} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MobileNav;\r\n","import React from \"react\";\r\nimport { IconArrowSmall } from \"../Common/index.js\";\r\n\r\nconst NavPromo = ({ data }) => {\r\n return (\r\n <>\r\n {data && (\r\n <div className=\"subnav--promo\">\r\n {\r\n data.title && \r\n (<a href={data.url} className=\"link-alt-2\">\r\n {data.title}\r\n <IconArrowSmall fill={\"var(--midnight-blue)\"} />\r\n </a>\r\n )}\r\n \r\n <img src={data.image} alt={data.alt} />\r\n <p>{data.text}</p>\r\n\r\n {\r\n data.linkText && \r\n (<a href={data.linkUrl || \"#\"} className=\"link-alt\">\r\n {data.linkText}\r\n <IconArrowSmall fill={\"var(--midnight-blue)\"} /> \r\n </a>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default NavPromo;\r\n","import React, { useState, useRef } from \"react\";\r\nimport useClickOutside from \"../Common/Hooks/useClickOutside.jsx\";\r\nimport CtaNav from \"../CtaNav/CtaNav.jsx\";\r\nimport Logo from \"../Logo/Logo.jsx\";\r\nimport MainNav from \"../MainNav/MainNav.jsx\";\r\nimport MobileNav from \"../MobileNav/MobileNav.jsx\";\r\nimport ToolNav from \"../ToolNav/ToolNav.jsx\";\r\n\r\nconst PrimaryNav = ({ primaryData, toolData }) => {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleClick = () => {\r\n setIsOpen(!isOpen);\r\n };\r\n\r\n const handleMouseEnter = () => {\r\n setIsHovered(true);\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n setIsHovered(false);\r\n };\r\n\r\n const handleFocus = () => {\r\n setIsFocused(true);\r\n };\r\n\r\n const handleBlur = () => {\r\n setIsFocused(false);\r\n };\r\n\r\n const navRef = useRef(null);\r\n const clickedOutside = useClickOutside(navRef);\r\n clickedOutside && isOpen && handleClick();\r\n\r\n return (\r\n <>\r\n <header ref={navRef} className=\"primarynav\">\r\n <div className=\"primarynav--wrapper\">\r\n <Logo logo={primaryData.logo} />\r\n <div className=\"primarynav--nav-container\">\r\n <MainNav\r\n data={primaryData}\r\n handleMouseEnter={handleMouseEnter}\r\n handleMouseLeave={handleMouseLeave}\r\n handleFocus={handleFocus}\r\n handleBlur={handleBlur}\r\n />\r\n <ToolNav data={toolData} />\r\n <CtaNav link={primaryData.connectLink} />\r\n </div>\r\n <MobileNav\r\n primaryData={primaryData}\r\n toolData={toolData}\r\n handleClick={handleClick}\r\n isOpen={isOpen}\r\n />\r\n </div>\r\n </header>\r\n <div\r\n className={`nav-overlay ${\r\n isHovered || isFocused || isOpen ? \"show\" : \"\"\r\n }`}\r\n ></div>\r\n </>\r\n );\r\n};\r\n\r\nexport default PrimaryNav;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport PrimaryNav from \"./PrimaryNavApp.jsx\";\r\n\r\nexport default function renderPrimaryNav() {\r\n document.querySelectorAll(\".js-primary-nav\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<PrimaryNav {...dataModel} />, mount);\r\n });\r\n}\r\n","import React, { useRef } from \"react\";\r\nimport useTallestNodeValue from \"../Common/Hooks/useTallestNodeHeight.jsx\";\r\nimport { IconArrowSmall } from \"../Common/index.js\";\r\nimport NavPromo from \"../NavPromo/NavPromo.jsx\";\r\n\r\nconst SubNav = ({ subItems }) => {\r\n const subSub = useRef(null);\r\n const tallestNodeValue = useTallestNodeValue(subSub, \".subnav--child\");\r\n const subNavHeight = tallestNodeValue === 0 ? 590 : tallestNodeValue;\r\n\r\n return (\r\n <div className=\"subnav\">\r\n <div className=\"subnav--wrapper\">\r\n <div\r\n className=\"subnav--nav\"\r\n style={{ height: subNavHeight + \"px\", minHeight: \"425px\" }}\r\n >\r\n <ul className=\"subnav--parent\" ref={subSub}>\r\n {subItems.map((items, index) => {\r\n return (\r\n <li key={index} className={items.isDefault ? \"default\" : \"\"}>\r\n <a href={items.url}>{items.name}</a>\r\n <IconArrowSmall fill={\"var(--midnight-blue)\"} />\r\n {items.children && (\r\n <ul className=\"subnav--child\">\r\n {items.children.map(\r\n (item) =>\r\n item.name && (\r\n <li key={item.id}>\r\n <div>\r\n <span>\r\n <img src={item.icon} alt={item.alt} />\r\n </span>\r\n <a href={item.url}>{item.name}</a>\r\n {item.arrow && (\r\n <IconArrowSmall\r\n fill={\"var(--midnight-blue)\"}\r\n />\r\n )}\r\n </div>\r\n <p>{item.text}</p>\r\n </li>\r\n )\r\n )}\r\n {items?.children[0]?.promoData && (\r\n <li className=\"subnav--promo-desktop\">\r\n <NavPromo data={items.children[0].promoData} />\r\n </li>\r\n )}\r\n </ul>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n <div className=\"subnav--child--container\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SubNav;\r\n","import React from \"react\";\r\nimport { Tab, Tabs, TabList, TabPanel } from \"react-tabs\";\r\nimport { IconArrowSmall } from \"../Common/\";\r\n\r\nconst TabbedTextApp = ({ tabs }) => {\r\n return (\r\n <section>\r\n <div className=\"tabbedtext\">\r\n {tabs.image && (\r\n <div className=\"tabbedtext--image\">\r\n <img src={tabs.image} alt={tabs.alt} />\r\n </div>\r\n )}\r\n\r\n <Tabs className=\"tabbedtext--tabs\">\r\n <TabList>\r\n {tabs.items.map((tab) => (\r\n <Tab key={tab.title}>{tab.title}</Tab>\r\n ))}\r\n </TabList>\r\n <div className=\"tabbedtext--tab\">\r\n {tabs.items.map((tab) => (\r\n <TabPanel key={tab.text}>\r\n <span className=\"overline\">{tab.tag}</span>\r\n <p className=\"body-lg vertical-md\">{tab.text}</p>\r\n {tab.link && (\r\n <a href={tab.link}>\r\n <IconArrowSmall viewBox=\"0 0 53 14\" />\r\n </a>\r\n )}\r\n </TabPanel>\r\n ))}\r\n </div>\r\n </Tabs>\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default TabbedTextApp;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport TabbedTextApp from \"./TabbedTextApp.jsx\";\r\n\r\nexport default function renderTabbedText() {\r\n document.querySelectorAll(\".js-tabbed-text\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<TabbedTextApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import React from \"react\";\r\nimport { IconLanguage, IconSearch, IconTool } from \"../Common/index.js\";\r\nimport MultilevelNav from \"../Common/MultiLevelNav/index.jsx\";\r\nimport { dictionary, dictionaryKeys } from \"../../common/internationalization\";\r\n\r\nconst ToolNav = ({ data }) => {\r\n return (\r\n <nav\r\n className=\"toolnav nav-padding nav-items-sm\"\r\n role=\"navigation\"\r\n aria-label=\"Tools\"\r\n >\r\n <MultilevelNav data={data.toolNav} />\r\n\r\n <ul className=\"toolnav--desktop\">\r\n {data.toolNav.map((item, i) => (\r\n <li\r\n key={i}\r\n className={item.children && item.children.length ? \"has-sub\" : \"\"}\r\n >\r\n <a href=\"#\">\r\n {\r\n {\r\n lang: <IconLanguage />,\r\n tool: <IconTool />,\r\n }[item.icon]\r\n }\r\n <span>{item.name}</span>\r\n </a>\r\n {item.children && item.children.length ? (\r\n <ul>\r\n {item.children.map((children, i) => (\r\n <li key={i}>\r\n <a href={children.url || \"#\"}>{children.name} </a>\r\n </li>\r\n ))}\r\n </ul>\r\n ) : null}\r\n </li>\r\n ))}\r\n\r\n <li className=\"toolnav--search\">\r\n <a href=\"/search\">\r\n <IconSearch className=\"desktop\" />{\" \"}\r\n <span>{dictionary(dictionaryKeys.Search)}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n );\r\n};\r\n\r\nexport default ToolNav;\r\n","import React, { useState } from \"react\";\r\nimport ReactPlayer from \"react-player\";\r\nimport { IconPlay } from \"../Common\";\r\n\r\nconst VideoPlayer = ({ videoData }) => {\r\n const [playing, setPlaying] = useState(false);\r\n\r\n const handleClick = () => {\r\n setPlaying(!playing);\r\n };\r\n\r\n return (\r\n <div className=\"videoplayer o-ratio o-ratio--16:9\">\r\n <ReactPlayer\r\n url={videoData.url}\r\n playing={playing}\r\n controls={true}\r\n className=\"videoplayer--player\"\r\n onPause={() => setPlaying(false)}\r\n width=\"100%\"\r\n height=\"100%\"\r\n />\r\n {videoData.image && (\r\n <div\r\n className={`videoplayer--overlay ${playing ? \"hide\" : \"\"}`}\r\n onClick={handleClick}\r\n >\r\n <img src={videoData.image} alt={videoData.alt} />\r\n <button className=\"videoplayer--button\">\r\n <IconPlay width=\"120px\" height=\"118px\" />\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoPlayer;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport VideoPlayerApp from \"../VideoPlayer/VideoPlayerApp.jsx\";\r\n\r\nexport default function renderVideoPlayer() {\r\n document.querySelectorAll(\".js-video-player\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<VideoPlayerApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import React from \"react\";\r\nimport VideoPlayerApp from \"../VideoPlayer/VideoPlayerApp.jsx\";\r\nimport { IconArrowSmall } from \"../Common\";\r\n\r\nconst VideoPromo = (props) => {\r\n return (\r\n <div className=\"videopromo\">\r\n <VideoPlayerApp videoData={props} />\r\n <div className=\"videopromo--content\">\r\n <div\r\n className=\"h2-content\"\r\n dangerouslySetInnerHTML={{ __html: props.title }}\r\n />\r\n\r\n <a href={props.linkUrl}>\r\n {props.linkText}\r\n <IconArrowSmall />\r\n </a>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default VideoPromo;\r\n","import React from \"react\";\r\nimport ReactDom from \"react-dom\";\r\n\r\nimport VideoPromoApp from \"../VideoPromo/VideoPromoApp.jsx\";\r\n\r\nexport default function renderVideoPromo() {\r\n document.querySelectorAll(\".js-video-promo\").forEach((mount) => {\r\n const dataModel = JSON.parse(mount.dataset.model);\r\n\r\n ReactDom.render(<VideoPromoApp {...dataModel} />, mount);\r\n });\r\n}\r\n","import \"./polyfill\";\r\n\r\nimport renderPrimaryNav from \"./components/PrimaryNav/renderPrimaryNav.jsx\";\r\nimport renderTabbedText from \"./components/TabbedText/renderTabbedText.jsx\";\r\nimport renderClientQuotes from \"./components/ClientQuotes/renderClientQuotes.jsx\";\r\nimport renderFeatureCarousel from \"./components/FeatureCarousel/renderFeatureCarousel.jsx\";\r\nimport renderVideoPlayer from \"./components/VideoPlayer/renderVideoPlayer.jsx\";\r\nimport renderContentAccordion from \"./components/ContentAccordion/renderContentAccordion.jsx\";\r\nimport renderOfficeLocations from \"./components/LocationsMap/renderLocationsMap.jsx\";\r\nimport renderContactMap from \"./components/ContactMap/renderContactMap.jsx\";\r\nimport renderVideoPromo from \"./components/VideoPromo/renderVideoPromo.jsx\";\r\nimport renderAccordionTabs from \"./components/AccordionTabs/renderAccordionTabs.jsx\";\r\nimport renderAccordionCarousel from \"./components/AccordionCarousel/renderAccordionCarousel.jsx\"\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n // JS apps\r\n renderAccordionTabs();\r\n renderPrimaryNav();\r\n renderTabbedText();\r\n renderClientQuotes();\r\n renderAccordionCarousel();\r\n renderFeatureCarousel();\r\n renderVideoPlayer();\r\n renderContentAccordion();\r\n renderOfficeLocations();\r\n renderContactMap();\r\n renderVideoPromo();\r\n});\r\n\r\n//render anything that may not have HTML added to it on DOMContentLoaded.\r\n//can be limited to the ancestor that such components will show up under.\r\nexport default function lateRender(ancestor) {\r\n if (!ancestor) {\r\n ancestor = document;\r\n }\r\n\r\n renderClientQuotes(ancestor);\r\n renderAccordionCarousel(ancestor);\r\n}\r\n","(function (ElementProto) {\r\n if (typeof ElementProto.matches !== \"function\") {\r\n ElementProto.matches =\r\n ElementProto.msMatchesSelector ||\r\n ElementProto.mozMatchesSelector ||\r\n ElementProto.webkitMatchesSelector ||\r\n function matches(selector) {\r\n var element = this;\r\n var elements = (\r\n element.document || element.ownerDocument\r\n ).querySelectorAll(selector);\r\n var index = 0;\r\n\r\n while (elements[index] && elements[index] !== element) {\r\n ++index;\r\n }\r\n\r\n return Boolean(elements[index]);\r\n };\r\n }\r\n\r\n if (typeof ElementProto.closest !== \"function\") {\r\n ElementProto.closest = function closest(selector) {\r\n var element = this;\r\n\r\n while (element && element.nodeType === 1) {\r\n if (element.matches(selector)) {\r\n return element;\r\n }\r\n\r\n element = element.parentNode;\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n})(window.Element.prototype);\r\n","import \"core-js/features/object/assign.js\";\r\nimport \"core-js/features/array/find.js\";\r\nimport \"core-js/features/array/find-index.js\";\r\nimport \"core-js/features/array/fill.js\";\r\nimport \"core-js/features/array/includes.js\";\r\nimport \"core-js/features/array/from.js\";\r\nimport \"core-js/features/promise/index.js\";\r\nimport \"core-js/features/promise/finally.js\";\r\nimport \"core-js/features/symbol\";\r\n\r\n// window.fetch\r\nimport \"whatwg-fetch\";\r\n\r\n// for react 16\r\n// https://facebook.github.io/react/blog/2017/09/26/react-v16.0.html#javascript-environment-requirements\r\nimport \"core-js/features/map/index.js\";\r\nimport \"core-js/features/set/index.js\";\r\n","// Note: object-fit has been refactored to be applied on-demand instead of automatically\r\n// You may invoke it directly in your scripts\r\n\r\nimport \"./es6-polyfill\";\r\nimport \"./closest\";\r\nimport \"./popstate-event\";\r\n\r\n//NodeList forEach polyfill\r\nif (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n}\r\n\r\n// Jonathan 10-2019 - this was missing for some reason. I'm adding it, but leaving it commented out.\r\n// import { objectFitPolyfill } from \"./object-fit.js\";\r\n// if (\"objectFit\" in document.documentElement.style === false) {\r\n// objectFitPolyfill();\r\n// }\r\n\r\nimport svg4everybody from \"svg4everybody\";\r\nsvg4everybody();\r\n","// IE11 does not support using Event constructors (new Event())\r\n// If we cannot use the constructor, we'll use a re-implementation of PopStateEvent\r\n// instead of the native one.\r\n\r\n// This was derived from the CustomEvent polyfill on MDN: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\r\n\r\n(function () {\r\n function PopStateEvent(event, params) {\r\n params = params || {\r\n bubbles: false,\r\n cancelable: false,\r\n state: undefined,\r\n };\r\n var evt = document.createEvent(\"PopStateEvent\");\r\n evt.initPopStateEvent(\r\n event,\r\n params.state,\r\n params.bubbles,\r\n params.cancelable,\r\n );\r\n return evt;\r\n }\r\n\r\n PopStateEvent.prototype = window.PopStateEvent.prototype;\r\n\r\n try {\r\n new window.PopStateEvent(\"test\");\r\n } catch (error) {\r\n window.PopStateEvent = PopStateEvent;\r\n }\r\n})();\r\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/** @license React v17.0.2\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (\"local\" !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = 0xeac7;\nvar REACT_PORTAL_TYPE = 0xeaca;\nexports.Fragment = 0xeacb;\nvar REACT_STRICT_MODE_TYPE = 0xeacc;\nvar REACT_PROFILER_TYPE = 0xead2;\nvar REACT_PROVIDER_TYPE = 0xeacd;\nvar REACT_CONTEXT_TYPE = 0xeace;\nvar REACT_FORWARD_REF_TYPE = 0xead0;\nvar REACT_SUSPENSE_TYPE = 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = 0xead8;\nvar REACT_MEMO_TYPE = 0xead3;\nvar REACT_LAZY_TYPE = 0xead4;\nvar REACT_BLOCK_TYPE = 0xead9;\nvar REACT_SERVER_BLOCK_TYPE = 0xeada;\nvar REACT_FUNDAMENTAL_TYPE = 0xead5;\nvar REACT_SCOPE_TYPE = 0xead7;\nvar REACT_OPAQUE_ID_TYPE = 0xeae0;\nvar REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\nvar REACT_OFFSCREEN_TYPE = 0xeae2;\nvar REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor('react.element');\n REACT_PORTAL_TYPE = symbolFor('react.portal');\n exports.Fragment = symbolFor('react.fragment');\n REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');\n REACT_PROFILER_TYPE = symbolFor('react.profiler');\n REACT_PROVIDER_TYPE = symbolFor('react.provider');\n REACT_CONTEXT_TYPE = symbolFor('react.context');\n REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');\n REACT_SUSPENSE_TYPE = symbolFor('react.suspense');\n REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');\n REACT_MEMO_TYPE = symbolFor('react.memo');\n REACT_LAZY_TYPE = symbolFor('react.lazy');\n REACT_BLOCK_TYPE = symbolFor('react.block');\n REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');\n REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');\n REACT_SCOPE_TYPE = symbolFor('react.scope');\n REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');\n REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');\n REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');\n}\n\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === exports.Fragment || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case exports.Fragment:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentName(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: _assign({}, props, {\n value: prevLog\n }),\n info: _assign({}, props, {\n value: prevInfo\n }),\n warn: _assign({}, props, {\n value: prevWarn\n }),\n error: _assign({}, props, {\n value: prevError\n }),\n group: _assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: _assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: _assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at ');\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_BLOCK_TYPE:\n return describeFunctionComponentFrame(type._render);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentName(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentName(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentName(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === exports.Fragment) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (\"local\" === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJmcm9udGVuZC9qcy9jb21tb24vaW50ZXJuYXRpb25hbGl6YXRpb24uanMiLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0FjY29yZGlvbkNhcm91c2VsL0FjY29yZGlvbkNhcm91c2VsQXBwLmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvQWNjb3JkaW9uQ2Fyb3VzZWwvcmVuZGVyQWNjb3JkaW9uQ2Fyb3VzZWwuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9BY2NvcmRpb25UYWJzL0FjY29yZGlvblRhYnNBcHAuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9BY2NvcmRpb25UYWJzL3JlbmRlckFjY29yZGlvblRhYnMuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9DbGllbnRRdW90ZXMvQ2xpZW50UXVvdGVzQXBwLmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvQ2xpZW50UXVvdGVzL3JlbmRlckNsaWVudFF1b3Rlcy5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0NvbW1vbi9Ib29rcy91c2VDbGlja091dHNpZGUuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Db21tb24vSG9va3MvdXNlTWVkaWFRdWVyeS5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0NvbW1vbi9Ib29rcy91c2VUYWxsZXN0Tm9kZUhlaWdodC5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0NvbW1vbi9JY29uLmpzIiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Db21tb24vTWFwL01hcFN0eWxlcy5qcyIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvQ29tbW9uL01hcC9pbmRleC5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0NvbW1vbi9NdWx0aUxldmVsTmF2L2luZGV4LmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvQ29tbW9uL2luZGV4LmpzIiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Db250YWN0TWFwL0NvbnRhY3RNYXBBcHAuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Db250YWN0TWFwL3JlbmRlckNvbnRhY3RNYXAuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Db250ZW50QWNjb3JkaW9uL0NvbnRlbnRBY2NvcmRpb25BcHAuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Db250ZW50QWNjb3JkaW9uL3JlbmRlckNvbnRlbnRBY2NvcmRpb24uanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9DdGFOYXYvQ3RhTmF2LmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvRmVhdHVyZUNhcm91c2VsL0ZlYXR1cmVDYXJvdXNlbEFwcC5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0ZlYXR1cmVDYXJvdXNlbC9yZW5kZXJGZWF0dXJlQ2Fyb3VzZWwuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Mb2NhdGlvbnNNYXAvTG9jYXRpb25zTWFwQXBwLmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvTG9jYXRpb25zTWFwL3JlbmRlckxvY2F0aW9uc01hcC5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL0xvZ28vTG9nby5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL01haW5OYXYvTWFpbk5hdi5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL01vYmlsZU5hdi9Nb2JpbGVOYXYuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9OYXZQcm9tby9OYXZQcm9tby5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL1ByaW1hcnlOYXYvUHJpbWFyeU5hdkFwcC5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL1ByaW1hcnlOYXYvcmVuZGVyUHJpbWFyeU5hdi5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL1N1Yk5hdi9TdWJOYXYuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9UYWJiZWRUZXh0L1RhYmJlZFRleHRBcHAuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9UYWJiZWRUZXh0L3JlbmRlclRhYmJlZFRleHQuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9Ub29sTmF2L1Rvb2xOYXYuanN4IiwiZnJvbnRlbmQvanMvY29tcG9uZW50cy9WaWRlb1BsYXllci9WaWRlb1BsYXllckFwcC5qc3giLCJmcm9udGVuZC9qcy9jb21wb25lbnRzL1ZpZGVvUGxheWVyL3JlbmRlclZpZGVvUGxheWVyLmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvVmlkZW9Qcm9tby9WaWRlb1Byb21vQXBwLmpzeCIsImZyb250ZW5kL2pzL2NvbXBvbmVudHMvVmlkZW9Qcm9tby9yZW5kZXJWaWRlb1Byb21vLmpzeCIsImZyb250ZW5kL2pzL2luZGV4LmpzIiwiZnJvbnRlbmQvanMvcG9seWZpbGwvY2xvc2VzdC5qcyIsImZyb250ZW5kL2pzL3BvbHlmaWxsL2VzNi1wb2x5ZmlsbC5qcyIsImZyb250ZW5kL2pzL3BvbHlmaWxsL2luZGV4LmpzIiwiZnJvbnRlbmQvanMvcG9seWZpbGwvcG9wc3RhdGUtZXZlbnQuanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLGNBQWMsR0FBRztFQUM1QixZQUFZLEVBQUU7SUFDWixHQUFHLEVBQUUsZ0NB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QUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQztFQUFDLElBQUksQ0FBQztJQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7SUFBQyxDQUFDLEdBQUMsSUFBSTtJQUFDLENBQUMsR0FBQyxJQUFJO0VBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxLQUFHLENBQUMsR0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDO0VBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBRyxDQUFDLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFBQyxLQUFLLENBQUMsS0FBRyxDQUFDLENBQUMsR0FBRyxLQUFHLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQUMsSUFBRyxDQUFDLElBQUUsQ0FBQyxDQUFDLFlBQVksRUFBQyxLQUFJLENBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLFlBQVksRUFBQyxDQUFDLEVBQUMsS0FBSyxDQUFDLEtBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFBQyxPQUFNO0lBQUMsUUFBUSxFQUFDLENBQUM7SUFBQyxJQUFJLEVBQUMsQ0FBQztJQUFDLEdBQUcsRUFBQyxDQUFDO0lBQUMsR0FBRyxFQUFDLENBQUM7SUFBQyxLQUFLLEVBQUMsQ0FBQztJQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7RUFBTyxDQUFDO0FBQUE7QUFBQyxPQUFPLENBQUMsR0FBRyxHQUFDLENBQUM7QUFBQyxPQUFPLENBQUMsSUFBSSxHQUFDLENBQUM7OztBQ1R4VixZQUFZOztBQUVaLElBQUksT0FBTyxLQUFLLFlBQVksRUFBRTtFQUM1QixNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQztBQUN2RSxDQUFDLE1BQU07RUFDTCxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQztBQUNwRSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxyXG4gKiBEaWN0aW9uYXJ5IG1hcHBpbmdcclxuICpcclxuICogRXhhbXBsZSBlbnRyeTpcclxuICogQmFja1RvUGVvcGxlOiB7IGtleTogXCIvQXNzb2NpYXRlIEJpb3MvQmFjayB0byBQZW9wbGVcIiwgZGVmYXVsdDogXCJCYWNrIHRvIFBlb3BsZVwiIH1cclxuICpcclxuICogVGhlIHRpdGxlIHNob3VsZCBiZSBhIGZyaWVuZGx5IGNvZGVuYW1lIGZvciB0aGUgZGljdGlvbmFyeSBlbnRyeSxcclxuICogdGhlIGtleSBzaG91bGQgYmUgdGhlIHBhdGggb2YgdGhlIGRpY3Rpb25hcnkgZW50cnkgaXRlbSBpbiBTaXRlY29yZVxyXG4gKiAobm90IGluY2x1ZGluZyB0aGUgZGljdGlvbmFyeSBpdGVtIHBhdGgpXHJcbiAqIGFuZCB0aGUgZGVmYXVsdCBzaG91bGQgYmUgYSBkZWZhdWx0IHZhbHVlIHRvIHNob3cgaW4gU3Rvcnlib29rIG9yXHJcbiAqIGlmIHRoZSBkaWN0aW9uYXJ5IGlzIG5vbi1mdW5jdGlvbmFsLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRpY3Rpb25hcnlLZXlzID0ge1xyXG4gIEJhY2tUb1Blb3BsZToge1xyXG4gICAga2V5OiBcIi9Bc3NvY2lhdGUgQmlvcy9CYWNrIHRvIFBlb3BsZVwiLFxyXG4gICAgZGVmYXVsdDogXCJCYWNrIHRvIFBlb3BsZVwiLFxyXG4gIH0sXHJcblxyXG4gIEljb25DbG9zZTogeyBrZXk6IFwiL0ljb25zL0Nsb3NlXCIsIGRlZmF1bHQ6IFwiQ2xvc2VcIiB9LFxyXG4gIEljb25FbWFpbDogeyBrZXk6IFwiL0ljb25zL0VtYWlsXCIsIGRlZmF1bHQ6IFwiRW1haWxcIiB9LFxyXG4gIEljb25MYW5ndWFnZTogeyBrZXk6IFwiL0ljb25zL0xhbmd1YWdlXCIsIGRlZmF1bHQ6IFwiTGFuZ3VhZ2VcIiB9LFxyXG4gIEljb25NZW51OiB7IGtleTogXCIvSWNvbnMvTWVudVwiLCBkZWZhdWx0OiBcIk1lbnVcIiB9LFxyXG4gIEljb25QbGF5OiB7IGtleTogXCIvSWNvbnMvUGxheVwiLCBkZWZhdWx0OiBcIlBsYXlcIiB9LFxyXG4gIEljb25TZWFyY2g6IHsga2V5OiBcIi9JY29ucy9TZWFyY2hcIiwgZGVmYXVsdDogXCJTZWFyY2hcIiB9LFxyXG4gIEljb25Ub29sOiB7IGtleTogXCIvSWNvbnMvVG9vbFwiLCBkZWZhdWx0OiBcIlRvb2xcIiB9LFxyXG4gIEljb25WaWRlbzogeyBrZXk6IFwiL0ljb25zL1ZpZGVvXCIsIGRlZmF1bHQ6IFwiVmlkZW9cIiB9LFxyXG5cclxuICBTZWFyY2g6IHsga2V5OiBcIi9IZWFkZXIvU2VhcmNoXCIsIGRlZmF1bHQ6IFwiU2VhcmNoXCIgfSxcclxufTtcclxuXHJcbmNvbnN0IGRpY3Rpb25hcnlIYXNobWFwID0gZ2V0RnVsbERpY3Rpb25hcnkoKTtcclxuXHJcbmZ1bmN0aW9uIGdldEZ1bGxEaWN0aW9uYXJ5KCkge1xyXG4gIHZhciBkYXRhRGljdCA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKFwiZGF0YS1kaWN0aW9uYXJ5XCIpO1xyXG5cclxuICBpZiAoIWRhdGFEaWN0IHx8IGRhdGFEaWN0Lmxlbmd0aCA8IDUpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgIFwiSWYgb24gbGl2ZSBzaXRlLCBkaWN0aW9uYXJ5IGF0dHJpYnV0ZSBsaWtlbHkgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBWYWx1ZTogXCIsXHJcbiAgICAgIGRhdGFEaWN0LFxyXG4gICAgKTtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhRGljdCkuZW50cmllcztcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICpkaWN0aW9uYXJ5S2V5IHNob3VsZCBiZSBhIHByb3BlcnR5IG9mIGRpY3Rpb25hcnlLZXlzLlxyXG4gKmUuZy4gZGljdGlvbmFyeUtleXMuR29CYWNrXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGljdGlvbmFyeShkaWN0aW9uYXJ5S2V5KSB7XHJcbiAgaWYgKCFkaWN0aW9uYXJ5S2V5IHx8ICFkaWN0aW9uYXJ5S2V5LmtleSB8fCAhZGljdGlvbmFyeUtleS5kZWZhdWx0KSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwiRGljdGlvbmFyeSBrZXkgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHk6IFwiLCBkaWN0aW9uYXJ5S2V5KTtcclxuICB9XHJcblxyXG4gIHZhciBkaWN0aW9uYXJ5RW50cnkgPSBkaWN0aW9uYXJ5SGFzaG1hcFtkaWN0aW9uYXJ5S2V5LmtleV07XHJcblxyXG4gIGlmICghZGljdGlvbmFyeUVudHJ5KSB7XHJcbiAgICByZXR1cm4gZGljdGlvbmFyeUtleS5kZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRpY3Rpb25hcnlFbnRyeTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhbXBsZSB1c2FnZSBpbiBhIGNvbXBvbmVudDpcclxuICpcclxuICogY29uc3QgbGFiZWxzID0ge1xyXG4gKiAgIHNlYXJjaDogZGljdGlvbmFyeShkaWN0aW9uYXJ5S2V5cy5CYWNrVG9QZW9wbGUpXHJcbiAqIH07XHJcbiAqXHJcbiAqIHJldHVybiA8cD57bGFiZWxzLnNlYXJjaH08L3A+O1xyXG4gKi9cclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgU2xpZGVyIGZyb20gXCJyZWFjdC1zbGlja1wiO1xyXG5pbXBvcnQgeyBJY29uQXJyb3dTbWFsbCB9IGZyb20gXCIuLi9Db21tb25cIjtcclxuXHJcbmNvbnN0IEFjY29yZGlvbkNhcm91c2VsID0gKHsgc2xpZGVzIH0pID0+IHtcclxuXHJcbiAgY29uc3QgY2Fyb3VzZWwgPSB1c2VSZWYoKTtcclxuICBjb25zdCBuZXh0ID0gKGUpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNhcm91c2VsPy5jdXJyZW50Py5zbGlja05leHQoKTtcclxuICB9O1xyXG4gIGNvbnN0IHByZXYgPSAoZSkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY2Fyb3VzZWw/LmN1cnJlbnQ/LnNsaWNrUHJldigpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNhcm91c2VsU2V0dGluZ3MgPSB7XHJcbiAgICBkb3RzOiBmYWxzZSxcclxuICAgIGluZmluaXRlOiBmYWxzZSxcclxuICAgIHNwZWVkOiA1MDAsXHJcbiAgICBhcnJvd3M6IHRydWUsXHJcbiAgICBzbGlkZXNUb1Nob3c6IHNsaWRlcy5wZXJQYWdlLFxyXG4gICAgc2xpZGVzVG9TY3JvbGw6IDEsXHJcbiAgICByZXNwb25zaXZlOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBicmVha3BvaW50OiA3NDAsXHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgIGluaXRpYWxTbGlkZTogMCxcclxuICAgICAgICAgIHNsaWRlc1RvU2hvdzogMSxcclxuICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBicmVha3BvaW50OiA5ODAsXHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgIGluaXRpYWxTbGlkZTogMCxcclxuICAgICAgICAgIHNsaWRlc1RvU2hvdzogMyxcclxuICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGdldFNob3dBcnJvd3MgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gKCh3aW5kb3cuaW5uZXJXaWR0aCA8IDc0MCAmJiBzbGlkZXMuaXRlbXMubGVuZ3RoID4gMSkgfHwgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTgwICYmIHNsaWRlcy5pdGVtcy5sZW5ndGggPiAzKSB8fCBzbGlkZXMuaXRlbXMubGVuZ3RoID4gNSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSgwKTtcclxuICBjb25zdCBbc2hvd0Fycm93cywgc2V0U2hvd0Fycm93c10gPSB1c2VTdGF0ZShnZXRTaG93QXJyb3dzKCkpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xyXG4gICAgICBjb25zdCBzaG93ID0gZ2V0U2hvd0Fycm93cygpO1xyXG4gICAgICBjb25zb2xlLmxvZyhzaG93KTtcclxuICAgICAgc2V0U2hvd0Fycm93cyhzaG93KTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKVxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IHNsaWRlc0NsYXNzID0gXCJhY2NvcmRpb24tc2xpZGVzLS1pbm5lclwiICsgKHNob3dBcnJvd3MgPyBcIlwiIDogXCIgZnVsbC13aWR0aFwiICk7XHJcbiAgY29uc3Qgc2xpZGVDbGFzcyA9IFwiYy1jYXJkIGMtY2FyZC0tbGFyZ2UgXCIgKyBzbGlkZXMuc2xpZGVDbGFzcztcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxzZWN0aW9uPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjY29yZGlvbi1zbGlkZXNcIj5cclxuICAgICAgICB7c2xpZGVzLnRpdGxlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWNjb3JkaW9uLXNsaWRlcy0tdGl0bGVcIj4gIFxyXG4gICAgICAgICAgICA8cD57c2xpZGVzLnRpdGxlfTwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3NsaWRlc0NsYXNzfT5cclxuICAgICAgICAgIDxTbGlkZXIgey4uLmNhcm91c2VsU2V0dGluZ3N9IHJlZj17Y2Fyb3VzZWx9PlxyXG4gICAgICAgICAgICB7c2xpZGVzLml0ZW1zLm1hcChcclxuICAgICAgICAgICAgICAoaXRlbSkgPT5cclxuICAgICAgICAgICAgICAgIGl0ZW0udXJsICYmIChcclxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l0ZW0ubmFtZX0gY2xhc3NOYW1lPVwic3dpcGVyLXNsaWRlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxhcnRpY2xlIGNsYXNzTmFtZT17c2xpZGVDbGFzc30+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2l0ZW0udXJsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLmltYWdlICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXtpdGVtLmltYWdlfSBhbHQ9e2l0ZW0uaW1hZ2VBbHR9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYy1jYXJkX19ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImMtY2FyZF9fY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXRlbS5uYW1lICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiYy1jYXJkX190aXRsZSB1LWg1XCI+e2l0ZW0ubmFtZX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLmxpbmUxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiYy1jYXJkX190aXRsZSB1LWg1XCI+e2l0ZW0ubGluZTF9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXRlbS5saW5lMiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYy1jYXJkX190aXRsZSB1LWg1XCI+e2l0ZW0ubGluZTJ9PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLmxpbmUzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjLWNhcmRfX3RpdGxlIHUtaDVcIj57aXRlbS5saW5lM308L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0uYmx1ZVRleHQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInUtY29sb3ItLXNlY29uZGFyeSB1cHBlcmNhc2VcIj57aXRlbS5ibHVlVGV4dH08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXJ0aWNsZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L1NsaWRlcj5cclxuICAgICAgICAgIHtzaG93QXJyb3dzICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2NvcmRpb24tc2xpZGVzLS1uYXZcIj5cclxuICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJwcmV2XCIgaHJlZj1cIiNcIiBvbkNsaWNrPXtwcmV2fT5cclxuICAgICAgICAgICAgICAgIDxJY29uQXJyb3dTbWFsbCBkaXJlY3Rpb249XCJsZWZ0XCIgLz5cclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwibmV4dFwiIGhyZWY9XCIjXCIgb25DbGljaz17bmV4dH0+XHJcbiAgICAgICAgICAgICAgICA8SWNvbkFycm93U21hbGwgZGlyZWN0aW9uPVwicmlnaHRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PiAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFjY29yZGlvbkNhcm91c2VsO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBSZWFjdERvbSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcblxyXG5pbXBvcnQgQWNjb3JkaW9uQ2Fyb3VzZWxBcHAgZnJvbSBcIi4vQWNjb3JkaW9uQ2Fyb3VzZWxBcHAuanN4XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJBY2NvcmRpb25DYXJvdXNlbChhbmNlc3Rvcikge1xyXG5cclxuICBjb25zb2xlLmxvZyhcIlJlbmRlciBBY2NvcmRpb24gQ2Fyb3VzZWxcIik7XHJcblxyXG4gIGlmICghYW5jZXN0b3IpIHtcclxuICAgIGFuY2VzdG9yID0gZG9jdW1lbnQ7XHJcbiAgfVxyXG5cclxuICBhbmNlc3Rvci5xdWVyeVNlbGVjdG9yQWxsKFwiLmpzLWFjY29yZGlvbi1jYXJvdXNlbC1tb3VudFwiKS5mb3JFYWNoKChtb3VudCkgPT4ge1xyXG4gICAgY29uc3QgZGF0YU1vZGVsID0gSlNPTi5wYXJzZShtb3VudC5kYXRhc2V0Lm1vZGVsKTsgIFxyXG5cclxuICAgIFJlYWN0RG9tLnJlbmRlcig8QWNjb3JkaW9uQ2Fyb3VzZWxBcHAgey4uLmRhdGFNb2RlbH0gLz4sIG1vdW50KTtcclxuICB9KTtcclxufVxyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgbGF0ZVJlbmRlciBmcm9tIFwiLi4vLi4vaW5kZXhcIjtcclxuXHJcbmZ1bmN0aW9uIEFjY29yZGlvbkl0ZW1UaXRsZShwcm9wcykge1xyXG4gIGNvbnN0IGlzT3BlbiA9IHByb3BzLmluZGV4ID09PSBwcm9wcy5hY3RpdmVJbmRleDtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3NOYW1lPXtgYWNjb3JkaW9udGFicy0tdGl0bGUgJHtpc09wZW4gPyBcIm9wZW5cIiA6IFwiXCJ9YH1cclxuICAgICAgb25DbGljaz17KCkgPT4gcHJvcHMub25DbGljayhwcm9wcy5pbmRleCl9XHJcbiAgICA+XHJcbiAgICAgIHtwcm9wcy50aXRsZX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEFjY29yZGlvbkl0ZW1Db250ZW50KHByb3BzKSB7XHJcbiAgY29uc3QgaXNPcGVuID0gcHJvcHMuaW5kZXggPT09IHByb3BzLmFjdGl2ZUluZGV4O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAge2lzT3BlbiAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2NvcmRpb250YWJzLS1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogcHJvcHMuY29udGVudCB9fSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQWNjb3JkaW9uTGlzdChwcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImFjY29yZGlvbnRhYnMtLWxpc3RcIj5cclxuICAgICAge3Byb3BzLml0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcclxuICAgICAgICA8QWNjb3JkaW9uSXRlbVRpdGxlXHJcbiAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgaW5kZXg9e2luZGV4fVxyXG4gICAgICAgICAgdGl0bGU9e2l0ZW0udGl0bGV9XHJcbiAgICAgICAgICBjb250ZW50PXtpdGVtLmNvbnRlbnR9XHJcbiAgICAgICAgICBhY3RpdmVJbmRleD17cHJvcHMuYWN0aXZlSW5kZXh9XHJcbiAgICAgICAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICkpfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQWNjb3JkaW9uVGFicyhwcm9wcykge1xyXG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZUl0ZW1Ub2dnbGUgPSAoaW5kZXgpID0+IHtcclxuICAgIHNldEFjdGl2ZUluZGV4KChwcmV2QWN0aXZlSW5kZXgpID0+XHJcbiAgICAgIHByZXZBY3RpdmVJbmRleCA9PT0gaW5kZXggPyBwcmV2QWN0aXZlSW5kZXggOiBpbmRleCxcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgLy9hZnRlciB0YWIgY2hhbmdlcyBhcmUgcmVuZGVyZWQgKHdoZW4gYWN0aXZlSW5kZXggY2hhbmdlcyksIHJlbmRlciBhbnkgY29tcG9uZW50cyB0aGF0IGNvdWxkIGFwcGVhciBvbiB0YWJzLlxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmpzLWFjY29yZGlvbi10YWJzXCIpLmZvckVhY2goKG1vdW50KSA9PiB7XHJcbiAgICAgIGxhdGVSZW5kZXIobW91bnQpO1xyXG4gICAgfSk7XHJcbiAgfSwgW2FjdGl2ZUluZGV4XSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImFjY29yZGlvbnRhYnNcIj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2NvcmRpb250YWJzLS1saXN0LXdyYXBwZXJcIj5cclxuICAgICAgICA8QWNjb3JkaW9uTGlzdFxyXG4gICAgICAgICAgaXRlbXM9e3Byb3BzLml0ZW1zfVxyXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlSXRlbVRvZ2dsZX1cclxuICAgICAgICAgIGFjdGl2ZUluZGV4PXthY3RpdmVJbmRleH1cclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY2NvcmRpb250YWJzLS13cmFwcGVyXCI+XHJcbiAgICAgICAge3Byb3BzLml0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcclxuICAgICAgICAgIDxBY2NvcmRpb25JdGVtQ29udGVudFxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBpbmRleD17aW5kZXh9XHJcbiAgICAgICAgICAgIHRpdGxlPXtpdGVtLnRpdGxlfVxyXG4gICAgICAgICAgICBjb250ZW50PXtpdGVtLmNvbnRlbnR9XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4PXthY3RpdmVJbmRleH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWNjb3JkaW9uVGFicztcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgUmVhY3REb20gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5cclxuaW1wb3J0IEFjY29yZGlvblRhYnNBcHAgZnJvbSBcIi4vQWNjb3JkaW9uVGFic0FwcC5qc3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlckFjY29yZGlvblRhYnMoKSB7XHJcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1hY2NvcmRpb24tdGFic1wiKS5mb3JFYWNoKChtb3VudCkgPT4ge1xyXG4gICAgbGV0IGFjY29yZGlvbkl0ZW1zID0gbW91bnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1hY2NvcmRpb24taXRlbVwiKTtcclxuXHJcbiAgICBsZXQgZGF0YU1vZGVsID0gW107XHJcblxyXG4gICAgYWNjb3JkaW9uSXRlbXMuZm9yRWFjaCgoaXRlbU1vdW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1vZGVsID0gSlNPTi5wYXJzZShpdGVtTW91bnQuZGF0YXNldC5tb2RlbCk7XHJcbiAgICAgIGRhdGFNb2RlbC5wdXNoKG1vZGVsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFwcENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBhcHBDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImFjY29yZGlvbnRhYnMtLWFwcC1jb250YWluZXJcIik7XHJcbiAgICBtb3VudC5hcHBlbmRDaGlsZChhcHBDb250YWluZXIpO1xyXG5cclxuICAgIFJlYWN0RG9tLnJlbmRlcig8QWNjb3JkaW9uVGFic0FwcCBpdGVtcz17ZGF0YU1vZGVsfSAvPiwgYXBwQ29udGFpbmVyKTtcclxuICB9KTtcclxufVxyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBTbGlkZXIgZnJvbSBcInJlYWN0LXNsaWNrXCI7XHJcbmltcG9ydCB7IEljb25BcnJvd1NtYWxsIH0gZnJvbSBcIi4uL0NvbW1vblwiO1xyXG5cclxuY29uc3QgQ2xpZW50UXVvdGVzID0gKHsgcXVvdGVzIH0pID0+IHtcclxuICBjb25zdCBjYXJvdXNlbCA9IHVzZVJlZigpO1xyXG4gIGNvbnN0IG5leHQgPSAoZSkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY2Fyb3VzZWw/LmN1cnJlbnQ/LnNsaWNrTmV4dCgpO1xyXG4gIH07XHJcbiAgY29uc3QgcHJldiA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjYXJvdXNlbD8uY3VycmVudD8uc2xpY2tQcmV2KCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2Fyb3VzZWxTZXR0aW5ncyA9IHtcclxuICAgIGRvdHM6IGZhbHNlLFxyXG4gICAgaW5maW5pdGU6IGZhbHNlLFxyXG4gICAgc3BlZWQ6IDUwMCxcclxuICAgIGFycm93czogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcXVvdGVzQ2xhc3MgPSBcImNsaWVudHF1b3Rlcy0tcXVvdGVzXCIgKyAocXVvdGVzLnRpdGxlID8gXCJcIiA6IFwiIGZ1bGwtd2lkdGhcIiApO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPHNlY3Rpb24+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xpZW50cXVvdGVzXCI+XHJcbiAgICAgICAge3F1b3Rlcy50aXRsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNsaWVudHF1b3Rlcy0tdGl0bGVcIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cImgxXCI+e3F1b3Rlcy50aXRsZX08L2gyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVvdGVzQ2xhc3N9PlxyXG4gICAgICAgICAgPFNsaWRlciB7Li4uY2Fyb3VzZWxTZXR0aW5nc30gcmVmPXtjYXJvdXNlbH0+XHJcbiAgICAgICAgICAgIHtxdW90ZXMuaXRlbXMubWFwKFxyXG4gICAgICAgICAgICAgIChpdGVtKSA9PlxyXG4gICAgICAgICAgICAgICAgaXRlbS50ZXh0ICYmIChcclxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l0ZW0udGV4dH0gY2xhc3NOYW1lPVwiY2xpZW50cXVvdGVzLS1xdW90ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2xpZW50LXF1b3Rlcy0taW5uZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicXVvdGUtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD57aXRlbS50ZXh0fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0ubG9nbyAmJiA8aW1nIHNyYz17aXRlbS5sb2dvfSBhbHQ9e2l0ZW0uYWx0fSAvPn1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImJvZHktc20gc251Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntpdGVtLm5hbWV9PC9zcGFuPntcIiBcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aXRlbS5uYW1lICYmIGl0ZW0uam9iVGl0bGUgPyBcInxcIiA6IFwiXCJ9e1wiIFwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntpdGVtLmpvYlRpdGxlfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJib2R5LXNtIHNudWdcIj57aXRlbS5jb21wYW55fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAge2l0ZW0uaW1hZ2UgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInF1b3RlLWltZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e2l0ZW0uaW1hZ2V9IGFsdD17aXRlbS5pbWFnZUFsdH0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgIDwvU2xpZGVyPlxyXG4gICAgICAgICAge3F1b3Rlcy5pdGVtcy5sZW5ndGggPiAxICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjbGllbnRxdW90ZXMtLW5hdlwiPlxyXG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17cHJldn0+XHJcbiAgICAgICAgICAgICAgICA8SWNvbkFycm93U21hbGwgZGlyZWN0aW9uPVwibGVmdFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17bmV4dH0+XHJcbiAgICAgICAgICAgICAgICA8SWNvbkFycm93U21hbGwgZGlyZWN0aW9uPVwicmlnaHRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PiAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaWVudFF1b3RlcztcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgUmVhY3REb20gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5cclxuaW1wb3J0IENsaWVudFF1b3Rlc0FwcCBmcm9tIFwiLi9DbGllbnRRdW90ZXNBcHAuanN4XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJDbGllbnRRdW90ZXMoYW5jZXN0b3IpIHtcclxuICBpZiAoIWFuY2VzdG9yKSB7XHJcbiAgICBhbmNlc3RvciA9IGRvY3VtZW50O1xyXG4gIH1cclxuICBhbmNlc3Rvci5xdWVyeVNlbGVjdG9yQWxsKFwiLmpzLWNsaWVudC1xdW90ZXMtbW91bnRcIikuZm9yRWFjaCgobW91bnQpID0+IHtcclxuICAgIGNvbnN0IGRhdGFNb2RlbCA9IEpTT04ucGFyc2UobW91bnQuZGF0YXNldC5tb2RlbCk7XHJcblxyXG4gICAgUmVhY3REb20ucmVuZGVyKDxDbGllbnRRdW90ZXNBcHAgey4uLmRhdGFNb2RlbH0gLz4sIG1vdW50KTtcclxuICB9KTtcclxufVxyXG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5mdW5jdGlvbiB1c2VDbGlja091dHNpZGUocmVmKSB7XHJcbiAgY29uc3QgW2NsaWNrZWRPdXRzaWRlLCBzZXRDbGlja2VkT3V0c2lkZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVDbGlja091dHNpZGUoZXZlbnQpIHtcclxuICAgICAgaWYgKHJlZi5jdXJyZW50ICYmICFyZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgc2V0Q2xpY2tlZE91dHNpZGUodHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0Q2xpY2tlZE91dHNpZGUoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBoYW5kbGVDbGlja091dHNpZGUpO1xyXG5cclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlQ2xpY2tPdXRzaWRlKTtcclxuICAgIH07XHJcbiAgfSwgW3JlZl0pO1xyXG5cclxuICByZXR1cm4gY2xpY2tlZE91dHNpZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZUNsaWNrT3V0c2lkZTtcclxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuZnVuY3Rpb24gdXNlTWVkaWFRdWVyeShzY3JlZW5TaXplKSB7XHJcbiAgY29uc3QgW21hdGNoZXMsIHNldE1hdGNoZXNdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKGAobWF4LXdpZHRoOiAke3NjcmVlblNpemV9cHgpYCk7XHJcbiAgICBzZXRNYXRjaGVzKG1lZGlhUXVlcnkubWF0Y2hlcyk7XHJcblxyXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHNldE1hdGNoZXMobWVkaWFRdWVyeS5tYXRjaGVzKTtcclxuICAgIG1lZGlhUXVlcnkuYWRkTGlzdGVuZXIoaGFuZGxlcik7XHJcblxyXG4gICAgcmV0dXJuICgpID0+IG1lZGlhUXVlcnkucmVtb3ZlTGlzdGVuZXIoaGFuZGxlcik7XHJcbiAgfSwgW3NjcmVlblNpemVdKTtcclxuXHJcbiAgcmV0dXJuIG1hdGNoZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZU1lZGlhUXVlcnk7XHJcbiIsImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcbmZ1bmN0aW9uIHVzZVRhbGxlc3ROb2RlVmFsdWUocmVmLCBzZWxlY3Rvcikge1xyXG4gIGNvbnN0IFt0YWxsZXN0Tm9kZUhlaWdodCwgc2V0VGFsbGVzdE5vZGVIZWlnaHRdID0gdXNlU3RhdGUoMCk7XHJcblxyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIXJlZi5jdXJyZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub2RlTGlzdCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG5cclxuICAgIGxldCB0YWxsZXN0Tm9kZUhlaWdodCA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBub2RlID0gbm9kZUxpc3RbaV07XHJcbiAgICAgIGNvbnN0IG5vZGVIZWlnaHQgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuXHJcbiAgICAgIGlmIChub2RlSGVpZ2h0ID4gdGFsbGVzdE5vZGVIZWlnaHQpIHtcclxuICAgICAgICB0YWxsZXN0Tm9kZUhlaWdodCA9IG5vZGVIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRUYWxsZXN0Tm9kZUhlaWdodCh0YWxsZXN0Tm9kZUhlaWdodCk7XHJcbiAgfSwgW3JlZl0pO1xyXG5cclxuICByZXR1cm4gdGFsbGVzdE5vZGVIZWlnaHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVRhbGxlc3ROb2RlVmFsdWU7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsc3ggZnJvbSBcImNsc3hcIjtcclxuaW1wb3J0IHsgZGljdGlvbmFyeSwgZGljdGlvbmFyeUtleXMgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2ludGVybmF0aW9uYWxpemF0aW9uXCI7XHJcblxyXG5mdW5jdGlvbiBJY29uKHtcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgZmlsbCA9IFwiY3VycmVudENvbG9yXCIsXHJcbiAgc3Ryb2tlLFxyXG4gIHZpZXdCb3gsXHJcbiAgLi4ucHJvcHNcclxufSkge1xyXG4gIHJldHVybiAoXHJcbiAgICA8c3ZnXHJcbiAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICB2aWV3Qm94PXt2aWV3Qm94fVxyXG4gICAgICB7Li4ucHJvcHN9XHJcbiAgICAgIGZpbGw9e2ZpbGx9XHJcbiAgICAgIHN0cm9rZT17c3Ryb2tlfVxyXG4gICAgICBjbGFzc05hbWU9e2Nsc3goXCJpY29uXCIsIGNsYXNzTmFtZSl9XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvc3ZnPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJY29uTGlua2VkSW4ocHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPEljb24gey4uLnByb3BzfT5cclxuICAgICAgPHRpdGxlPkxpbmtlZEluPC90aXRsZT5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBkPVwiTTIwLjQ3MDUgMi4wMDAxNEgzLjUzMDU1QzMuMzQwMTMgMS45OTc1IDMuMTUxMDUgMi4wMzIzOSAyLjk3NDExIDIuMTAyODJDMi43OTcxOCAyLjE3MzI2IDIuNjM1ODUgMi4yNzc4NiAyLjQ5OTM0IDIuNDEwNjVDMi4zNjI4NCAyLjU0MzQ0IDIuMjUzODMgMi43MDE4MiAyLjE3ODU0IDIuODc2NzVDMi4xMDMyNSAzLjA1MTY3IDIuMDYzMTYgMy4yMzk3MiAyLjA2MDU1IDMuNDMwMTRWMjAuNTcwMUMyLjA2MzE2IDIwLjc2MDYgMi4xMDMyNSAyMC45NDg2IDIuMTc4NTQgMjEuMTIzNUMyLjI1MzgzIDIxLjI5ODUgMi4zNjI4NCAyMS40NTY4IDIuNDk5MzQgMjEuNTg5NkMyLjYzNTg1IDIxLjcyMjQgMi43OTcxOCAyMS44MjcgMi45NzQxMSAyMS44OTc1QzMuMTUxMDUgMjEuOTY3OSAzLjM0MDEzIDIyLjAwMjggMy41MzA1NSAyMi4wMDAxSDIwLjQ3MDVDMjAuNjYxIDIyLjAwMjggMjAuODUgMjEuOTY3OSAyMS4wMjcgMjEuODk3NUMyMS4yMDM5IDIxLjgyNyAyMS4zNjUyIDIxLjcyMjQgMjEuNTAxNyAyMS41ODk2QzIxLjYzODMgMjEuNDU2OCAyMS43NDczIDIxLjI5ODUgMjEuODIyNiAyMS4xMjM1QzIxLjg5NzggMjAuOTQ4NiAyMS45Mzc5IDIwLjc2MDYgMjEuOTQwNSAyMC41NzAxVjMuNDMwMTRDMjEuOTM3OSAzLjIzOTcyIDIxLjg5NzggMy4wNTE2NyAyMS44MjI2IDIuODc2NzVDMjEuNzQ3MyAyLjcwMTgyIDIxLjYzODMgMi41NDM0NCAyMS41MDE3IDIuNDEwNjVDMjEuMzY1MiAyLjI3Nzg2IDIxLjIwMzkgMi4xNzMyNiAyMS4wMjcgMi4xMDI4MkMyMC44NSAyLjAzMjM5IDIwLjY2MSAxLjk5NzUgMjAuNDcwNSAyLjAwMDE0Wk04LjA5MDU1IDE4Ljc0MDFINS4wOTA1NVY5Ljc0MDE0SDguMDkwNTVWMTguNzQwMVpNNi41OTA1NSA4LjQ4MDE0QzYuMTc2ODEgOC40ODAxNCA1Ljc4MDAyIDguMzE1NzggNS40ODc0NiA4LjAyMzIzQzUuMTk0OSA3LjczMDY3IDUuMDMwNTUgNy4zMzM4OCA1LjAzMDU1IDYuOTIwMTRDNS4wMzA1NSA2LjUwNjQgNS4xOTQ5IDYuMTA5NjEgNS40ODc0NiA1LjgxNzA1QzUuNzgwMDIgNS41MjQ1IDYuMTc2ODEgNS4zNjAxNCA2LjU5MDU1IDUuMzYwMTRDNi44MTAyNCA1LjMzNTIyIDcuMDMyNzIgNS4zNTY5OSA3LjI0MzQyIDUuNDI0MDJDNy40NTQxMiA1LjQ5MTA1IDcuNjQ4MjkgNS42MDE4MyA3LjgxMzIgNS43NDkxQzcuOTc4MTIgNS44OTYzNyA4LjExMDA3IDYuMDc2ODIgOC4yMDA0MiA2LjI3ODYyQzguMjkwNzYgNi40ODA0MyA4LjMzNzQ2IDYuNjk5MDQgOC4zMzc0NiA2LjkyMDE0QzguMzM3NDYgNy4xNDEyNCA4LjI5MDc2IDcuMzU5ODUgOC4yMDA0MiA3LjU2MTY2QzguMTEwMDcgNy43NjM0NiA3Ljk3ODEyIDcuOTQzOTEgNy44MTMyIDguMDkxMThDNy42NDgyOSA4LjIzODQ1IDcuNDU0MTIgOC4zNDkyMyA3LjI0MzQyIDguNDE2MjZDNy4wMzI3MiA4LjQ4MzI5IDYuODEwMjQgOC41MDUwNSA2LjU5MDU1IDguNDgwMTRaTTE4LjkxMDUgMTguNzQwMUgxNS45MTA1VjEzLjkxMDFDMTUuOTEwNSAxMi43MDAxIDE1LjQ4MDUgMTEuOTEwMSAxNC4zOTA1IDExLjkxMDFDMTQuMDUzMiAxMS45MTI2IDEzLjcyNDcgMTIuMDE4NCAxMy40NDk0IDEyLjIxMzNDMTMuMTc0IDEyLjQwODIgMTIuOTY1IDEyLjY4MjggMTIuODUwNSAxMy4wMDAxQzEyLjc3MjMgMTMuMjM1MiAxMi43Mzg0IDEzLjQ4MjcgMTIuNzUwNSAxMy43MzAxVjE4LjczMDFIOS43NTA1NUM5Ljc1MDU1IDE4LjczMDEgOS43NTA1NSAxMC41NTAxIDkuNzUwNTUgOS43MzAxNEgxMi43NTA1VjExLjAwMDFDMTMuMDIzMSAxMC41MjcyIDEzLjQxOTUgMTAuMTM3NyAxMy44OTcgOS44NzMzNEMxNC4zNzQ1IDkuNjA5MDIgMTQuOTE1MSA5LjQ3OTk5IDE1LjQ2MDUgOS41MDAxNEMxNy40NjA1IDkuNTAwMTQgMTguOTEwNSAxMC43OTAxIDE4LjkxMDUgMTMuNTYwMVYxOC43NDAxWlwiXHJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgIC8+XHJcbiAgICA8L0ljb24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEljb25FbWFpbChwcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8SWNvbiB7Li4ucHJvcHN9PlxyXG4gICAgICA8dGl0bGU+e2RpY3Rpb25hcnkoZGljdGlvbmFyeUtleXMuSWNvbkVtYWlsKX08L3RpdGxlPlxyXG5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBkPVwiTTE5IDRINUM0LjIwNDM1IDQgMy40NDEyOSA0LjMxNjA3IDIuODc4NjggNC44Nzg2OEMyLjMxNjA3IDUuNDQxMjkgMiA2LjIwNDM1IDIgN1YxN0MyIDE3Ljc5NTYgMi4zMTYwNyAxOC41NTg3IDIuODc4NjggMTkuMTIxM0MzLjQ0MTI5IDE5LjY4MzkgNC4yMDQzNSAyMCA1IDIwSDE5QzE5Ljc5NTYgMjAgMjAuNTU4NyAxOS42ODM5IDIxLjEyMTMgMTkuMTIxM0MyMS42ODM5IDE4LjU1ODcgMjIgMTcuNzk1NiAyMiAxN1Y3QzIyIDYuMjA0MzUgMjEuNjgzOSA1LjQ0MTI5IDIxLjEyMTMgNC44Nzg2OEMyMC41NTg3IDQuMzE2MDcgMTkuNzk1NiA0IDE5IDRaTTUgNkgxOUMxOS4yNjUyIDYgMTkuNTE5NiA2LjEwNTM2IDE5LjcwNzEgNi4yOTI4OUMxOS44OTQ2IDYuNDgwNDMgMjAgNi43MzQ3OCAyMCA3TDEyIDExLjg4TDQgN0M0IDYuNzM0NzggNC4xMDUzNiA2LjQ4MDQzIDQuMjkyODkgNi4yOTI4OUM0LjQ4MDQzIDYuMTA1MzYgNC43MzQ3OCA2IDUgNlpNMjAgMTdDMjAgMTcuMjY1MiAxOS44OTQ2IDE3LjUxOTYgMTkuNzA3MSAxNy43MDcxQzE5LjUxOTYgMTcuODk0NiAxOS4yNjUyIDE4IDE5IDE4SDVDNC43MzQ3OCAxOCA0LjQ4MDQzIDE3Ljg5NDYgNC4yOTI4OSAxNy43MDcxQzQuMTA1MzYgMTcuNTE5NiA0IDE3LjI2NTIgNCAxN1Y5LjI4TDExLjQ4IDEzLjg1QzExLjYzMiAxMy45Mzc4IDExLjgwNDUgMTMuOTg0IDExLjk4IDEzLjk4NEMxMi4xNTU1IDEzLjk4NCAxMi4zMjggMTMuOTM3OCAxMi40OCAxMy44NUwyMCA5LjI4VjE3WlwiXHJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgIC8+XHJcbiAgICA8L0ljb24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEljb25GYWNlYm9vayhwcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8SWNvbiB7Li4ucHJvcHN9PlxyXG4gICAgICA8dGl0bGU+RmFjZWJvb2s8L3RpdGxlPlxyXG5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICBkPVwiTTUuODg4MTYgMTcuNVY5Ljc0NjA3SDguNTI1MDlMOC45MjA3MSA2LjcyMzMzSDUuODg4MTZWNC43OTM3NUM1Ljg4ODE2IDMuOTE4ODcgNi4xMzM0IDMuMzIyNjUgNy40MDY0NCAzLjMyMjY1TDkuMDI3NDUgMy4zMjE5OVYwLjYxODM0NUM4Ljc0NzEyIDAuNTgyNDA0IDcuNzg0ODQgMC41IDYuNjY0ODUgMC41QzQuMzI2MTMgMC41IDIuNzI1IDEuOTA4NDIgMi43MjUgNC40OTQzOFY2LjcyMzMzSDAuMDgwMDc4MVY5Ljc0NjA3SDIuNzI1VjE3LjVINS44ODgxNlpcIlxyXG4gICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAvPlxyXG4gICAgPC9JY29uPlxyXG4gICk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEljb25Ud2l0dGVyKHByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxJY29uIHsuLi5wcm9wc30+XHJcbiAgICAgIDx0aXRsZT5Ud2l0dGVyPC90aXRsZT5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBkPVwiTTEzLjk0MzIgMi4wNTgzMkMxMy40OTg3IDIuMjg1MjQgMTMuMDA2OSAyLjQyMjc0IDEyLjUyNzMgMi41MTM1MUMxMi43NTQ5IDIuNDcwMzUgMTMuMDg5MyAyLjAwNTM3IDEzLjIyMzQgMS44MTcxNUMxMy40Mjc3IDEuNTMwMTYgMTMuNTk3NyAxLjIwMzU2IDEzLjY5MzIgMC44NTAyN0MxMy43MDU4IDAuODIyNjgzIDEzLjcxNDUgMC43ODc5NzcgMTMuNjkgMC43Njc1MDlDMTMuNjU5MiAwLjc1MzcxNiAxMy42Mzk1IDAuNzYwODM1IDEzLjYxNTEgMC43NzQ2MjhDMTMuMDc5OSAxLjA5ODU1IDEyLjUyNTcgMS4zMzMwNCAxMS45MzYxIDEuNDk5NDZDMTEuODg3NiAxLjUxMzI1IDExLjg1MDkgMS40OTk0NiAxMS44MjA1IDEuNDY0NzVDMTEuNzcxNiAxLjQwMjQ2IDExLjcyNTkgMS4zNDM3MiAxMS42NzM4IDEuMjk1NjdDMTEuNDI2MSAxLjA1NzYyIDExLjE2MDMgMC44NzExODMgMTAuODYwNiAwLjczMzI0OEMxMC40NjcgMC41NTIxNTIgMTAuMDM3MSAwLjQ3NTYyIDkuNjEzNDcgMC41MDY3NjZDOS4yMDA5MiAwLjUzNzAyMyA4Ljc5NjI3IDAuNjY4Mjg1IDguNDMwMjYgMC44ODM2NDJDOC4wNjM0NyAxLjA5OTg5IDcuNzM2MTIgMS40MDA2OCA3LjQ3NTQyIDEuNzYzMzFDNy4yMDYwNCAyLjEzODQxIDcuMDA3MjYgMi41ODE1OCA2LjkwNTUxIDMuMDUxNDVDNi44MDczIDMuNTA0NDIgNi44MTUxOSAzLjk1MzM3IDYuODc1MTQgNC40MTEyM0M2Ljg4NDIxIDQuNDg3MzIgNi44NzgyOSA0LjQ5NzU1IDYuODE3MTYgNC40ODczMkM0LjUxMTg5IDQuMTAwMjEgMi42MDEwMSAzLjE2OTgxIDEuMDQ5NDQgMS4xNzUwOUMwLjk4MTk5MyAxLjA4ODMyIDAuOTQ1NzA4IDEuMDg4MzIgMC44OTA0OTIgMS4xODE3NkMwLjIxMTMzMiAyLjMyOTc0IDAuNTQxMDUyIDQuMTc0MDcgMS4zODkwMSA1LjA4MDQ0QzEuNTAyMjEgNS4yMDE0NyAxLjYxODU2IDUuMzIyMDUgMS43NDM1OCA1LjQzMjRDMS42OTc4MyA1LjQ0MzA4IDEuMTMzNDQgNS4zNzQxMSAwLjYzMDU4MSA1LjA4MDQ0QzAuNTYzMTM4IDUuMDMyMzkgMC41Mjk2MTQgNS4wNTk5NyAwLjUyMzMwNCA1LjE0NjI5QzAuNTE2OTkzIDUuMjcwNDQgMC41MjY0NTkgNS4zODQzNCAwLjU0MTg0MSA1LjUxODcyQzAuNjcxOTkzIDYuNjgyNzIgMS4zODYyNSA3Ljc1OTA2IDIuMzY0NzYgOC4xNzkxQzIuNDgxMTEgOC4yMzQyNyAyLjYwOTI5IDguMjgyNzcgMi43MzQzMiA4LjMwNjhDMi41MTE0OCA4LjM2MTk3IDIuMjgxOTQgOC40MDExMyAxLjY0MjYyIDguMzQ0NjJDMS41NjI5NSA4LjMyNzI3IDEuNTMyNTggOC4zNzIyMSAxLjU2Mjk1IDguNDU4NTNDMi4wNDMzMyA5LjkzNTMzIDMuMDgwMjEgMTAuMzc0OSAzLjg1Njc4IDEwLjYyNTRDMy45NjA5MSAxMC42NDU5IDQuMDY0NjMgMTAuNjQ1OSA0LjE2OTE1IDEwLjY3MzVDNC4xNjI4NCAxMC42ODQyIDQuMTU2NTMgMTAuNjg0MiA0LjE1MDYxIDEwLjY5NDRDMy44OTMwNyAxMS4xMzc2IDMuMDAwMTQgMTEuNDY2OSAyLjU4NDA1IDExLjYzMUMxLjgyNzk4IDExLjkyOTYgMS4wMDQ0NyAxMi4wNjM1IDAuMjA1MDIyIDExLjk3NDVDMC4wNzcyMzU4IDExLjk1MzIgMC4wNTA0MTY1IDExLjk1NSAwLjAxNTMxNDggMTEuOTc0NUMtMC4wMTk3ODcgMTEuOTk5IDAuMDEwOTc2MyAxMi4wMzM3IDAuMDUxOTk0MSAxMi4wNzA3QzAuMjE0MDkzIDEyLjE5MTcgMC4zNzkzNDcgMTIuMjk4OSAwLjU0NzM2MiAxMi40MDIxQzEuMDU0OTYgMTIuNzA1NiAxLjU4NDI0IDEyLjk0NzcgMi4xMzc1OSAxMy4xMTk5QzQuOTk1NDIgMTQuMDEwMiA4LjIxNDUzIDEzLjM1NjEgMTAuMzYwNSAxMC45NTA3QzEyLjA0NTMgOS4wNjE4OCAxMi42MzYyIDYuNDU3MTMgMTIuNjM2MiAzLjg0ODgxQzEyLjYzNjIgMy43NDY5MiAxMi43NDMgMy42OTA0MSAxMi44MDY1IDMuNjM2NTdDMTMuMjQ1MSAzLjI2NTAzIDEzLjU5ODUgMi44MjAwOCAxMy45MjU5IDIuMzIzNTFDMTMuOTk5MiAyLjIxMTgzIDE0IDIuMTEzMDUgMTQgMi4wNzIxMVYyLjA1ODc2QzE0IDIuMDE2OTQgMTMuOTk5MiAyLjAyOTQgMTMuOTQyNCAyLjA1ODc2TDEzLjk0MzIgMi4wNTgzMlpcIlxyXG4gICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAvPlxyXG4gICAgPC9JY29uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJY29uVmlkZW8ocHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPEljb24gey4uLnByb3BzfT5cclxuICAgICAgPHRpdGxlPntkaWN0aW9uYXJ5KGRpY3Rpb25hcnlLZXlzLkljb25WaWRlbyl9PC90aXRsZT5cclxuICAgICAgPHN2ZyBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9iXzgwMF8yMDM0MSlcIj5cclxuICAgICAgICAgIDxyZWN0XHJcbiAgICAgICAgICAgIHg9XCIxXCJcclxuICAgICAgICAgICAgeT1cIjFcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjIxXCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMjFcIlxyXG4gICAgICAgICAgICByeD1cIjEwLjVcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9nPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE1LjA2MDcgMTAuOTc4M0MxNS40NTYzIDExLjIxMzkgMTUuNDU2MyAxMS43ODY4IDE1LjA2MDcgMTIuMDIyNEwxMC4zMTA3IDE0Ljg1MDVDOS45MDU2NyAxNS4wOTE3IDkuMzkyMjYgMTQuNzk5OCA5LjM5MjI2IDE0LjMyODVMOS4zOTIyNiA4LjY3MjIzQzkuMzkyMjYgOC4yMDA4OCA5LjkwNTY3IDcuOTA5MDQgMTAuMzEwNyA4LjE1MDE3TDE1LjA2MDcgMTAuOTc4M1pcIlxyXG4gICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgIDxmaWx0ZXJcclxuICAgICAgICAgICAgaWQ9XCJmaWx0ZXIwX2JfODAwXzIwMzQxXCJcclxuICAgICAgICAgICAgeD1cIi0xMy4yMjM1XCJcclxuICAgICAgICAgICAgeT1cIi0xMy4yMjM1XCJcclxuICAgICAgICAgICAgd2lkdGg9XCI0OS40NDcxXCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiNDkuNDQ3MVwiXHJcbiAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICBjbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM9XCJzUkdCXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2RPcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHN0ZERldmlhdGlvbj1cIjYuNjExNzdcIiAvPlxyXG4gICAgICAgICAgICA8ZmVDb21wb3NpdGVcclxuICAgICAgICAgICAgICBpbjI9XCJTb3VyY2VBbHBoYVwiXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I9XCJpblwiXHJcbiAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl84MDBfMjAzNDFcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8ZmVCbGVuZFxyXG4gICAgICAgICAgICAgIG1vZGU9XCJub3JtYWxcIlxyXG4gICAgICAgICAgICAgIGluPVwiU291cmNlR3JhcGhpY1wiXHJcbiAgICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl84MDBfMjAzNDFcIlxyXG4gICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgIDwvZGVmcz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L0ljb24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEljb25BcnJvd1NtYWxsKHsgZGlyZWN0aW9uID0gXCJyaWdodFwiLCAuLi5wcm9wcyB9KSB7XHJcbiAgbGV0IHJvdGF0ZTtcclxuXHJcbiAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgIHJvdGF0ZSA9IFwiZmxpcC1oXCI7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgIHJvdGF0ZSA9IFwiXCI7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcm90YXRlID0gXCJcIjtcclxuICB9XHJcbiAgcmV0dXJuIChcclxuICAgIDxJY29uXHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFwiYXJyb3ctc21hbGxcIiwgcm90YXRlKX1cclxuICAgICAgc3R5bGU9e3tcclxuICAgICAgICB3aWR0aDogXCI1NHB4XCIsXHJcbiAgICAgICAgaGVpZ2h0OiBcIjE0cHhcIixcclxuICAgICAgfX1cclxuICAgID5cclxuICAgICAgPHBhdGggZD1cIk01Mi42MjA5IDcuNjIwOTNDNTIuOTYzOSA3LjI3OCA1Mi45NjM5IDYuNzIyMDEgNTIuNjIwOSA2LjM3OTA4TDQ3LjAzMjYgMC43OTA3MjNDNDYuNjg5NiAwLjQ0Nzc5MyA0Ni4xMzM2IDAuNDQ3NzkzIDQ1Ljc5MDcgMC43OTA3MjNDNDUuNDQ3OCAxLjEzMzY1IDQ1LjQ0NzggMS42ODk2NSA0NS43OTA3IDIuMDMyNThMNTAuNzU4MSA3TDQ1Ljc5MDcgMTEuOTY3NEM0NS40NDc4IDEyLjMxMDQgNDUuNDQ3OCAxMi44NjY0IDQ1Ljc5MDcgMTMuMjA5M0M0Ni4xMzM2IDEzLjU1MjIgNDYuNjg5NiAxMy41NTIyIDQ3LjAzMjYgMTMuMjA5M0w1Mi42MjA5IDcuNjIwOTNaTS03LjY3NjgxZS0wOCA3Ljg3ODEzTDUyIDcuODc4MTNMNTIgNi4xMjE4OEw3LjY3NjgxZS0wOCA2LjEyMTg3TC03LjY3NjgxZS0wOCA3Ljg3ODEzWlwiIC8+XHJcbiAgICA8L0ljb24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEljb25MYW5ndWFnZShwcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8SWNvbiB7Li4ucHJvcHN9PlxyXG4gICAgICA8dGl0bGU+e2RpY3Rpb25hcnkoZGljdGlvbmFyeUtleXMuSWNvbkxhbmd1YWdlKX08L3RpdGxlPlxyXG4gICAgICA8c3ZnIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT17XCJsYW5nXCJ9PlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTYuNDY0MTQgMTMuMzU3M0M1LjU4MDcxIDEzLjM1NzMgNC43NDU3NiAxMy4xODE5IDMuOTU5MjkgMTIuODMxQzMuMTcyODIgMTIuNDgwNiAyLjQ4NjExIDEyLjAwMiAxLjg5OTE3IDExLjM5NTFDMS4zMTE3OSAxMC43ODg3IDAuODQ4NTI3IDEwLjA3OTIgMC41MDkzNzUgOS4yNjY2NEMwLjE2OTc5MiA4LjQ1NDA3IDAgNy41OTE0MSAwIDYuNjc4NjZDMCA1Ljc1NDc4IDAuMTY5NzkyIDQuODg5NDQgMC41MDkzNzUgNC4wODI2NkMwLjg0ODUyNyAzLjI3NTQ0IDEuMzExNzkgMi41Njg2MSAxLjg5OTE3IDEuOTYyMTlDMi40ODYxMSAxLjM1NTMyIDMuMTcyODIgMC44NzY0NjIgMy45NTkyOSAwLjUyNTYxQzQuNzQ1NzYgMC4xNzUyMDMgNS41ODA3MSAwIDYuNDY0MTQgMEM3LjM1ODM1IDAgOC4xOTU4OSAwLjE3NTIwMyA4Ljk3Njc2IDAuNTI1NjFDOS43NTgwNiAwLjg3NjQ2MiAxMC40NDIyIDEuMzU1MzIgMTEuMDI5MSAxLjk2MjE5QzExLjYxNjUgMi41Njg2MSAxMi4wNzk4IDMuMjc1NDQgMTIuNDE4OSA0LjA4MjY2QzEyLjc1ODUgNC44ODk0NCAxMi45MjgzIDUuNzU0NzggMTIuOTI4MyA2LjY3ODY2QzEyLjkyODMgNy41OTE0MSAxMi43NTg1IDguNDU0MDcgMTIuNDE4OSA5LjI2NjY0QzEyLjA3OTggMTAuMDc5MiAxMS42MTY1IDEwLjc4ODcgMTEuMDI5MSAxMS4zOTUxQzEwLjQ0MjIgMTIuMDAyIDkuNzU4MDYgMTIuNDgwNiA4Ljk3Njc2IDEyLjgzMUM4LjE5NTg5IDEzLjE4MTkgNy4zNTgzNSAxMy4zNTczIDYuNDY0MTQgMTMuMzU3M1pNNi40NjQxNCAxMS45ODgyQzYuNzQ0MjYgMTEuNTg3NSA2Ljk4NjY2IDExLjE3MDEgNy4xOTEzNiAxMC43MzU5QzcuMzk2MDYgMTAuMzAxOCA3LjU2MzA1IDkuODM5ODkgNy42OTIzMyA5LjM1MDEySDUuMjM1OTZDNS4zNjUyNCA5LjgzOTg5IDUuNTMyMjMgMTAuMzAxOCA1LjczNjkzIDEwLjczNTlDNS45NDE2MyAxMS4xNzAxIDYuMTg0MDMgMTEuNTg3NSA2LjQ2NDE0IDExLjk4ODJaTTQuNzgzNDcgMTEuNzIxQzQuNTg5NTQgMTEuMzUzNyA0LjQxOTk3IDEwLjk3MjQgNC4yNzQ3NCAxMC41NzdDNC4xMjkwOCAxMC4xODIxIDQuMDA3NzcgOS43NzMxIDMuOTEwODEgOS4zNTAxMkgyLjAwMzg4QzIuMzE2MzIgOS45MDY2NyAyLjcwNjc1IDEwLjM5MDkgMy4xNzUxOSAxMC44MDI3QzMuNjQ0MDUgMTEuMjE0NiA0LjE4MDE1IDExLjUyMDcgNC43ODM0NyAxMS43MjFaTTguMTQ0ODIgMTEuNzIxQzguNzQ4MTQgMTEuNTIwNyA5LjI4NDAyIDExLjIxNDYgOS43NTI0NSAxMC44MDI3QzEwLjIyMTMgMTAuMzkwOSAxMC42MTIgOS45MDY2NyAxMC45MjQ0IDkuMzUwMTJIOS4wMTc0OEM4LjkyMDUyIDkuNzczMSA4Ljc5OTQyIDEwLjE4MjEgOC42NTQxOSAxMC41NzdDOC41MDg1NCAxMC45NzI0IDguMzM4NzUgMTEuMzUzNyA4LjE0NDgyIDExLjcyMVpNMS40NTQ0MyA4LjAxNDM5SDMuNjUyMjRDMy42MTk5MiA3Ljc5MTc3IDMuNTk1NTcgNy41NzE4MiAzLjU3OTIgNy4zNTQ1NEMzLjU2MzI1IDcuMTM3NyAzLjU1NTI4IDYuOTEyNDEgMy41NTUyOCA2LjY3ODY2QzMuNTU1MjggNi40NDQ5IDMuNTYzMjUgNi4yMTk2MSAzLjU3OTIgNi4wMDI3OEMzLjU5NTU3IDUuNzg1NSAzLjYxOTkyIDUuNTY1NTUgMy42NTIyNCA1LjM0MjkzSDEuNDU0NDNDMS40MDA1NiA1LjU2NTU1IDEuMzYwMDYgNS43ODU1IDEuMzMyOTEgNi4wMDI3OEMxLjMwNjE5IDYuMjE5NjEgMS4yOTI4MyA2LjQ0NDkgMS4yOTI4MyA2LjY3ODY2QzEuMjkyODMgNi45MTI0MSAxLjMwNjE5IDcuMTM3NyAxLjMzMjkxIDcuMzU0NTRDMS4zNjAwNiA3LjU3MTgyIDEuNDAwNTYgNy43OTE3NyAxLjQ1NDQzIDguMDE0MzlaTTQuOTQ1MDcgOC4wMTQzOUg3Ljk4MzIyQzguMDE1NTQgNy43OTE3NyA4LjAzOTg5IDcuNTcxODIgOC4wNTYyNiA3LjM1NDU0QzguMDcyMjEgNy4xMzc3IDguMDgwMTggNi45MTI0MSA4LjA4MDE4IDYuNjc4NjZDOC4wODAxOCA2LjQ0NDkgOC4wNzIyMSA2LjIxOTYxIDguMDU2MjYgNi4wMDI3OEM4LjAzOTg5IDUuNzg1NSA4LjAxNTU0IDUuNTY1NTUgNy45ODMyMiA1LjM0MjkzSDQuOTQ1MDdDNC45MTI3NSA1LjU2NTU1IDQuODg4NjIgNS43ODU1IDQuODcyNjcgNi4wMDI3OEM0Ljg1NjMgNi4yMTk2MSA0Ljg0ODExIDYuNDQ0OSA0Ljg0ODExIDYuNjc4NjZDNC44NDgxMSA2LjkxMjQxIDQuODU2MyA3LjEzNzcgNC44NzI2NyA3LjM1NDU0QzQuODg4NjIgNy41NzE4MiA0LjkxMjc1IDcuNzkxNzcgNC45NDUwNyA4LjAxNDM5Wk05LjI3NjA1IDguMDE0MzlIMTEuNDczOUMxMS41Mjc3IDcuNzkxNzcgMTEuNTY4MiA3LjU3MTgyIDExLjU5NTQgNy4zNTQ1NEMxMS42MjIxIDcuMTM3NyAxMS42MzU1IDYuOTEyNDEgMTEuNjM1NSA2LjY3ODY2QzExLjYzNTUgNi40NDQ5IDExLjYyMjEgNi4yMTk2MSAxMS41OTU0IDYuMDAyNzhDMTEuNTY4MiA1Ljc4NTUgMTEuNTI3NyA1LjU2NTU1IDExLjQ3MzkgNS4zNDI5M0g5LjI3NjA1QzkuMzA4MzcgNS41NjU1NSA5LjMzMjUgNS43ODU1IDkuMzQ4NDQgNi4wMDI3OEM5LjM2NDgyIDYuMjE5NjEgOS4zNzMwMSA2LjQ0NDkgOS4zNzMwMSA2LjY3ODY2QzkuMzczMDEgNi45MTI0MSA5LjM2NDgyIDcuMTM3NyA5LjM0ODQ0IDcuMzU0NTRDOS4zMzI1IDcuNTcxODIgOS4zMDgzNyA3Ljc5MTc3IDkuMjc2MDUgOC4wMTQzOVpNOS4wMTc0OCA0LjAwNzE5SDEwLjkyNDRDMTAuNjEyIDMuNDUwNjQgMTAuMjIxMyAyLjk2NjQ0IDkuNzUyNDUgMi41NTQ1OUM5LjI4NDAyIDIuMTQyNzQgOC43NDgxNCAxLjgzNjYzIDguMTQ0ODIgMS42MzYyN0M4LjMzODc1IDIuMDAzNiA4LjUwODU0IDIuMzg0NzMgOC42NTQxOSAyLjc3OTY2QzguNzk5NDIgMy4xNzUwMyA4LjkyMDUyIDMuNTg0MjEgOS4wMTc0OCA0LjAwNzE5Wk01LjIzNTk2IDQuMDA3MTlINy42OTIzM0M3LjU2MzA1IDMuNTE3NDMgNy4zOTYwNiAzLjA1NTQ5IDcuMTkxMzYgMi42MjEzN0M2Ljk4NjY2IDIuMTg3MjYgNi43NDQyNiAxLjc2OTg0IDYuNDY0MTQgMS4zNjkxMkM2LjE4NDAzIDEuNzY5ODQgNS45NDE2MyAyLjE4NzI2IDUuNzM2OTMgMi42MjEzN0M1LjUzMjIzIDMuMDU1NDkgNS4zNjUyNCAzLjUxNzQzIDUuMjM1OTYgNC4wMDcxOVpNMi4wMDM4OCA0LjAwNzE5SDMuOTEwODFDNC4wMDc3NyAzLjU4NDIxIDQuMTI5MDggMy4xNzUwMyA0LjI3NDc0IDIuNzc5NjZDNC40MTk5NyAyLjM4NDczIDQuNTg5NTQgMi4wMDM2IDQuNzgzNDcgMS42MzYyN0M0LjE4MDE1IDEuODM2NjMgMy42NDQwNSAyLjE0Mjc0IDMuMTc1MTkgMi41NTQ1OUMyLjcwNjc1IDIuOTY2NDQgMi4zMTYzMiAzLjQ1MDY0IDIuMDAzODggNC4wMDcxOVpcIlxyXG4gICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L0ljb24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEljb25Ub29sKHByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxJY29uXHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgICAgc3R5bGU9e3tcclxuICAgICAgICB3aWR0aDogXCIxM3B4XCIsXHJcbiAgICAgICAgaGVpZ2h0OiBcIjEzcHhcIixcclxuICAgICAgfX1cclxuICAgID5cclxuICAgICAgPHRpdGxlPntkaWN0aW9uYXJ5KGRpY3Rpb25hcnlLZXlzLkljb25Ub29sKX08L3RpdGxlPlxyXG4gICAgICA8c3ZnXHJcbiAgICAgICAgd2lkdGg9XCIxNVwiXHJcbiAgICAgICAgaGVpZ2h0PVwiMTRcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMTUgMTRcIlxyXG4gICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTExLjYzNzggMTMuMTM0N0w2Ljg5NzM5IDguNjA4MDVDNi42MzYyMiA4LjcwNjk5IDYuMzcxOTEgOC43ODEyIDYuMTA0NDYgOC44MzA2N0M1LjgzNjQ5IDguODgwMTQgNS41NTIzMyA4LjkwNDg4IDUuMjUxOTggOC45MDQ4OEMzLjk0NjA5IDguOTA0ODggMi44MzYwOCA4LjQ3MiAxLjkyMTk2IDcuNjA2MjVDMS4wMDc4NCA2Ljc0MDUgMC41NTA3ODEgNS42ODkyMyAwLjU1MDc4MSA0LjQ1MjQ0QzAuNTUwNzgxIDQuMDA3MTkgMC42MTYwNzYgMy41ODM0NyAwLjc0NjY2NCAzLjE4MTI3QzAuODc3MjUzIDIuNzc5NTYgMS4wNjAwOCAyLjM5OTM3IDEuMjk1MTQgMi4wNDA3TDQuMTU1MDMgNC43NDkyN0w1LjU2NTM5IDMuNDEzNTRMMi43MDU1IDAuNzA0OTY5QzMuMDg0MiAwLjQ4MjM0NyAzLjQ4NTYzIDAuMzA5MTk3IDMuOTA5NzkgMC4xODU1MThDNC4zMzQ0NiAwLjA2MTgzOTQgNC43ODE4NiAwIDUuMjUxOTggMEM2LjU1Nzg2IDAgNy42Njc4NyAwLjQzMjg3NiA4LjU4MTk5IDEuMjk4NjNDOS40OTYxMSAyLjE2NDM4IDkuOTUzMTcgMy4yMTU2NSA5Ljk1MzE3IDQuNDUyNDRDOS45NTMxNyA0LjczNjkgOS45MjcwNSA1LjAwNTc4IDkuODc0ODIgNS4yNTkwN0M5LjgyMjU4IDUuNTEyODYgOS43NDQyMyA1Ljc2MzQzIDkuNjM5NzYgNi4wMTA3OUwxNC40MTkzIDEwLjUwMDNDMTQuNTc2IDEwLjY0ODcgMTQuNjU0NCAxMC44MjgxIDE0LjY1NDQgMTEuMDM4M0MxNC42NTQ0IDExLjI0ODYgMTQuNTc2IDExLjQyNzkgMTQuNDE5MyAxMS41NzYzTDEyLjc3MzkgMTMuMTM0N0MxMi42MTcyIDEzLjI4MzEgMTIuNDI3OCAxMy4zNTczIDEyLjIwNTggMTMuMzU3M0MxMS45ODM4IDEzLjM1NzMgMTEuNzk0NSAxMy4yODMxIDExLjYzNzggMTMuMTM0N1pNMTIuMjA1OCAxMS41NTc4TDEyLjczNDcgMTEuMDU2OUw3LjcyMDEgNi4zMDc2MkM3Ljk1NTE2IDYuMDYwMjYgOC4xMjQ5MyA1Ljc3MjU5IDguMjI5NCA1LjQ0NDU5QzguMzMzODcgNS4xMTcwOSA4LjM4NjExIDQuNzg2MzcgOC4zODYxMSA0LjQ1MjQ0QzguMzg2MTEgMy43MTAzNyA4LjEzNDg1IDMuMDY0MDIgNy42MzIzNSAyLjUxMzRDNy4xMjkzMiAxLjk2MzI4IDYuNTA1NjMgMS42MzI1NiA1Ljc2MTI3IDEuNTIxMjVMNy4yMTA4MSAyLjg5NDA4QzcuMzY3NTEgMy4wNDI1IDcuNDQ1ODcgMy4yMTU2NSA3LjQ0NTg3IDMuNDEzNTRDNy40NDU4NyAzLjYxMTQyIDcuMzY3NTEgMy43ODQ1NyA3LjIxMDgxIDMuOTMyOTlMNC43MDM1IDYuMzA3NjJDNC41NDY4IDYuNDU2MDQgNC4zNjM5NyA2LjUzMDI0IDQuMTU1MDMgNi41MzAyNEMzLjk0NjA5IDYuNTMwMjQgMy43NjMyNiA2LjQ1NjA0IDMuNjA2NTYgNi4zMDc2MkwyLjE1NzAyIDQuOTM0NzlDMi4yNzQ1NSA1LjYzOTc1IDIuNjI0MDEgNi4yMzAyIDMuMjA1MzkgNi43MDYxMUMzLjc4NjI1IDcuMTgyNTIgNC40Njg0NCA3LjQyMDczIDUuMjUxOTggNy40MjA3M0M1LjU5MTUxIDcuNDIwNzMgNS45MzEwNCA3LjM3MTI2IDYuMjcwNTcgNy4yNzIzMkM2LjYxMDEgNy4xNzMzNyA2LjkxNjk4IDcuMDE4NzcgNy4xOTEyMiA2LjgwODUyTDEyLjIwNTggMTEuNTU3OFpcIlxyXG4gICAgICAgICAgZmlsbD1cIiMwMDFFNUFcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9JY29uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJY29uU2VhcmNoKHByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxJY29uIHsuLi5wcm9wc30+XHJcbiAgICAgIDx0aXRsZT5TZWFyY2g8L3RpdGxlPlxyXG4gICAgICA8cGF0aCBkPVwiTTEyLjA1MzYgMTMuMzU3M0w3LjUyODcxIDguNjgyMjVDNy4xNjk1OSA4Ljk3OTA4IDYuNzU2NjEgOS4yMTQwNyA2LjI4OTc1IDkuMzg3MjJDNS44MjI5IDkuNTYwMzcgNS4zMjYxMiA5LjY0Njk1IDQuNzk5NDEgOS42NDY5NUMzLjQ5NDYxIDkuNjQ2OTUgMi4zOTA0NCA5LjE4MDE5IDEuNDg2ODkgOC4yNDY2NkMwLjU4Mjg3MSA3LjMxMjYzIDAuMTMwODU5IDYuMTcxNTcgMC4xMzA4NTkgNC44MjM0N0MwLjEzMDg1OSAzLjQ3NTM4IDAuNTgyODcxIDIuMzM0MzEgMS40ODY4OSAxLjQwMDI5QzIuMzkwNDQgMC40NjY3NjQgMy40OTQ2MSAwIDQuNzk5NDEgMEM2LjEwNDIxIDAgNy4yMDg2MiAwLjQ2Njc2NCA4LjExMjY0IDEuNDAwMjlDOS4wMTYxOCAyLjMzNDMxIDkuNDY3OTUgMy40NzUzOCA5LjQ2Nzk1IDQuODIzNDdDOS40Njc5NSA1LjM2NzY2IDkuMzg0MTYgNS44ODA5MyA5LjIxNjU3IDYuMzYzMjhDOS4wNDg5OCA2Ljg0NTYyIDguODIxNTQgNy4yNzIzMiA4LjUzNDI1IDcuNjQzMzVMMTMuMDU5MSAxMi4zMTg0TDEyLjA1MzYgMTMuMzU3M1pNNC43OTk0MSA4LjE2MjhDNS42OTcyIDguMTYyOCA2LjQ2MDQ1IDcuODM4MjcgNy4wODkxNSA3LjE4OTJDNy43MTczNyA2LjUzOTY0IDguMDMxNDggNS43NTEwNyA4LjAzMTQ4IDQuODIzNDdDOC4wMzE0OCAzLjg5NTg4IDcuNzE3MzcgMy4xMDczMSA3LjA4OTE1IDIuNDU3NzVDNi40NjA0NSAxLjgwODY4IDUuNjk3MiAxLjQ4NDE1IDQuNzk5NDEgMS40ODQxNUMzLjkwMTYxIDEuNDg0MTUgMy4xMzgzNiAxLjgwODY4IDIuNTA5NjYgMi40NTc3NUMxLjg4MTQ0IDMuMTA3MzEgMS41NjczNCAzLjg5NTg4IDEuNTY3MzQgNC44MjM0N0MxLjU2NzM0IDUuNzUxMDcgMS44ODE0NCA2LjUzOTY0IDIuNTA5NjYgNy4xODkyQzMuMTM4MzYgNy44MzgyNyAzLjkwMTYxIDguMTYyOCA0Ljc5OTQxIDguMTYyOFpcIiAvPlxyXG4gICAgPC9JY29uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJY29uSGFtYnVyZ2VyKHByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxJY29uXHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgICAgc3R5bGU9e3tcclxuICAgICAgICB3aWR0aDogXCIzMHB4XCIsXHJcbiAgICAgICAgaGVpZ2h0OiBcIjIycHhcIixcclxuICAgICAgfX1cclxuICAgID5cclxuICAgICAgPHRpdGxlPntkaWN0aW9uYXJ5KGRpY3Rpb25hcnlLZXlzLkljb25NZW51KX08L3RpdGxlPlxyXG4gICAgICA8c3ZnXHJcbiAgICAgICAgd2lkdGg9XCIzMFwiXHJcbiAgICAgICAgaGVpZ2h0PVwiMjJcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMjJcIlxyXG4gICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIyXCIgZmlsbD1cIiMwMDFFNUFcIiAvPlxyXG4gICAgICAgIDxyZWN0IHk9XCIxMFwiIHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIyXCIgZmlsbD1cIiMwMDFFNUFcIiAvPlxyXG4gICAgICAgIDxyZWN0IHk9XCIyMFwiIHdpZHRoPVwiMzBcIiBoZWlnaHQ9XCIyXCIgZmlsbD1cIiMwMDFFNUFcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvSWNvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSWNvbkNsb3NlKHByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxJY29uIHsuLi5wcm9wc30+XHJcbiAgICAgIDx0aXRsZT57ZGljdGlvbmFyeShkaWN0aW9uYXJ5S2V5cy5JY29uQ2xvc2UpfTwvdGl0bGU+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk05LjU2ODYxIDkuMDY4NjFDOS4wNTQyMSA5LjU4MyA5LjA1NDIxIDEwLjQxNyA5LjU2ODYxIDEwLjkzMTRMMTcuOTUxMSAxOS4zMTM5QzE4LjQ2NTUgMTkuODI4MyAxOS4yOTk1IDE5LjgyODMgMTkuODEzOSAxOS4zMTM5QzIwLjMyODMgMTguNzk5NSAyMC4zMjgzIDE3Ljk2NTUgMTkuODEzOSAxNy40NTExTDEyLjM2MjggMTBMMTkuODEzOSAyLjU0ODg2QzIwLjMyODMgMi4wMzQ0NyAyMC4zMjgzIDEuMjAwNDcgMTkuODEzOSAwLjY4NjA3N0MxOS4yOTk1IDAuMTcxNjg0IDE4LjQ2NTUgMC4xNzE2ODQgMTcuOTUxMSAwLjY4NjA3N0w5LjU2ODYxIDkuMDY4NjFaTTEyIDguNjgyODFIMTAuNVYxMS4zMTcySDEyVjguNjgyODFaXCJcclxuICAgICAgICBmaWxsPVwiIzAwNTZEQVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk0xMS40MzE0IDkuMDY4NjFDMTEuOTQ1OCA5LjU4MyAxMS45NDU4IDEwLjQxNyAxMS40MzE0IDEwLjkzMTRMMy4wNDg4NiAxOS4zMTM5QzIuNTM0NDcgMTkuODI4MyAxLjcwMDQ3IDE5LjgyODMgMS4xODYwOCAxOS4zMTM5QzAuNjcxNjg0IDE4Ljc5OTUgMC42NzE2ODQgMTcuOTY1NSAxLjE4NjA4IDE3LjQ1MTFMOC42MzcyMiAxMEwxLjE4NjA4IDIuNTQ4ODZDMC42NzE2ODQgMi4wMzQ0NyAwLjY3MTY4NCAxLjIwMDQ3IDEuMTg2MDggMC42ODYwNzdDMS43MDA0NyAwLjE3MTY4NCAyLjUzNDQ3IDAuMTcxNjg0IDMuMDQ4ODYgMC42ODYwNzdMMTEuNDMxNCA5LjA2ODYxWk05IDguNjgyODFIMTAuNVYxMS4zMTcySDlWOC42ODI4MVpcIlxyXG4gICAgICAgIGZpbGw9XCIjMDA1NkRBXCJcclxuICAgICAgLz5cclxuICAgIDwvSWNvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSWNvblBsYXkocHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPEljb24gey4uLnByb3BzfT5cclxuICAgICAgPHRpdGxlPntkaWN0aW9uYXJ5KGRpY3Rpb25hcnlLZXlzLkljb25QbGF5KX08L3RpdGxlPlxyXG4gICAgICA8c3ZnXHJcbiAgICAgICAgd2lkdGg9XCIxMjBcIlxyXG4gICAgICAgIGhlaWdodD1cIjExOFwiXHJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxMjAgMTE4XCJcclxuICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgZm9jdXNhYmxlPVwidHJ1ZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfYl84MDBfMjMxODkpXCI+XHJcbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyMFwiIGhlaWdodD1cIjExNy4yMTlcIiByeD1cIjU4LjYwOTdcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICA8L2c+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNNzEuMDMzMiA1Ny41OTc0QzcxLjgwOTUgNTguMDQ4OSA3MS44MDk1IDU5LjE3MDIgNzEuMDMzMiA1OS42MjE2TDU1Ljk1MjMgNjguMzkyN0M1NS4xNzE3IDY4Ljg0NjYgNTQuMTkyOCA2OC4yODM1IDU0LjE5MjggNjcuMzgwNkw1NC4xOTI4IDQ5LjgzODVDNTQuMTkyOCA0OC45MzU2IDU1LjE3MTcgNDguMzcyNCA1NS45NTIzIDQ4LjgyNjRMNzEuMDMzMiA1Ny41OTc0WlwiXHJcbiAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICA8ZmlsdGVyXHJcbiAgICAgICAgICAgIGlkPVwiZmlsdGVyMF9iXzgwMF8yMzE4OVwiXHJcbiAgICAgICAgICAgIHg9XCItNDYuODMzM1wiXHJcbiAgICAgICAgICAgIHk9XCItNDYuODMzM1wiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMjEzLjY2N1wiXHJcbiAgICAgICAgICAgIGhlaWdodD1cIjIxMC44ODZcIlxyXG4gICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycz1cInNSR0JcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZE9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPVwiQmFja2dyb3VuZEltYWdlRml4XCIgc3RkRGV2aWF0aW9uPVwiMjMuNDE2N1wiIC8+XHJcbiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZVxyXG4gICAgICAgICAgICAgIGluMj1cIlNvdXJjZUFscGhhXCJcclxuICAgICAgICAgICAgICBvcGVyYXRvcj1cImluXCJcclxuICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2JhY2tncm91bmRCbHVyXzgwMF8yMzE4OVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxmZUJsZW5kXHJcbiAgICAgICAgICAgICAgbW9kZT1cIm5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgaW49XCJTb3VyY2VHcmFwaGljXCJcclxuICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2JhY2tncm91bmRCbHVyXzgwMF8yMzE4OVwiXHJcbiAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgPC9kZWZzPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvSWNvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSWNvbk1hcFBpbihwcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8SWNvbiB7Li4ucHJvcHN9PlxyXG4gICAgICA8c3ZnXHJcbiAgICAgICAgd2lkdGg9XCIyNVwiXHJcbiAgICAgICAgaGVpZ2h0PVwiMjVcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjUgMjVcIlxyXG4gICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTEyLjg4NSAxMS42OTExQzEzLjI3ODcgMTEuNjkxMSAxMy42NjM1IDExLjU3NDQgMTMuOTkwOSAxMS4zNTU3QzE0LjMxODIgMTEuMTM3IDE0LjU3MzQgMTAuODI2MSAxNC43MjQgMTAuNDYyNEMxNC44NzQ3IDEwLjA5ODYgMTQuOTE0MSA5LjY5ODQgMTQuODM3MyA5LjMxMjI4QzE0Ljc2MDUgOC45MjYxNSAxNC41NzA5IDguNTcxNDcgMTQuMjkyNSA4LjI5MzA5QzE0LjAxNDEgOC4wMTQ3MSAxMy42NTk1IDcuODI1MTMgMTMuMjczMyA3Ljc0ODMyQzEyLjg4NzIgNy42NzE1MiAxMi40ODcgNy43MTA5NCAxMi4xMjMzIDcuODYxNkMxMS43NTk1IDguMDEyMjYgMTEuNDQ4NyA4LjI2NzM5IDExLjIyOTkgOC41OTQ3M0MxMS4wMTEyIDguOTIyMDcgMTAuODk0NSA5LjMwNjkyIDEwLjg5NDUgOS43MDA2MUMxMC44OTQ1IDEwLjIyODUgMTEuMTA0MiAxMC43MzQ4IDExLjQ3NzUgMTEuMTA4MUMxMS44NTA4IDExLjQ4MTQgMTIuMzU3MSAxMS42OTExIDEyLjg4NSAxMS42OTExWk0xMi4xNzg0IDE4LjU2ODVDMTIuMjcwOSAxOC42NjE3IDEyLjM4MSAxOC43MzU4IDEyLjUwMjIgMTguNzg2M0MxMi42MjM1IDE4LjgzNjggMTIuNzUzNiAxOC44NjI5IDEyLjg4NSAxOC44NjI5QzEzLjAxNjQgMTguODYyOSAxMy4xNDY1IDE4LjgzNjggMTMuMjY3OCAxOC43ODYzQzEzLjM4OSAxOC43MzU4IDEzLjQ5OTEgMTguNjYxNyAxMy41OTE2IDE4LjU2ODVMMTcuNjYyMyAxNC40ODc5QzE4LjYwNzcgMTMuNTQyOSAxOS4yNTE3IDEyLjMzODggMTkuNTEyOCAxMS4wMjc4QzE5Ljc3MzggOS43MTY3NyAxOS42NDAyIDguMzU3OCAxOS4xMjg4IDcuMTIyNzZDMTguNjE3NCA1Ljg4NzcxIDE3Ljc1MTIgNC44MzIwNyAxNi42Mzk4IDQuMDg5MzVDMTUuNTI4NCAzLjM0NjYzIDE0LjIyMTcgMi45NTAyIDEyLjg4NSAyLjk1MDJDMTEuNTQ4MyAyLjk1MDIgMTAuMjQxNiAzLjM0NjYzIDkuMTMwMTYgNC4wODkzNUM4LjAxODc2IDQuODMyMDcgNy4xNTI1OCA1Ljg4NzcxIDYuNjQxMiA3LjEyMjc2QzYuMTI5ODIgOC4zNTc4IDUuOTk2MiA5LjcxNjc3IDYuMjU3MjQgMTEuMDI3OEM2LjUxODI4IDEyLjMzODggNy4xNjIyNSAxMy41NDI5IDguMTA3NzEgMTQuNDg3OUwxMi4xNzg0IDE4LjU2ODVaTTguMTM3NTcgOS4yNDI3OUM4LjIwNTU3IDguNTMzMTggOC40MzExOSA3Ljg0NzcxIDguNzk3OTUgNy4yMzY0NEM5LjE2NDcyIDYuNjI1MTcgOS42NjMzNiA2LjEwMzUyIDEwLjI1NzUgNS43MDk1OUMxMS4wMzggNS4xOTcxMiAxMS45NTEzIDQuOTI0MDggMTIuODg1IDQuOTI0MDhDMTMuODE4NyA0LjkyNDA4IDE0LjczMiA1LjE5NzEyIDE1LjUxMjUgNS43MDk1OUMxNi4xMDI3IDYuMTAyMTcgMTYuNTk4NSA2LjYyMDY2IDE2Ljk2NDMgNy4yMjc3NUMxNy4zMzAyIDcuODM0ODUgMTcuNTU2OSA4LjUxNTQ4IDE3LjYyODMgOS4yMjA2OEMxNy42OTk3IDkuOTI1ODkgMTcuNjEzOSAxMC42MzgxIDE3LjM3NzEgMTEuMzA2MkMxNy4xNDA0IDExLjk3NDMgMTYuNzU4NSAxMi41ODE2IDE2LjI1OSAxMy4wODQ1TDEyLjg4NSAxNi40NTg1TDkuNTExMDQgMTMuMDg0NUM5LjAxMDk0IDEyLjU4NjUgOC42MjgxNiAxMS45ODMzIDguMzkwNTcgMTEuMzE4N0M4LjE1Mjk4IDEwLjY1NDIgOC4wNjY1NSA5Ljk0NDk3IDguMTM3NTcgOS4yNDI3OVpNMTkuODUxOSAyMC44NDc2SDUuOTE4MTJDNS42NTQxNiAyMC44NDc2IDUuNDAxMDEgMjAuOTUyNSA1LjIxNDM2IDIxLjEzOTFDNS4wMjc3MSAyMS4zMjU4IDQuOTIyODUgMjEuNTc4OSA0LjkyMjg1IDIxLjg0MjlDNC45MjI4NSAyMi4xMDY4IDUuMDI3NzEgMjIuMzYgNS4yMTQzNiAyMi41NDY2QzUuNDAxMDEgMjIuNzMzMyA1LjY1NDE2IDIyLjgzODIgNS45MTgxMiAyMi44MzgySDE5Ljg1MTlDMjAuMTE1OCAyMi44MzgyIDIwLjM2OSAyMi43MzMzIDIwLjU1NTYgMjIuNTQ2NkMyMC43NDIzIDIyLjM2IDIwLjg0NzEgMjIuMTA2OCAyMC44NDcxIDIxLjg0MjlDMjAuODQ3MSAyMS41Nzg5IDIwLjc0MjMgMjEuMzI1OCAyMC41NTU2IDIxLjEzOTFDMjAuMzY5IDIwLjk1MjUgMjAuMTE1OCAyMC44NDc2IDE5Ljg1MTkgMjAuODQ3NlpcIlxyXG4gICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L0ljb24+XHJcbiAgKTtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBbXHJcbiAge1xyXG4gICAgZmVhdHVyZVR5cGU6IFwiYWxsXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJhbGxcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGxpZ2h0bmVzczogXCItMlwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZ2FtbWE6IFwiMS4wMFwiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJhbGxcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHNhdHVyYXRpb246IFwiLTEwMFwiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLnByb3ZpbmNlXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJhbGxcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHZpc2liaWxpdHk6IFwib2ZmXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgZmVhdHVyZVR5cGU6IFwibGFuZHNjYXBlXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJhbGxcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHNhdHVyYXRpb246IC0xMDAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsaWdodG5lc3M6IDY1LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogXCJvblwiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcInBvaVwiLFxyXG4gICAgZWxlbWVudFR5cGU6IFwiYWxsXCIsXHJcbiAgICBzdHlsZXJzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBzYXR1cmF0aW9uOiAtMTAwLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGlnaHRuZXNzOiBcIjUwXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB2aXNpYmlsaXR5OiBcInNpbXBsaWZpZWRcIixcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfSxcclxuICB7XHJcbiAgICBmZWF0dXJlVHlwZTogXCJyb2FkXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJhbGxcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHNhdHVyYXRpb246IFwiLTEwMFwiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcInJvYWQuaGlnaHdheVwiLFxyXG4gICAgZWxlbWVudFR5cGU6IFwiYWxsXCIsXHJcbiAgICBzdHlsZXJzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICB2aXNpYmlsaXR5OiBcInNpbXBsaWZpZWRcIixcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfSxcclxuICB7XHJcbiAgICBmZWF0dXJlVHlwZTogXCJyb2FkLmFydGVyaWFsXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJhbGxcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGxpZ2h0bmVzczogXCIzMFwiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcInJvYWQubG9jYWxcIixcclxuICAgIGVsZW1lbnRUeXBlOiBcImFsbFwiLFxyXG4gICAgc3R5bGVyczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGlnaHRuZXNzOiBcIjQwXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgZmVhdHVyZVR5cGU6IFwidHJhbnNpdFwiLFxyXG4gICAgZWxlbWVudFR5cGU6IFwiYWxsXCIsXHJcbiAgICBzdHlsZXJzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBzYXR1cmF0aW9uOiAtMTAwLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogXCJzaW1wbGlmaWVkXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgZmVhdHVyZVR5cGU6IFwid2F0ZXJcIixcclxuICAgIGVsZW1lbnRUeXBlOiBcImFsbFwiLFxyXG4gICAgc3R5bGVyczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgY29sb3I6IFwiI2FjYWViNFwiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcIndhdGVyXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJnZW9tZXRyeVwiLFxyXG4gICAgc3R5bGVyczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgaHVlOiBcIiNmZmZmMDBcIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxpZ2h0bmVzczogLTI1LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgc2F0dXJhdGlvbjogLTk3LFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9LFxyXG4gIHtcclxuICAgIGZlYXR1cmVUeXBlOiBcIndhdGVyXCIsXHJcbiAgICBlbGVtZW50VHlwZTogXCJsYWJlbHNcIixcclxuICAgIHN0eWxlcnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGxpZ2h0bmVzczogLTI1LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgc2F0dXJhdGlvbjogLTEwMCxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgfSxcclxuXTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBHb29nbGVNYXAsIHVzZUpzQXBpTG9hZGVyIH0gZnJvbSBcIkByZWFjdC1nb29nbGUtbWFwcy9hcGlcIjtcclxuaW1wb3J0IG1hcFN0eWxlcyBmcm9tIFwiLi9NYXBTdHlsZXNcIjtcclxuXHJcbmNvbnN0IE1hcCA9ICh7IHpvb20sIGNlbnRlciwgY3VzdG9tQ2xhc3MsIGNoaWxkcmVuLCBkcmFnZ2FibGUgfSkgPT4ge1xyXG4gIHZhciBnb29nbGVNYXBzQXBpS2V5ID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWdvb2dsZU1hcHNBcGlLZXlcIik7XHJcbiAgY29uc3QgeyBpc0xvYWRlZCB9ID0gdXNlSnNBcGlMb2FkZXIoe1xyXG4gICAgaWQ6IFwiZ29vZ2xlLW1hcC1zY3JpcHRcIixcclxuICAgIGdvb2dsZU1hcHNBcGlLZXk6XHJcbiAgICAgIGdvb2dsZU1hcHNBcGlLZXkgPz8gcHJvY2Vzcy5lbnYuU1RPUllCT09LX0dPT0dMRV9NQVBTX0FQSV9LRVkgPz8gXCJcIixcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDw+XHJcbiAgICAgIHtpc0xvYWRlZCA/IChcclxuICAgICAgICA8R29vZ2xlTWFwXHJcbiAgICAgICAgICB6b29tPXt6b29tfVxyXG4gICAgICAgICAgY2VudGVyPXtjZW50ZXJ9XHJcbiAgICAgICAgICBkcmFnZ2FibGU9e2RyYWdnYWJsZX1cclxuICAgICAgICAgIG1hcENvbnRhaW5lckNsYXNzTmFtZT17Y3VzdG9tQ2xhc3N9XHJcbiAgICAgICAgICBvcHRpb25zPXt7IHN0eWxlczogbWFwU3R5bGVzLCBkaXNhYmxlRGVmYXVsdFVJOiB0cnVlIH19ICBcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgPC9Hb29nbGVNYXA+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgPD48Lz5cclxuICAgICAgKX1cclxuICAgIDwvPlxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXA7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJY29uQXJyb3dTbWFsbCwgSWNvbkxhbmd1YWdlLCBJY29uVG9vbCB9IGZyb20gXCIuLi9pbmRleC5qc1wiO1xyXG5pbXBvcnQgTmF2UHJvbW8gZnJvbSBcIi4uLy4uL05hdlByb21vL05hdlByb21vLmpzeFwiO1xyXG5cclxuY29uc3QgTXVsdGlsZXZlbE5hdiA9ICh7IGRhdGEgfSkgPT4ge1xyXG4gIGNvbnN0IFtjdXJyZW50TWVudXMsIHNldEN1cnJlbnRNZW51c10gPSB1c2VTdGF0ZShkYXRhKTtcclxuICBjb25zdCBbcHJldmlvdXNTdGFjaywgc2V0UHJldmlvdXNTdGFja10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgY29uc3QgW2N1cnJlbnRQYXJlbnQsIHNldEN1cnJlbnRQYXJlbnRdID0gdXNlU3RhdGUoe30pO1xyXG5cclxuICBjb25zdCByZW5kZXJNZW51SXRlbXMgPSAoZGF0YSkgPT4ge1xyXG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtLCBpbmRleCkgPT5cclxuICAgICAgaXRlbT8uY2hpbGRyZW4gJiYgaXRlbT8uY2hpbGRyZW4ubGVuZ3RoICYmICEoaXRlbS5tb2JpbGUgPT09IGZhbHNlKSA/IChcclxuICAgICAgICA8bGlcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInBhcmVudFwiXHJcbiAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwcmV2aW91c1N0YWNrLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgIHNldFByZXZpb3VzU3RhY2socHJldmlvdXNTdGFjayk7XHJcbiAgICAgICAgICAgIHNldEN1cnJlbnRNZW51cyhpdGVtLmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgc2V0Q3VycmVudFBhcmVudChpdGVtKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGEgaHJlZj1cIiNcIj5cclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhbmc6IDxJY29uTGFuZ3VhZ2UgLz4sXHJcbiAgICAgICAgICAgICAgICB0b29sOiA8SWNvblRvb2wgLz4sXHJcbiAgICAgICAgICAgICAgfVtpdGVtLmljb25dXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAge2l0ZW0ubmFtZX0gPEljb25BcnJvd1NtYWxsIC8+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgKSA6IChcclxuICAgICAgICBpdGVtLm5hbWUgJiZcclxuICAgICAgICAhKGl0ZW0ubW9iaWxlID09PSBmYWxzZSkgJiYgKFxyXG4gICAgICAgICAgPGxpIGtleT17aW5kZXh9IGNsYXNzTmFtZT17cHJldmlvdXNTdGFjay5sZW5ndGggPyBcImNoaWxkcmVuXCIgOiBcIlwifT5cclxuICAgICAgICAgICAgPGEgaHJlZj17aXRlbS51cmx9PlxyXG4gICAgICAgICAgICAgIHtpdGVtLm5hbWV9XHJcbiAgICAgICAgICAgICAge2l0ZW0udGV4dCAmJiA8cD57aXRlbS50ZXh0fTwvcD59XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBkYXRhICYmIChcclxuICAgICAgPD5cclxuICAgICAgICA8dWwgY2xhc3NOYW1lPXtgbXVsdGlsZXZlbC1uYXYgJHtwcmV2aW91c1N0YWNrLmxlbmd0aCAmJiBcImhhcy1zdWJcIn1gfT5cclxuICAgICAgICAgIHtwcmV2aW91c1N0YWNrLmxlbmd0aCA/IChcclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHByZXZpb3VzU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBzZXRQcmV2aW91c1N0YWNrKHByZXZpb3VzU3RhY2spO1xyXG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudE1lbnVzKHByZXZTdGF0ZSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImJhY2stbmF2XCIgaHJlZj1cIiNcIj5cclxuICAgICAgICAgICAgICAgIDxJY29uQXJyb3dTbWFsbCBkaXJlY3Rpb249XCJsZWZ0XCIgLz5cclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhbmc6IDxJY29uTGFuZ3VhZ2UgLz4sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbDogPEljb25Ub29sIC8+LFxyXG4gICAgICAgICAgICAgICAgICB9W2N1cnJlbnRQYXJlbnQuaWNvbl1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHtjdXJyZW50UGFyZW50Lm5hbWV9XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgICB7cmVuZGVyTWVudUl0ZW1zKGN1cnJlbnRNZW51cyl9XHJcbiAgICAgICAgICB7Y3VycmVudE1lbnVzLmxlbmd0aCAmJiBjdXJyZW50TWVudXNbMF0ucHJvbW9EYXRhICYmIChcclxuICAgICAgICAgICAgPE5hdlByb21vIGRhdGE9e2N1cnJlbnRNZW51c1swXS5wcm9tb0RhdGF9IC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvPlxyXG4gICAgKVxyXG4gICk7XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IE11bHRpbGV2ZWxOYXY7XHJcbiIsImV4cG9ydCAqIGZyb20gXCIuL0ljb25cIjtcclxuIiwiaW1wb3J0IHsgTWFya2VyIH0gZnJvbSBcIkByZWFjdC1nb29nbGUtbWFwcy9hcGlcIjtcclxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgdXNlTWVkaWFRdWVyeSBmcm9tIFwiLi4vQ29tbW9uL0hvb2tzL3VzZU1lZGlhUXVlcnkuanN4XCI7XHJcbmltcG9ydCBNYXAgZnJvbSBcIi4uL0NvbW1vbi9NYXAvaW5kZXguanN4XCI7XHJcblxyXG5jb25zdCBDb250YWN0TWFwQXBwID0gKHByb3BzKSA9PiB7XHJcbiAgY29uc3Qgem9vbSA9IDE1O1xyXG4gIGNvbnN0IGN1c3RvbUNsYXNzID0gXCJjb250YWN0bWFwLS1tYXBcIjtcclxuICBjb25zdCBpY29uID0gXCJodHRwczovL3d3dy5jcmVzYS5jb20vaW1hZ2VzL2ljb25zL21hcC1waW4tYmx1ZS5wbmdcIjtcclxuICBjb25zdCBwaW4gPSB7IGxhdDogcHJvcHMubGF0aXR1ZGUsIGxuZzogcHJvcHMubG9uZ2l0dWRlIH07XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB1c2VNZWRpYVF1ZXJ5KDk4MCk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8c2VjdGlvbj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWN0bWFwXCI+XHJcbiAgICAgICAgPE1hcFxyXG4gICAgICAgICAgem9vbT17em9vbX1cclxuICAgICAgICAgIGRyYWdnYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgICBjZW50ZXI9e3tcclxuICAgICAgICAgICAgbGF0OiBwcm9wcy5sYXRpdHVkZSxcclxuICAgICAgICAgICAgbG5nOiBwcm9wcy5sb25naXR1ZGUgKyAoaXNNb2JpbGUgPyAwIDogMC4wMSksXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgY3VzdG9tQ2xhc3M9e2N1c3RvbUNsYXNzfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxNYXJrZXIga2V5PXtwcm9wcy5uYW1lfSBwb3NpdGlvbj17cGlufSBpY29uPXtpY29ufSAvPlxyXG4gICAgICAgIDwvTWFwPlxyXG4gICAgICAgIDxhc2lkZSBjbGFzc05hbWU9XCJjb250YWN0bWFwLS1ib3hcIj5cclxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJoMy1hbHQtbGdcIj57cHJvcHMubmFtZX08L2gzPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWN0bWFwLS1ib3gtZGF0YVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9pbWFnZXMvaWNvbnMvbWFwLXBpbi1ibHVlLnBuZ1wiIGFsdD1cIk1hcCBwaW5cIiAvPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPHA+e3Byb3BzLmFkZHJlc3MxfTwvcD5cclxuICAgICAgICAgICAgICA8cD57cHJvcHMuYWRkcmVzczJ9PC9wPlxyXG4gICAgICAgICAgICAgIDxwPntwcm9wcy5hZGRyZXNzM308L3A+XHJcbiAgICAgICAgICAgICAge3Byb3BzLmFkZHJlc3M0ICYmIFxyXG4gICAgICAgICAgICAgICAgPHA+e3Byb3BzLmFkZHJlc3M0fTwvcD5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAge3Byb3BzLnBob25lICYmXHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPXtgdGVsOiR7cHJvcHMucGhvbmV9YH0+XHJcbiAgICAgICAgICAgICAgICAgIDxwPntgUGhvbmU6ICR7cHJvcHMucGhvbmV9YH08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHtwcm9wcy5mYXggJiYgXHJcbiAgICAgICAgICAgICAgICA8cD57YEZheDogJHtwcm9wcy5mYXh9YH08L3A+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHtwcm9wcy5lbWFpbCAmJlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj17YG1haWx0bzoke3Byb3BzLmVtYWlsfWB9PlxyXG4gICAgICAgICAgICAgICAgICA8cD57YEVtYWlsOiAke3Byb3BzLmVtYWlsfWB9PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgIHtwcm9wcy5zb2NpYWxzLnJzcyAmJiBwcm9wcy5zb2NpYWxzLnJzcy5VcmwgJiYgXHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJyc3MtbGlua1wiIHRhcmdldD17cHJvcHMuc29jaWFscy5yc3MuVGFyZ2V0fSBocmVmPXtwcm9wcy5zb2NpYWxzLnJzcy5Vcmx9PlxyXG4gICAgICAgICAgICAgICAgICA8cD57cHJvcHMuc29jaWFscy5yc3NDYXB0aW9ufTwvcD5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHtwcm9wcy5zb2NpYWxzICYmICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzb2NpYWwtbGlua3NcIj5cclxuICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy5zb2NpYWxzLmZhY2Vib29rICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17cHJvcHMuc29jaWFscy5mYWNlYm9vay5Vcmx9IHRhcmdldD1cIl9ibGFua1wiPjxpbWcgc3JjPVwiL2ltYWdlcy9pY29ucy9mYi5zdmdcIiBhbHQ9XCJmYWNlYm9vayBpY29uXCIgLz48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29jaWFscy5pbnN0YWdyYW0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtwcm9wcy5zb2NpYWxzLmluc3RhZ3JhbS5Vcmx9IHRhcmdldD1cIl9ibGFua1wiPjxpbWcgc3JjPVwiL2ltYWdlcy9pY29ucy9pZy5zdmdcIiBhbHQ9XCJpbnN0YWdyYW0gaWNvblwiIC8+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnNvY2lhbHMubGlua2VkaW4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtwcm9wcy5zb2NpYWxzLmxpbmtlZGluLlVybH0gdGFyZ2V0PVwiX2JsYW5rXCI+PGltZyBzcmM9XCIvaW1hZ2VzL2ljb25zL2xuLnN2Z1wiIGFsdD1cImxpbmtlZC1pbiBpY29uXCIgLz48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuc29jaWFscy50d2l0dGVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17cHJvcHMuc29jaWFscy50d2l0dGVyLlVybH0gdGFyZ2V0PVwiX2JsYW5rXCI+PGltZyBzcmM9XCIvaW1hZ2VzL2ljb25zL3R3LnN2Z1wiIGFsdD1cInR3aXR0ZXIgaWNvblwiIC8+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnNvY2lhbHMueW91dHViZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e3Byb3BzLnNvY2lhbHMueW91dHViZS5Vcmx9IHRhcmdldD1cIl9ibGFua1wiPjxpbWcgc3JjPVwiL2ltYWdlcy9pY29ucy95dC5zdmdcIiBhbHQ9XCJ5b3V0dWJlIGljb25cIiAvPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYXNpZGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb250YWN0TWFwQXBwO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBSZWFjdERvbSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcblxyXG5pbXBvcnQgQ29udGFjdE1hcEFwcCBmcm9tIFwiLi9Db250YWN0TWFwQXBwLmpzeFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVuZGVyQ29udGFjdE1hcCgpIHtcclxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmpzLWNvbnRhY3QtbWFwXCIpLmZvckVhY2goKG1vdW50KSA9PiB7XHJcbiAgICBjb25zdCBkYXRhTW9kZWwgPSBKU09OLnBhcnNlKG1vdW50LmRhdGFzZXQubW9kZWwpO1xyXG5cclxuICAgIFJlYWN0RG9tLnJlbmRlcig8Q29udGFjdE1hcEFwcCB7Li4uZGF0YU1vZGVsfSAvPiwgbW91bnQpO1xyXG4gIH0pO1xyXG59XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuZnVuY3Rpb24gQWNjb3JkaW9uSXRlbVRpdGxlKHByb3BzKSB7XHJcbiAgY29uc3QgaXNPcGVuID0gcHJvcHMuaW5kZXggPT09IHByb3BzLmFjdGl2ZUluZGV4O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzc05hbWU9e2Bjb250ZW50YWNjb3JkaW9uLS10aXRsZSAke2lzT3BlbiA/IFwib3BlblwiIDogXCJcIn1gfVxyXG4gICAgICBvbkNsaWNrPXsoKSA9PiBwcm9wcy5vbkNsaWNrKHByb3BzLmluZGV4KX1cclxuICAgID5cclxuICAgICAgPGgzPntwcm9wcy50aXRsZX08L2gzPlxyXG5cclxuICAgICAge2lzT3BlbiAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50YWNjb3JkaW9uLS1jb250ZW50LW1vYmlsZSByaWNoLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBwcm9wcy5jb250ZW50LnRleHQgfX0gLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEFjY29yZGlvbkl0ZW1Db250ZW50KHByb3BzKSB7XHJcbiAgY29uc3QgaXNPcGVuID0gcHJvcHMuaW5kZXggPT09IHByb3BzLmFjdGl2ZUluZGV4O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAge2lzT3BlbiAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50YWNjb3JkaW9uLS1jb250ZW50IHJpY2gtY29udGVudFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT1cImgzLWFsdC1sZ1wiPntwcm9wcy50aXRsZX08L2gzPlxyXG4gICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHByb3BzLmNvbnRlbnQudGV4dCB9fSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQWNjb3JkaW9uSXRlbUltYWdlKHByb3BzKSB7XHJcbiAgY29uc3QgaXNPcGVuID0gcHJvcHMuaW5kZXggPT09IHByb3BzLmFjdGl2ZUluZGV4O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAge2lzT3BlbiAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50YWNjb3JkaW9uLS1pbWFnZSB2ZXJ0aWNhbC0yXCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz17cHJvcHMuY29udGVudC5pbWFnZX0gYWx0PXtwcm9wcy5jb250ZW50LmFsdH0gLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKX1cclxuICAgIDwvPlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEFjY29yZGlvbkxpc3QocHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50YWNjb3JkaW9uLS1saXN0XCI+XHJcbiAgICAgIHtwcm9wcy5pdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXHJcbiAgICAgICAgPEFjY29yZGlvbkl0ZW1UaXRsZVxyXG4gICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgIGluZGV4PXtpbmRleH1cclxuICAgICAgICAgIHRpdGxlPXtpdGVtLnRpdGxlfVxyXG4gICAgICAgICAgY29udGVudD17aXRlbS5jb250ZW50fVxyXG4gICAgICAgICAgYWN0aXZlSW5kZXg9e3Byb3BzLmFjdGl2ZUluZGV4fVxyXG4gICAgICAgICAgb25DbGljaz17cHJvcHMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApKX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbnRlbnRBY2NvcmRpb24ocHJvcHMpIHtcclxuICBjb25zdCBbYWN0aXZlSW5kZXgsIHNldEFjdGl2ZUluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG5cclxuICBjb25zdCBoYW5kbGVJdGVtVG9nZ2xlID0gKGluZGV4KSA9PiB7XHJcbiAgICBzZXRBY3RpdmVJbmRleCgocHJldkFjdGl2ZUluZGV4KSA9PlxyXG4gICAgICBwcmV2QWN0aXZlSW5kZXggPT09IGluZGV4ID8gcHJldkFjdGl2ZUluZGV4IDogaW5kZXhcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGVudGFjY29yZGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbnRhY2NvcmRpb24tLWxpc3QtaW1hZ2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRlbnRhY2NvcmRpb24tLWxpc3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgPEFjY29yZGlvbkxpc3RcclxuICAgICAgICAgICAgaXRlbXM9e3Byb3BzLml0ZW1zfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVJdGVtVG9nZ2xlfVxyXG4gICAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtwcm9wcy5pdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXHJcbiAgICAgICAgICA8QWNjb3JkaW9uSXRlbUltYWdlXHJcbiAgICAgICAgICAgIGtleT17aW5kZXh9XHJcbiAgICAgICAgICAgIGluZGV4PXtpbmRleH1cclxuICAgICAgICAgICAgY29udGVudD17aXRlbS5jb250ZW50fVxyXG4gICAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICkpfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50YWNjb3JkaW9uLS13cmFwcGVyXCI+XHJcbiAgICAgICAgPEFjY29yZGlvbkxpc3RcclxuICAgICAgICAgIGl0ZW1zPXtwcm9wcy5pdGVtc31cclxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUl0ZW1Ub2dnbGV9XHJcbiAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAge3Byb3BzLml0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcclxuICAgICAgICAgIDxBY2NvcmRpb25JdGVtQ29udGVudFxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBpbmRleD17aW5kZXh9XHJcbiAgICAgICAgICAgIHRpdGxlPXtpdGVtLnRpdGxlfVxyXG4gICAgICAgICAgICBjb250ZW50PXtpdGVtLmNvbnRlbnR9XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4PXthY3RpdmVJbmRleH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29udGVudEFjY29yZGlvbjtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgUmVhY3REb20gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5cclxuaW1wb3J0IENvbnRlbnRBY2NvcmRpb24gZnJvbSBcIi4vQ29udGVudEFjY29yZGlvbkFwcC5qc3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlclRhYmJlZFRleHQoKSB7XHJcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1jb250ZW50LWFjY29yZGlvblwiKS5mb3JFYWNoKChtb3VudCkgPT4ge1xyXG4gICAgY29uc3QgZGF0YU1vZGVsID0gSlNPTi5wYXJzZShtb3VudC5kYXRhc2V0Lm1vZGVsKTtcclxuXHJcbiAgICBSZWFjdERvbS5yZW5kZXIoPENvbnRlbnRBY2NvcmRpb24gey4uLmRhdGFNb2RlbH0gLz4sIG1vdW50KTtcclxuICB9KTtcclxufVxyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcblxyXG5jb25zdCBDdGFOYXYgPSAoeyBsaW5rIH0pID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjdGFuYXYgbmF2LXBhZGRpbmcgbmF2LWl0ZW1zLW1kXCI+XHJcbiAgICAgIHtsaW5rICYmIDxhIGhyZWY9e2xpbmsudXJsfT57bGluay5uYW1lfTwvYT59XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3RhTmF2O1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBTbGlkZXIgZnJvbSBcInJlYWN0LXNsaWNrXCI7XHJcbmltcG9ydCB7IEljb25BcnJvd1NtYWxsIH0gZnJvbSBcIi4uL0NvbW1vblwiO1xyXG5cclxuY29uc3QgRmVhdHVyZUNhcm91c2VsID0gKHsgZmVhdHVyZXMgfSkgPT4ge1xyXG4gIGNvbnN0IGNhcm91c2VsID0gdXNlUmVmKCk7XHJcbiAgY29uc3QgbmV4dCA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjYXJvdXNlbD8uY3VycmVudD8uc2xpY2tOZXh0KCk7XHJcbiAgfTtcclxuICBjb25zdCBwcmV2ID0gKGUpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNhcm91c2VsPy5jdXJyZW50Py5zbGlja1ByZXYoKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBjYXJvdXNlbFNldHRpbmdzID0ge1xyXG4gICAgZG90czogZmFsc2UsXHJcbiAgICBpbmZpbml0ZTogZmFsc2UsXHJcbiAgICBzcGVlZDogNTAwLFxyXG4gICAgc2xpZGVzVG9TaG93OiA0LFxyXG4gICAgc2xpZGVzVG9TY3JvbGw6IDEsXHJcbiAgICBhcnJvd3M6IGZhbHNlLFxyXG4gICAgcmVzcG9uc2l2ZTogW1xyXG4gICAgICB7XHJcbiAgICAgICAgYnJlYWtwb2ludDogNzQwLFxyXG4gICAgICAgIHNldHRpbmdzOiB7XHJcbiAgICAgICAgICBpbml0aWFsU2xpZGU6IDAsXHJcbiAgICAgICAgICBzbGlkZXNUb1Nob3c6IDEsXHJcbiAgICAgICAgICBzbGlkZXNUb1Njcm9sbDogMSxcclxuICAgICAgICAgIGluZmluaXRlOiBmYWxzZSxcclxuICAgICAgICAgIGRvdHM6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGJyZWFrcG9pbnQ6IDk4MCxcclxuICAgICAgICBzZXR0aW5nczoge1xyXG4gICAgICAgICAgaW5pdGlhbFNsaWRlOiAwLFxyXG4gICAgICAgICAgc2xpZGVzVG9TaG93OiAzLFxyXG4gICAgICAgICAgc2xpZGVzVG9TY3JvbGw6IDEsXHJcbiAgICAgICAgICBpbmZpbml0ZTogZmFsc2UsXHJcbiAgICAgICAgICBkb3RzOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8c2VjdGlvbj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmZWF0dXJlY2Fyb3VzZWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlYXR1cmVjYXJvdXNlbC0taGVyby0td3JhcHBlclwiPlxyXG4gICAgICAgICAgPGltZyBzcmM9e2ZlYXR1cmVzLmJhY2tncm91bmR9IGFsdD17ZmVhdHVyZXMuYmFja2dyb3VuZEFsdH0gLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVhdHVyZWNhcm91c2VsLS1oZXJvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVhdHVyZWNhcm91c2VsLS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9XCJoMVwiPntmZWF0dXJlcy50aXRsZX08L2gyPlxyXG4gICAgICAgICAgICAgIDxwIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZmVhdHVyZXMuc3ViVGl0bGUgfX0+PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge2ZlYXR1cmVzLml0ZW1zLmxlbmd0aCA+IDEgJiYgKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmVhdHVyZWNhcm91c2VsLS1uYXZcIj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17cHJldn0+XHJcbiAgICAgICAgICAgICAgICAgIDxJY29uQXJyb3dTbWFsbCBkaXJlY3Rpb249XCJsZWZ0XCIgLz5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17bmV4dH0+XHJcbiAgICAgICAgICAgICAgICAgIDxJY29uQXJyb3dTbWFsbCBkaXJlY3Rpb249XCJyaWdodFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZlYXR1cmVjYXJvdXNlbC0tY2Fyb3VzZWxcIj5cclxuICAgICAgICAgIDxTbGlkZXIgey4uLmNhcm91c2VsU2V0dGluZ3N9IHJlZj17Y2Fyb3VzZWx9PlxyXG4gICAgICAgICAgICB7ZmVhdHVyZXMuaXRlbXMubWFwKChpdGVtKSA9PiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBrZXk9e2l0ZW0udGl0bGV9IGNsYXNzTmFtZT1cImZlYXR1cmVjYXJvdXNlbC0taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9e2l0ZW0uaW1hZ2V9IGFsdD17aXRlbS5hbHR9IC8+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPXtpdGVtLmxpbmt9PlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiaDMtYWx0LWxnXCI+e2l0ZW0udGl0bGV9PC9oMz5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm92ZXJsaW5lLWFsdFwiPntpdGVtLnRhZ308L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8cD57aXRlbS50ZXh0fTwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICA8L1NsaWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVDYXJvdXNlbDtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgUmVhY3REb20gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5cclxuaW1wb3J0IEZlYXR1cmVDYXJvdXNlbEFwcCBmcm9tIFwiLi9GZWF0dXJlQ2Fyb3VzZWxBcHAuanN4XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJGZWF0dXJlQ2Fyb3VzZWwoKSB7XHJcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1mZWF0dXJlLWNhcm91c2VsXCIpLmZvckVhY2goKG1vdW50KSA9PiB7XHJcbiAgICBjb25zdCBkYXRhTW9kZWwgPSBKU09OLnBhcnNlKG1vdW50LmRhdGFzZXQubW9kZWwpO1xyXG5cclxuICAgIFJlYWN0RG9tLnJlbmRlcig8RmVhdHVyZUNhcm91c2VsQXBwIHsuLi5kYXRhTW9kZWx9IC8+LCBtb3VudCk7XHJcbiAgfSk7XHJcbn1cclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IE1hcmtlciB9IGZyb20gXCJAcmVhY3QtZ29vZ2xlLW1hcHMvYXBpXCI7XHJcbmltcG9ydCBNYXAgZnJvbSBcIi4uL0NvbW1vbi9NYXAvaW5kZXguanN4XCI7XHJcblxyXG5jb25zdCBMb2NhdGlvbnNNYXAgPSAoZGF0YSkgPT4ge1xyXG4gIGNvbnN0IGxvY2F0aW9ucyA9IGRhdGEudGFicztcclxuICBjb25zdCB0YWIxID0gbG9jYXRpb25zWzBdLFxyXG4gICAgdGFiMiA9IGxvY2F0aW9uc1sxXTtcclxuXHJcbiAgY29uc3QgW3BpbnMsIHNldFBpbnNdID0gdXNlU3RhdGUoXCJ1c2FcIik7XHJcbiAgY29uc3QgY2VudGVyID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICBpZiAocGlucyA9PT0gXCJ1c2FcIikge1xyXG4gICAgICByZXR1cm4geyBsYXQ6IDM5LjgyODMsIGxuZzogLTk4LjU3OTUgfTtcclxuICAgIH0gZWxzZSBpZiAocGlucyA9PT0gXCJjYW5hZGFcIikge1xyXG4gICAgICByZXR1cm4geyBsYXQ6IDU2LjEzMDQsIGxuZzogLTEwNi4zNDY4IH07XHJcbiAgICB9XHJcbiAgfSwgW3BpbnNdKTtcclxuXHJcbiAgY29uc3QgY2xpY2tMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCl7XHJcbiAgICB3aW5kb3cubG9jYXRpb24gPSB1cmw7XHJcbiAgfVxyXG5cclxuICBjb25zdCB6b29tID0gNDtcclxuICBjb25zdCBjdXN0b21DbGFzcyA9IFwibG9jYXRpb25zbWFwX19tYXBcIjtcclxuICBjb25zdCBpY29uID0gXCIvaW1hZ2VzL2ljb25zL21hcC1waW4ucG5nXCI7XHJcblxyXG4gIGNvbnN0IEFsbFBpbnMgPSBnZXRBbGxQaW5zKFt0YWIxLCB0YWIyXSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImxvY2F0aW9uc21hcFwiPlxyXG4gICAgICA8TWFwIHpvb209e3pvb219IGNlbnRlcj17Y2VudGVyfSBjdXN0b21DbGFzcz17Y3VzdG9tQ2xhc3N9PlxyXG4gICAgICAgIHtBbGxQaW5zLm1hcCgocGluLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPE1hcmtlclxyXG4gICAgICAgICAgICAgIGtleT17cGluLnVybH1cclxuICAgICAgICAgICAgICBwb3NpdGlvbj17eyBsYXQ6IHBpbi5sYXRpdHVkZSwgbG5nOiBwaW4ubG9uZ2l0dWRlIH19XHJcbiAgICAgICAgICAgICAgaWNvbj17aWNvbn1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbGlja0xvY2F0aW9uKHBpbi51cmwpfVxyXG4gICAgICAgICAgICAgIHRpdGxlPXtwaW4ubmFtZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvTWFwPlxyXG5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsb2NhdGlvbnNtYXAtLWxpc3RcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxvY2F0aW9uc21hcC0tY2F0ZWdvcmllc1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQaW5zKFwidXNhXCIpfVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Bsb2NhdGlvbnNtYXAtLWNhdGVnb3JpZXMtaXRlbSAke1xyXG4gICAgICAgICAgICAgIHBpbnMgPT09IFwidXNhXCIgPyBcImFjdGl2ZVwiIDogXCJcIlxyXG4gICAgICAgICAgICB9YH1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT17YGgyLWFsdCAke3BpbnMgPT09IFwidXNhXCIgPyBcImFjdGl2ZVwiIDogXCJcIn1gfT5cclxuICAgICAgICAgICAgICB7dGFiMS5uYW1lfVxyXG4gICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFBpbnMoXCJjYW5hZGFcIil9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGxvY2F0aW9uc21hcC0tY2F0ZWdvcmllcy1pdGVtICR7XHJcbiAgICAgICAgICAgICAgcGlucyA9PT0gXCJjYW5hZGFcIiA/IFwiYWN0aXZlXCIgOiBcIlwiXHJcbiAgICAgICAgICAgIH1gfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPXtgaDItYWx0ICR7cGlucyA9PT0gXCJjYW5hZGFcIiA/IFwiYWN0aXZlXCIgOiBcIlwifWB9PlxyXG4gICAgICAgICAgICAgIHt0YWIyLm5hbWV9XHJcbiAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9jYXRpb25zbWFwLS1jYXRlZ29yaWVzLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cImgyLWFsdFwiPlxyXG4gICAgICAgICAgICAgIDxhIGhyZWY9e2RhdGEubGluay51cmx9PntkYXRhLmxpbmsubmFtZX08L2E+XHJcbiAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwibG9jYXRpb25zbWFwLS1saXN0c1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQaW5zKFwidXNhXCIpfVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Bsb2NhdGlvbnNtYXAtLWNhdGVnb3JpZXMtaXRlbSAke1xyXG4gICAgICAgICAgICAgIHBpbnMgPT09IFwidXNhXCIgPyBcImFjdGl2ZVwiIDogXCJcIlxyXG4gICAgICAgICAgICB9YH1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT17YGgyLWFsdCAke3BpbnMgPT09IFwidXNhXCIgPyBcImFjdGl2ZVwiIDogXCJcIn1gfT5VUzwvaDI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgbGlzdCAke3BpbnMgPT09IFwidXNhXCIgPyBcImFjdGl2ZVwiIDogXCJcIn1gfT5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIHt0YWIxLmxvY2F0aW9ucy5tYXAoKHN0YXRlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgPGxpIGtleT17aW5kZXh9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJoMy1hbHRcIj57c3RhdGUuc3RhdGV9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUub2ZmaWNlcy5tYXAoKG9mZmljZSwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17aW5kZXh9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e29mZmljZS51cmx9PntvZmZpY2UubmFtZX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRQaW5zKFwiY2FuYWRhXCIpfVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Bsb2NhdGlvbnNtYXAtLWNhdGVnb3JpZXMtaXRlbSAke1xyXG4gICAgICAgICAgICAgIHBpbnMgPT09IFwiY2FuYWRhXCIgPyBcImFjdGl2ZVwiIDogXCJcIlxyXG4gICAgICAgICAgICB9YH1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT17YGgyLWFsdCAke3BpbnMgPT09IFwiY2FuYWRhXCIgPyBcImFjdGl2ZVwiIDogXCJcIn1gfT5cclxuICAgICAgICAgICAgICB7dGFiMi5uYW1lfVxyXG4gICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGxpc3QgJHtwaW5zID09PSBcImNhbmFkYVwiID8gXCJhY3RpdmVcIiA6IFwiXCJ9YH0+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICB7dGFiMi5sb2NhdGlvbnMubWFwKChzdGF0ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fT5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiaDMtYWx0XCI+e3N0YXRlLnN0YXRlfTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3N0YXRlLm9mZmljZXMubWFwKChvZmZpY2UsIGluZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtvZmZpY2UudXJsfT57b2ZmaWNlLm5hbWV9PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9jYXRpb25zbWFwLS1jYXRlZ29yaWVzLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cImgyLWFsdFwiPlxyXG4gICAgICAgICAgICAgIDxhIGhyZWY9e2RhdGEubGluay51cmx9PntkYXRhLmxpbmsubmFtZX08L2E+XHJcbiAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEFsbFBpbnModGFicykge1xyXG4gIGxldCBhbGxQaW5zID0gW107XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IHRoaXNUYWIgPSB0YWJzW2ldO1xyXG4gICAgaWYgKCF0aGlzVGFiIHx8ICF0aGlzVGFiLmxvY2F0aW9ucykge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGhpc1RhYlBpbnMgPSB0aGlzVGFiLmxvY2F0aW9uc1xyXG4gICAgICAubWFwKChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdGF0ZS5vZmZpY2VzLm1hcCgob2ZmaWNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gb2ZmaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmxhdCgpO1xyXG5cclxuICAgIGFsbFBpbnMgPSBhbGxQaW5zLmNvbmNhdCh0aGlzVGFiUGlucyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYWxsUGlucztcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTG9jYXRpb25zTWFwO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBSZWFjdERvbSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcblxyXG5pbXBvcnQgTG9jYXRpb25zTWFwQXBwIGZyb20gXCIuL0xvY2F0aW9uc01hcEFwcC5qc3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlckxvY2F0aW9uc01hcCgpIHtcclxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmpzLWxvY2F0aW9ucy1tYXBcIikuZm9yRWFjaCgobW91bnQpID0+IHtcclxuICAgIGNvbnN0IGRhdGFNb2RlbCA9IEpTT04ucGFyc2UobW91bnQuZGF0YXNldC5tb2RlbCk7XHJcblxyXG4gICAgUmVhY3REb20ucmVuZGVyKDxMb2NhdGlvbnNNYXBBcHAgey4uLmRhdGFNb2RlbH0gLz4sIG1vdW50KTtcclxuICB9KTtcclxufVxyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcblxyXG5jb25zdCBMb2dvID0gKHsgbG9nbyB9KSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwibG9nbyBuYXYtcGFkZGluZ1wiPlxyXG4gICAgICB7bG9nbyAmJiAoXHJcbiAgICAgICAgPGEgaHJlZj1cIi9cIj5cclxuICAgICAgICAgIDxpbWcgc3JjPXtsb2dvLnVybH0gYWx0PXtsb2dvLmFsdH0gLz5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTG9nbztcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgTXVsdGlsZXZlbE5hdiBmcm9tIFwiLi4vQ29tbW9uL011bHRpTGV2ZWxOYXYvaW5kZXguanN4XCI7XHJcbmltcG9ydCBTdWJOYXYgZnJvbSBcIi4uL1N1Yk5hdi9TdWJOYXYuanN4XCI7XHJcblxyXG5jb25zdCBNYWluTmF2ID0gKHtcclxuICBkYXRhLFxyXG4gIGhhbmRsZU1vdXNlRW50ZXIsXHJcbiAgaGFuZGxlTW91c2VMZWF2ZSxcclxuICBoYW5kbGVGb2N1cyxcclxuICBoYW5kbGVCbHVyLFxyXG59KSA9PiB7XHJcbiAgY29uc3QgaXRlbXMgPSBkYXRhLnByaW1hcnk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8bmF2IGNsYXNzTmFtZT1cIm1haW5uYXYgbmF2LXBhZGRpbmdcIiBhcmlhLWxhYmVsPVwiUHJpbWFyeVwiIHJvbGU9XCJuYXZpZ2F0aW9uXCI+XHJcbiAgICAgIDx1bCBjbGFzc05hbWU9XCJtYWlubmF2LS10b3AtaXRlbXMgbWFpbm5hdi0tZGVza3RvcCBuYXYtaXRlbXNcIj5cclxuICAgICAgICB7aXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCAmJiAhaXRlbS5tb2JpbGUgPyAoXHJcbiAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoYXMtc3ViXCJcclxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2hhbmRsZU1vdXNlRW50ZXJ9XHJcbiAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVNb3VzZUxlYXZlfVxyXG4gICAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUZvY3VzfVxyXG4gICAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIGhyZWY9e2l0ZW0udXJsfT57aXRlbS5uYW1lfTwvYT5cclxuICAgICAgICAgICAgICB7aXRlbS5jaGlsZHJlbiAmJiA8U3ViTmF2IHN1Ykl0ZW1zPXtpdGVtLmNoaWxkcmVufSAvPn1cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICFpdGVtLm1vYmlsZSAmJiAoXHJcbiAgICAgICAgICAgICAgPGxpIGtleT17aXRlbS5pZH0+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPXtpdGVtLnVybH0+e2l0ZW0ubmFtZX08L2E+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgPC91bD5cclxuXHJcbiAgICAgIDxNdWx0aWxldmVsTmF2IGRhdGE9e2l0ZW1zfSAvPlxyXG4gICAgPC9uYXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1haW5OYXY7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgSWNvbkNsb3NlLCBJY29uSGFtYnVyZ2VyLCBJY29uU2VhcmNoIH0gZnJvbSBcIi4uL0NvbW1vbi9pbmRleC5qc1wiO1xyXG5pbXBvcnQgQ3RhTmF2IGZyb20gXCIuLi9DdGFOYXYvQ3RhTmF2LmpzeFwiO1xyXG5pbXBvcnQgTWFpbk5hdiBmcm9tIFwiLi4vTWFpbk5hdi9NYWluTmF2LmpzeFwiO1xyXG5pbXBvcnQgVG9vbE5hdiBmcm9tIFwiLi4vVG9vbE5hdi9Ub29sTmF2LmpzeFwiO1xyXG5pbXBvcnQgeyBkaWN0aW9uYXJ5LCBkaWN0aW9uYXJ5S2V5cyB9IGZyb20gXCIuLi8uLi9jb21tb24vaW50ZXJuYXRpb25hbGl6YXRpb25cIjtcclxuXHJcbmNvbnN0IE1vYmlsZU5hdiA9ICh7IHByaW1hcnlEYXRhLCB0b29sRGF0YSwgaGFuZGxlQ2xpY2ssIGlzT3BlbiB9KSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwibW9iaWxlbmF2XCI+XHJcbiAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxyXG4gICAgICAgIHtpc09wZW4gPyA8SWNvbkNsb3NlIC8+IDogPEljb25IYW1idXJnZXIgLz59XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Btb2JpbGVuYXYtLWNvbnRhaW5lciAke2lzT3BlbiA/IFwib3BlblwiIDogXCJcIn1gfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlYXJjaFwiPlxyXG4gICAgICAgICAgPGEgaHJlZj1cIi9zZWFyY2hcIj5cclxuICAgICAgICAgICAgPEljb25TZWFyY2ggdmlld0JveD1cIjAgMCAxMiAxM1wiIC8+XHJcbiAgICAgICAgICAgIHtkaWN0aW9uYXJ5KGRpY3Rpb25hcnlLZXlzLlNlYXJjaCl9XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPE1haW5OYXYgZGF0YT17cHJpbWFyeURhdGF9IC8+XHJcbiAgICAgICAgPFRvb2xOYXYgZGF0YT17dG9vbERhdGF9IC8+XHJcbiAgICAgICAgPEN0YU5hdiBsaW5rPXtwcmltYXJ5RGF0YS5jb25uZWN0TGlua30gLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlTmF2O1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IEljb25BcnJvd1NtYWxsIH0gZnJvbSBcIi4uL0NvbW1vbi9pbmRleC5qc1wiO1xyXG5cclxuY29uc3QgTmF2UHJvbW8gPSAoeyBkYXRhIH0pID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAge2RhdGEgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VibmF2LS1wcm9tb1wiPlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkYXRhLnRpdGxlICYmIFxyXG4gICAgICAgICAgICAoPGEgaHJlZj17ZGF0YS51cmx9IGNsYXNzTmFtZT1cImxpbmstYWx0LTJcIj5cclxuICAgICAgICAgICAgICB7ZGF0YS50aXRsZX1cclxuICAgICAgICAgICAgICA8SWNvbkFycm93U21hbGwgZmlsbD17XCJ2YXIoLS1taWRuaWdodC1ibHVlKVwifSAvPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICA8aW1nIHNyYz17ZGF0YS5pbWFnZX0gYWx0PXtkYXRhLmFsdH0gLz5cclxuICAgICAgICAgIDxwPntkYXRhLnRleHR9PC9wPlxyXG5cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGF0YS5saW5rVGV4dCAmJiAgICAgICAgIFxyXG4gICAgICAgICAgICg8YSBocmVmPXtkYXRhLmxpbmtVcmwgfHwgXCIjXCJ9IGNsYXNzTmFtZT1cImxpbmstYWx0XCI+XHJcbiAgICAgICAgICAgICAge2RhdGEubGlua1RleHR9XHJcbiAgICAgICAgICAgICAgPEljb25BcnJvd1NtYWxsIGZpbGw9e1widmFyKC0tbWlkbmlnaHQtYmx1ZSlcIn0gLz4gIFxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC8+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE5hdlByb21vO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgdXNlQ2xpY2tPdXRzaWRlIGZyb20gXCIuLi9Db21tb24vSG9va3MvdXNlQ2xpY2tPdXRzaWRlLmpzeFwiO1xyXG5pbXBvcnQgQ3RhTmF2IGZyb20gXCIuLi9DdGFOYXYvQ3RhTmF2LmpzeFwiO1xyXG5pbXBvcnQgTG9nbyBmcm9tIFwiLi4vTG9nby9Mb2dvLmpzeFwiO1xyXG5pbXBvcnQgTWFpbk5hdiBmcm9tIFwiLi4vTWFpbk5hdi9NYWluTmF2LmpzeFwiO1xyXG5pbXBvcnQgTW9iaWxlTmF2IGZyb20gXCIuLi9Nb2JpbGVOYXYvTW9iaWxlTmF2LmpzeFwiO1xyXG5pbXBvcnQgVG9vbE5hdiBmcm9tIFwiLi4vVG9vbE5hdi9Ub29sTmF2LmpzeFwiO1xyXG5cclxuY29uc3QgUHJpbWFyeU5hdiA9ICh7IHByaW1hcnlEYXRhLCB0b29sRGF0YSB9KSA9PiB7XHJcbiAgY29uc3QgW2lzSG92ZXJlZCwgc2V0SXNIb3ZlcmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICBjb25zdCBoYW5kbGVDbGljayA9ICgpID0+IHtcclxuICAgIHNldElzT3BlbighaXNPcGVuKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVNb3VzZUVudGVyID0gKCkgPT4ge1xyXG4gICAgc2V0SXNIb3ZlcmVkKHRydWUpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSAoKSA9PiB7XHJcbiAgICBzZXRJc0hvdmVyZWQoZmFsc2UpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4ge1xyXG4gICAgc2V0SXNGb2N1c2VkKHRydWUpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSAoKSA9PiB7XHJcbiAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IG5hdlJlZiA9IHVzZVJlZihudWxsKTtcclxuICBjb25zdCBjbGlja2VkT3V0c2lkZSA9IHVzZUNsaWNrT3V0c2lkZShuYXZSZWYpO1xyXG4gIGNsaWNrZWRPdXRzaWRlICYmIGlzT3BlbiAmJiBoYW5kbGVDbGljaygpO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPGhlYWRlciByZWY9e25hdlJlZn0gY2xhc3NOYW1lPVwicHJpbWFyeW5hdlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJpbWFyeW5hdi0td3JhcHBlclwiPlxyXG4gICAgICAgICAgPExvZ28gbG9nbz17cHJpbWFyeURhdGEubG9nb30gLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJpbWFyeW5hdi0tbmF2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8TWFpbk5hdlxyXG4gICAgICAgICAgICAgIGRhdGE9e3ByaW1hcnlEYXRhfVxyXG4gICAgICAgICAgICAgIGhhbmRsZU1vdXNlRW50ZXI9e2hhbmRsZU1vdXNlRW50ZXJ9XHJcbiAgICAgICAgICAgICAgaGFuZGxlTW91c2VMZWF2ZT17aGFuZGxlTW91c2VMZWF2ZX1cclxuICAgICAgICAgICAgICBoYW5kbGVGb2N1cz17aGFuZGxlRm9jdXN9XHJcbiAgICAgICAgICAgICAgaGFuZGxlQmx1cj17aGFuZGxlQmx1cn1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPFRvb2xOYXYgZGF0YT17dG9vbERhdGF9IC8+XHJcbiAgICAgICAgICAgIDxDdGFOYXYgbGluaz17cHJpbWFyeURhdGEuY29ubmVjdExpbmt9IC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxNb2JpbGVOYXZcclxuICAgICAgICAgICAgcHJpbWFyeURhdGE9e3ByaW1hcnlEYXRhfVxyXG4gICAgICAgICAgICB0b29sRGF0YT17dG9vbERhdGF9XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrPXtoYW5kbGVDbGlja31cclxuICAgICAgICAgICAgaXNPcGVuPXtpc09wZW59XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17YG5hdi1vdmVybGF5ICR7XHJcbiAgICAgICAgICBpc0hvdmVyZWQgfHwgaXNGb2N1c2VkIHx8IGlzT3BlbiA/IFwic2hvd1wiIDogXCJcIlxyXG4gICAgICAgIH1gfVxyXG4gICAgICA+PC9kaXY+XHJcbiAgICA8Lz5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJpbWFyeU5hdjtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgUmVhY3REb20gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5cclxuaW1wb3J0IFByaW1hcnlOYXYgZnJvbSBcIi4vUHJpbWFyeU5hdkFwcC5qc3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlclByaW1hcnlOYXYoKSB7XHJcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1wcmltYXJ5LW5hdlwiKS5mb3JFYWNoKChtb3VudCkgPT4ge1xyXG4gICAgY29uc3QgZGF0YU1vZGVsID0gSlNPTi5wYXJzZShtb3VudC5kYXRhc2V0Lm1vZGVsKTtcclxuXHJcbiAgICBSZWFjdERvbS5yZW5kZXIoPFByaW1hcnlOYXYgey4uLmRhdGFNb2RlbH0gLz4sIG1vdW50KTtcclxuICB9KTtcclxufVxyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB1c2VUYWxsZXN0Tm9kZVZhbHVlIGZyb20gXCIuLi9Db21tb24vSG9va3MvdXNlVGFsbGVzdE5vZGVIZWlnaHQuanN4XCI7XHJcbmltcG9ydCB7IEljb25BcnJvd1NtYWxsIH0gZnJvbSBcIi4uL0NvbW1vbi9pbmRleC5qc1wiO1xyXG5pbXBvcnQgTmF2UHJvbW8gZnJvbSBcIi4uL05hdlByb21vL05hdlByb21vLmpzeFwiO1xyXG5cclxuY29uc3QgU3ViTmF2ID0gKHsgc3ViSXRlbXMgfSkgPT4ge1xyXG4gIGNvbnN0IHN1YlN1YiA9IHVzZVJlZihudWxsKTtcclxuICBjb25zdCB0YWxsZXN0Tm9kZVZhbHVlID0gdXNlVGFsbGVzdE5vZGVWYWx1ZShzdWJTdWIsIFwiLnN1Ym5hdi0tY2hpbGRcIik7XHJcbiAgY29uc3Qgc3ViTmF2SGVpZ2h0ID0gdGFsbGVzdE5vZGVWYWx1ZSA9PT0gMCA/IDU5MCA6IHRhbGxlc3ROb2RlVmFsdWU7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInN1Ym5hdlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1Ym5hdi0td3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN1Ym5hdi0tbmF2XCJcclxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogc3ViTmF2SGVpZ2h0ICsgXCJweFwiLCBtaW5IZWlnaHQ6IFwiNDI1cHhcIiB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzdWJuYXYtLXBhcmVudFwiIHJlZj17c3ViU3VifT5cclxuICAgICAgICAgICAge3N1Ykl0ZW1zLm1hcCgoaXRlbXMsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9e2l0ZW1zLmlzRGVmYXVsdCA/IFwiZGVmYXVsdFwiIDogXCJcIn0+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2l0ZW1zLnVybH0+e2l0ZW1zLm5hbWV9PC9hPlxyXG4gICAgICAgICAgICAgICAgICA8SWNvbkFycm93U21hbGwgZmlsbD17XCJ2YXIoLS1taWRuaWdodC1ibHVlKVwifSAvPlxyXG4gICAgICAgICAgICAgICAgICB7aXRlbXMuY2hpbGRyZW4gJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJzdWJuYXYtLWNoaWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7aXRlbXMuY2hpbGRyZW4ubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWUgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17aXRlbS5pZH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17aXRlbS5pY29ufSBhbHQ9e2l0ZW0uYWx0fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtpdGVtLnVybH0+e2l0ZW0ubmFtZX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0uYXJyb3cgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25BcnJvd1NtYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e1widmFyKC0tbWlkbmlnaHQtYmx1ZSlcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntpdGVtLnRleHR9PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAge2l0ZW1zPy5jaGlsZHJlblswXT8ucHJvbW9EYXRhICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cInN1Ym5hdi0tcHJvbW8tZGVza3RvcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOYXZQcm9tbyBkYXRhPXtpdGVtcy5jaGlsZHJlblswXS5wcm9tb0RhdGF9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VibmF2LS1jaGlsZC0tY29udGFpbmVyXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN1Yk5hdjtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBUYWIsIFRhYnMsIFRhYkxpc3QsIFRhYlBhbmVsIH0gZnJvbSBcInJlYWN0LXRhYnNcIjtcclxuaW1wb3J0IHsgSWNvbkFycm93U21hbGwgfSBmcm9tIFwiLi4vQ29tbW9uL1wiO1xyXG5cclxuY29uc3QgVGFiYmVkVGV4dEFwcCA9ICh7IHRhYnMgfSkgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICA8c2VjdGlvbj5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWJiZWR0ZXh0XCI+XHJcbiAgICAgICAge3RhYnMuaW1hZ2UgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWJiZWR0ZXh0LS1pbWFnZVwiPlxyXG4gICAgICAgICAgICA8aW1nIHNyYz17dGFicy5pbWFnZX0gYWx0PXt0YWJzLmFsdH0gLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcblxyXG4gICAgICAgIDxUYWJzIGNsYXNzTmFtZT1cInRhYmJlZHRleHQtLXRhYnNcIj5cclxuICAgICAgICAgIDxUYWJMaXN0PlxyXG4gICAgICAgICAgICB7dGFicy5pdGVtcy5tYXAoKHRhYikgPT4gKFxyXG4gICAgICAgICAgICAgIDxUYWIga2V5PXt0YWIudGl0bGV9Pnt0YWIudGl0bGV9PC9UYWI+XHJcbiAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgPC9UYWJMaXN0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0YWJiZWR0ZXh0LS10YWJcIj5cclxuICAgICAgICAgICAge3RhYnMuaXRlbXMubWFwKCh0YWIpID0+IChcclxuICAgICAgICAgICAgICA8VGFiUGFuZWwga2V5PXt0YWIudGV4dH0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvdmVybGluZVwiPnt0YWIudGFnfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImJvZHktbGcgdmVydGljYWwtbWRcIj57dGFiLnRleHR9PC9wPlxyXG4gICAgICAgICAgICAgICAge3RhYi5saW5rICYmIChcclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj17dGFiLmxpbmt9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxJY29uQXJyb3dTbWFsbCB2aWV3Qm94PVwiMCAwIDUzIDE0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8L1RhYlBhbmVsPlxyXG4gICAgICAgICAgICApKX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvVGFicz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRhYmJlZFRleHRBcHA7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFJlYWN0RG9tIGZyb20gXCJyZWFjdC1kb21cIjtcclxuXHJcbmltcG9ydCBUYWJiZWRUZXh0QXBwIGZyb20gXCIuL1RhYmJlZFRleHRBcHAuanN4XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJUYWJiZWRUZXh0KCkge1xyXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuanMtdGFiYmVkLXRleHRcIikuZm9yRWFjaCgobW91bnQpID0+IHtcclxuICAgIGNvbnN0IGRhdGFNb2RlbCA9IEpTT04ucGFyc2UobW91bnQuZGF0YXNldC5tb2RlbCk7XHJcblxyXG4gICAgUmVhY3REb20ucmVuZGVyKDxUYWJiZWRUZXh0QXBwIHsuLi5kYXRhTW9kZWx9IC8+LCBtb3VudCk7XHJcbiAgfSk7XHJcbn1cclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJY29uTGFuZ3VhZ2UsIEljb25TZWFyY2gsIEljb25Ub29sIH0gZnJvbSBcIi4uL0NvbW1vbi9pbmRleC5qc1wiO1xyXG5pbXBvcnQgTXVsdGlsZXZlbE5hdiBmcm9tIFwiLi4vQ29tbW9uL011bHRpTGV2ZWxOYXYvaW5kZXguanN4XCI7XHJcbmltcG9ydCB7IGRpY3Rpb25hcnksIGRpY3Rpb25hcnlLZXlzIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9pbnRlcm5hdGlvbmFsaXphdGlvblwiO1xyXG5cclxuY29uc3QgVG9vbE5hdiA9ICh7IGRhdGEgfSkgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICA8bmF2XHJcbiAgICAgIGNsYXNzTmFtZT1cInRvb2xuYXYgbmF2LXBhZGRpbmcgbmF2LWl0ZW1zLXNtXCJcclxuICAgICAgcm9sZT1cIm5hdmlnYXRpb25cIlxyXG4gICAgICBhcmlhLWxhYmVsPVwiVG9vbHNcIlxyXG4gICAgPlxyXG4gICAgICA8TXVsdGlsZXZlbE5hdiBkYXRhPXtkYXRhLnRvb2xOYXZ9IC8+XHJcblxyXG4gICAgICA8dWwgY2xhc3NOYW1lPVwidG9vbG5hdi0tZGVza3RvcFwiPlxyXG4gICAgICAgIHtkYXRhLnRvb2xOYXYubWFwKChpdGVtLCBpKSA9PiAoXHJcbiAgICAgICAgICA8bGlcclxuICAgICAgICAgICAga2V5PXtpfVxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2l0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPyBcImhhcy1zdWJcIiA6IFwiXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCI+XHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBsYW5nOiA8SWNvbkxhbmd1YWdlIC8+LFxyXG4gICAgICAgICAgICAgICAgICB0b29sOiA8SWNvblRvb2wgLz4sXHJcbiAgICAgICAgICAgICAgICB9W2l0ZW0uaWNvbl1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPHNwYW4+e2l0ZW0ubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAge2l0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPyAoXHJcbiAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAge2l0ZW0uY2hpbGRyZW4ubWFwKChjaGlsZHJlbiwgaSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICA8bGkga2V5PXtpfT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtjaGlsZHJlbi51cmwgfHwgXCIjXCJ9PntjaGlsZHJlbi5uYW1lfSA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICApIDogbnVsbH1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgKSl9XHJcblxyXG4gICAgICAgIDxsaSBjbGFzc05hbWU9XCJ0b29sbmF2LS1zZWFyY2hcIj5cclxuICAgICAgICAgIDxhIGhyZWY9XCIvc2VhcmNoXCI+XHJcbiAgICAgICAgICAgIDxJY29uU2VhcmNoIGNsYXNzTmFtZT1cImRlc2t0b3BcIiAvPntcIiBcIn1cclxuICAgICAgICAgICAgPHNwYW4+e2RpY3Rpb25hcnkoZGljdGlvbmFyeUtleXMuU2VhcmNoKX08L3NwYW4+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvbmF2PlxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUb29sTmF2O1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFJlYWN0UGxheWVyIGZyb20gXCJyZWFjdC1wbGF5ZXJcIjtcclxuaW1wb3J0IHsgSWNvblBsYXkgfSBmcm9tIFwiLi4vQ29tbW9uXCI7XHJcblxyXG5jb25zdCBWaWRlb1BsYXllciA9ICh7IHZpZGVvRGF0YSB9KSA9PiB7XHJcbiAgY29uc3QgW3BsYXlpbmcsIHNldFBsYXlpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICBjb25zdCBoYW5kbGVDbGljayA9ICgpID0+IHtcclxuICAgIHNldFBsYXlpbmcoIXBsYXlpbmcpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvcGxheWVyIG8tcmF0aW8gby1yYXRpby0tMTY6OVwiPlxyXG4gICAgICA8UmVhY3RQbGF5ZXJcclxuICAgICAgICB1cmw9e3ZpZGVvRGF0YS51cmx9XHJcbiAgICAgICAgcGxheWluZz17cGxheWluZ31cclxuICAgICAgICBjb250cm9scz17dHJ1ZX1cclxuICAgICAgICBjbGFzc05hbWU9XCJ2aWRlb3BsYXllci0tcGxheWVyXCJcclxuICAgICAgICBvblBhdXNlPXsoKSA9PiBzZXRQbGF5aW5nKGZhbHNlKX1cclxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAvPlxyXG4gICAgICB7dmlkZW9EYXRhLmltYWdlICYmIChcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2B2aWRlb3BsYXllci0tb3ZlcmxheSAke3BsYXlpbmcgPyBcImhpZGVcIiA6IFwiXCJ9YH1cclxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxpbWcgc3JjPXt2aWRlb0RhdGEuaW1hZ2V9IGFsdD17dmlkZW9EYXRhLmFsdH0gLz5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwidmlkZW9wbGF5ZXItLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8SWNvblBsYXkgd2lkdGg9XCIxMjBweFwiIGhlaWdodD1cIjExOHB4XCIgLz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZpZGVvUGxheWVyO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBSZWFjdERvbSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcblxyXG5pbXBvcnQgVmlkZW9QbGF5ZXJBcHAgZnJvbSBcIi4uL1ZpZGVvUGxheWVyL1ZpZGVvUGxheWVyQXBwLmpzeFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVuZGVyVmlkZW9QbGF5ZXIoKSB7XHJcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy12aWRlby1wbGF5ZXJcIikuZm9yRWFjaCgobW91bnQpID0+IHtcclxuICAgIGNvbnN0IGRhdGFNb2RlbCA9IEpTT04ucGFyc2UobW91bnQuZGF0YXNldC5tb2RlbCk7XHJcblxyXG4gICAgUmVhY3REb20ucmVuZGVyKDxWaWRlb1BsYXllckFwcCB7Li4uZGF0YU1vZGVsfSAvPiwgbW91bnQpO1xyXG4gIH0pO1xyXG59XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFZpZGVvUGxheWVyQXBwIGZyb20gXCIuLi9WaWRlb1BsYXllci9WaWRlb1BsYXllckFwcC5qc3hcIjtcclxuaW1wb3J0IHsgSWNvbkFycm93U21hbGwgfSBmcm9tIFwiLi4vQ29tbW9uXCI7XHJcblxyXG5jb25zdCBWaWRlb1Byb21vID0gKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwidmlkZW9wcm9tb1wiPlxyXG4gICAgICA8VmlkZW9QbGF5ZXJBcHAgdmlkZW9EYXRhPXtwcm9wc30gLz5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aWRlb3Byb21vLS1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3NOYW1lPVwiaDItY29udGVudFwiXHJcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHByb3BzLnRpdGxlIH19XHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAgPGEgaHJlZj17cHJvcHMubGlua1VybH0+XHJcbiAgICAgICAgICB7cHJvcHMubGlua1RleHR9XHJcbiAgICAgICAgICA8SWNvbkFycm93U21hbGwgLz5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZpZGVvUHJvbW87XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFJlYWN0RG9tIGZyb20gXCJyZWFjdC1kb21cIjtcclxuXHJcbmltcG9ydCBWaWRlb1Byb21vQXBwIGZyb20gXCIuLi9WaWRlb1Byb21vL1ZpZGVvUHJvbW9BcHAuanN4XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJWaWRlb1Byb21vKCkge1xyXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuanMtdmlkZW8tcHJvbW9cIikuZm9yRWFjaCgobW91bnQpID0+IHtcclxuICAgIGNvbnN0IGRhdGFNb2RlbCA9IEpTT04ucGFyc2UobW91bnQuZGF0YXNldC5tb2RlbCk7XHJcblxyXG4gICAgUmVhY3REb20ucmVuZGVyKDxWaWRlb1Byb21vQXBwIHsuLi5kYXRhTW9kZWx9IC8+LCBtb3VudCk7XHJcbiAgfSk7XHJcbn1cclxuIiwiaW1wb3J0IFwiLi9wb2x5ZmlsbFwiO1xyXG5cclxuaW1wb3J0IHJlbmRlclByaW1hcnlOYXYgZnJvbSBcIi4vY29tcG9uZW50cy9QcmltYXJ5TmF2L3JlbmRlclByaW1hcnlOYXYuanN4XCI7XHJcbmltcG9ydCByZW5kZXJUYWJiZWRUZXh0IGZyb20gXCIuL2NvbXBvbmVudHMvVGFiYmVkVGV4dC9yZW5kZXJUYWJiZWRUZXh0LmpzeFwiO1xyXG5pbXBvcnQgcmVuZGVyQ2xpZW50UXVvdGVzIGZyb20gXCIuL2NvbXBvbmVudHMvQ2xpZW50UXVvdGVzL3JlbmRlckNsaWVudFF1b3Rlcy5qc3hcIjtcclxuaW1wb3J0IHJlbmRlckZlYXR1cmVDYXJvdXNlbCBmcm9tIFwiLi9jb21wb25lbnRzL0ZlYXR1cmVDYXJvdXNlbC9yZW5kZXJGZWF0dXJlQ2Fyb3VzZWwuanN4XCI7XHJcbmltcG9ydCByZW5kZXJWaWRlb1BsYXllciBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvUGxheWVyL3JlbmRlclZpZGVvUGxheWVyLmpzeFwiO1xyXG5pbXBvcnQgcmVuZGVyQ29udGVudEFjY29yZGlvbiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbnRlbnRBY2NvcmRpb24vcmVuZGVyQ29udGVudEFjY29yZGlvbi5qc3hcIjtcclxuaW1wb3J0IHJlbmRlck9mZmljZUxvY2F0aW9ucyBmcm9tIFwiLi9jb21wb25lbnRzL0xvY2F0aW9uc01hcC9yZW5kZXJMb2NhdGlvbnNNYXAuanN4XCI7XHJcbmltcG9ydCByZW5kZXJDb250YWN0TWFwIGZyb20gXCIuL2NvbXBvbmVudHMvQ29udGFjdE1hcC9yZW5kZXJDb250YWN0TWFwLmpzeFwiO1xyXG5pbXBvcnQgcmVuZGVyVmlkZW9Qcm9tbyBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvUHJvbW8vcmVuZGVyVmlkZW9Qcm9tby5qc3hcIjtcclxuaW1wb3J0IHJlbmRlckFjY29yZGlvblRhYnMgZnJvbSBcIi4vY29tcG9uZW50cy9BY2NvcmRpb25UYWJzL3JlbmRlckFjY29yZGlvblRhYnMuanN4XCI7XHJcbmltcG9ydCByZW5kZXJBY2NvcmRpb25DYXJvdXNlbCBmcm9tIFwiLi9jb21wb25lbnRzL0FjY29yZGlvbkNhcm91c2VsL3JlbmRlckFjY29yZGlvbkNhcm91c2VsLmpzeFwiXHJcblxyXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7XHJcbiAgLy8gSlMgYXBwc1xyXG4gIHJlbmRlckFjY29yZGlvblRhYnMoKTtcclxuICByZW5kZXJQcmltYXJ5TmF2KCk7XHJcbiAgcmVuZGVyVGFiYmVkVGV4dCgpO1xyXG4gIHJlbmRlckNsaWVudFF1b3RlcygpO1xyXG4gIHJlbmRlckFjY29yZGlvbkNhcm91c2VsKCk7XHJcbiAgcmVuZGVyRmVhdHVyZUNhcm91c2VsKCk7XHJcbiAgcmVuZGVyVmlkZW9QbGF5ZXIoKTtcclxuICByZW5kZXJDb250ZW50QWNjb3JkaW9uKCk7XHJcbiAgcmVuZGVyT2ZmaWNlTG9jYXRpb25zKCk7XHJcbiAgcmVuZGVyQ29udGFjdE1hcCgpO1xyXG4gIHJlbmRlclZpZGVvUHJvbW8oKTtcclxufSk7XHJcblxyXG4vL3JlbmRlciBhbnl0aGluZyB0aGF0IG1heSBub3QgaGF2ZSBIVE1MIGFkZGVkIHRvIGl0IG9uIERPTUNvbnRlbnRMb2FkZWQuXHJcbi8vY2FuIGJlIGxpbWl0ZWQgdG8gdGhlIGFuY2VzdG9yIHRoYXQgc3VjaCBjb21wb25lbnRzIHdpbGwgc2hvdyB1cCB1bmRlci5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGF0ZVJlbmRlcihhbmNlc3Rvcikge1xyXG4gIGlmICghYW5jZXN0b3IpIHtcclxuICAgIGFuY2VzdG9yID0gZG9jdW1lbnQ7XHJcbiAgfVxyXG5cclxuICByZW5kZXJDbGllbnRRdW90ZXMoYW5jZXN0b3IpO1xyXG4gIHJlbmRlckFjY29yZGlvbkNhcm91c2VsKGFuY2VzdG9yKTtcclxufVxyXG4iLCIoZnVuY3Rpb24gKEVsZW1lbnRQcm90bykge1xyXG4gIGlmICh0eXBlb2YgRWxlbWVudFByb3RvLm1hdGNoZXMgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgRWxlbWVudFByb3RvLm1hdGNoZXMgPVxyXG4gICAgICBFbGVtZW50UHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHxcclxuICAgICAgRWxlbWVudFByb3RvLm1vek1hdGNoZXNTZWxlY3RvciB8fFxyXG4gICAgICBFbGVtZW50UHJvdG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XHJcbiAgICAgIGZ1bmN0aW9uIG1hdGNoZXMoc2VsZWN0b3IpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gKFxyXG4gICAgICAgICAgZWxlbWVudC5kb2N1bWVudCB8fCBlbGVtZW50Lm93bmVyRG9jdW1lbnRcclxuICAgICAgICApLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgICAgIHZhciBpbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50c1tpbmRleF0gJiYgZWxlbWVudHNbaW5kZXhdICE9PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICArK2luZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudHNbaW5kZXhdKTtcclxuICAgICAgfTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgRWxlbWVudFByb3RvLmNsb3Nlc3QgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgRWxlbWVudFByb3RvLmNsb3Nlc3QgPSBmdW5jdGlvbiBjbG9zZXN0KHNlbGVjdG9yKSB7XHJcbiAgICAgIHZhciBlbGVtZW50ID0gdGhpcztcclxuXHJcbiAgICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG59KSh3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUpO1xyXG4iLCJpbXBvcnQgXCJjb3JlLWpzL2ZlYXR1cmVzL29iamVjdC9hc3NpZ24uanNcIjtcclxuaW1wb3J0IFwiY29yZS1qcy9mZWF0dXJlcy9hcnJheS9maW5kLmpzXCI7XHJcbmltcG9ydCBcImNvcmUtanMvZmVhdHVyZXMvYXJyYXkvZmluZC1pbmRleC5qc1wiO1xyXG5pbXBvcnQgXCJjb3JlLWpzL2ZlYXR1cmVzL2FycmF5L2ZpbGwuanNcIjtcclxuaW1wb3J0IFwiY29yZS1qcy9mZWF0dXJlcy9hcnJheS9pbmNsdWRlcy5qc1wiO1xyXG5pbXBvcnQgXCJjb3JlLWpzL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcclxuaW1wb3J0IFwiY29yZS1qcy9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCI7XHJcbmltcG9ydCBcImNvcmUtanMvZmVhdHVyZXMvcHJvbWlzZS9maW5hbGx5LmpzXCI7XHJcbmltcG9ydCBcImNvcmUtanMvZmVhdHVyZXMvc3ltYm9sXCI7XHJcblxyXG4vLyB3aW5kb3cuZmV0Y2hcclxuaW1wb3J0IFwid2hhdHdnLWZldGNoXCI7XHJcblxyXG4vLyBmb3IgcmVhY3QgMTZcclxuLy8gaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvYmxvZy8yMDE3LzA5LzI2L3JlYWN0LXYxNi4wLmh0bWwjamF2YXNjcmlwdC1lbnZpcm9ubWVudC1yZXF1aXJlbWVudHNcclxuaW1wb3J0IFwiY29yZS1qcy9mZWF0dXJlcy9tYXAvaW5kZXguanNcIjtcclxuaW1wb3J0IFwiY29yZS1qcy9mZWF0dXJlcy9zZXQvaW5kZXguanNcIjtcclxuIiwiLy8gTm90ZTogb2JqZWN0LWZpdCBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGJlIGFwcGxpZWQgb24tZGVtYW5kIGluc3RlYWQgb2YgYXV0b21hdGljYWxseVxyXG4vLyBZb3UgbWF5IGludm9rZSBpdCBkaXJlY3RseSBpbiB5b3VyIHNjcmlwdHNcclxuXHJcbmltcG9ydCBcIi4vZXM2LXBvbHlmaWxsXCI7XHJcbmltcG9ydCBcIi4vY2xvc2VzdFwiO1xyXG5pbXBvcnQgXCIuL3BvcHN0YXRlLWV2ZW50XCI7XHJcblxyXG4vL05vZGVMaXN0IGZvckVhY2ggcG9seWZpbGxcclxuaWYgKHdpbmRvdy5Ob2RlTGlzdCAmJiAhTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2gpIHtcclxuICBOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xyXG59XHJcblxyXG4vLyBKb25hdGhhbiAxMC0yMDE5IC0gdGhpcyB3YXMgbWlzc2luZyBmb3Igc29tZSByZWFzb24uICBJJ20gYWRkaW5nIGl0LCBidXQgbGVhdmluZyBpdCBjb21tZW50ZWQgb3V0LlxyXG4vLyBpbXBvcnQgeyBvYmplY3RGaXRQb2x5ZmlsbCB9IGZyb20gXCIuL29iamVjdC1maXQuanNcIjtcclxuLy8gaWYgKFwib2JqZWN0Rml0XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlID09PSBmYWxzZSkge1xyXG4vLyAgIG9iamVjdEZpdFBvbHlmaWxsKCk7XHJcbi8vIH1cclxuXHJcbmltcG9ydCBzdmc0ZXZlcnlib2R5IGZyb20gXCJzdmc0ZXZlcnlib2R5XCI7XHJcbnN2ZzRldmVyeWJvZHkoKTtcclxuIiwiLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nIEV2ZW50IGNvbnN0cnVjdG9ycyAobmV3IEV2ZW50KCkpXHJcbi8vIElmIHdlIGNhbm5vdCB1c2UgdGhlIGNvbnN0cnVjdG9yLCB3ZSdsbCB1c2UgYSByZS1pbXBsZW1lbnRhdGlvbiBvZiBQb3BTdGF0ZUV2ZW50XHJcbi8vIGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBvbmUuXHJcblxyXG4vLyBUaGlzIHdhcyBkZXJpdmVkIGZyb20gdGhlIEN1c3RvbUV2ZW50IHBvbHlmaWxsIG9uIE1ETjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L0N1c3RvbUV2ZW50XHJcblxyXG4oZnVuY3Rpb24gKCkge1xyXG4gIGZ1bmN0aW9uIFBvcFN0YXRlRXZlbnQoZXZlbnQsIHBhcmFtcykge1xyXG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHtcclxuICAgICAgYnViYmxlczogZmFsc2UsXHJcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxyXG4gICAgICBzdGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIlBvcFN0YXRlRXZlbnRcIik7XHJcbiAgICBldnQuaW5pdFBvcFN0YXRlRXZlbnQoXHJcbiAgICAgIGV2ZW50LFxyXG4gICAgICBwYXJhbXMuc3RhdGUsXHJcbiAgICAgIHBhcmFtcy5idWJibGVzLFxyXG4gICAgICBwYXJhbXMuY2FuY2VsYWJsZSxcclxuICAgICk7XHJcbiAgICByZXR1cm4gZXZ0O1xyXG4gIH1cclxuXHJcbiAgUG9wU3RhdGVFdmVudC5wcm90b3R5cGUgPSB3aW5kb3cuUG9wU3RhdGVFdmVudC5wcm90b3R5cGU7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBuZXcgd2luZG93LlBvcFN0YXRlRXZlbnQoXCJ0ZXN0XCIpO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICB3aW5kb3cuUG9wU3RhdGVFdmVudCA9IFBvcFN0YXRlRXZlbnQ7XHJcbiAgfVxyXG59KSgpO1xyXG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKFwibG9jYWxcIiAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG5leHBvcnRzLkZyYWdtZW50ID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50IHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBleHBvcnRzLkZyYWdtZW50OlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIHNlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IHNlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8xMDdcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cblxuZnVuY3Rpb24ganN4REVWKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZik7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB7XG4gICAgaWYgKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAge1xuICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB7XG4gICAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICAgIGlmICghaW5mbykge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAge1xuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgc291cmNlLCBzZWxmKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXG5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljXG4gICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpc1xuICAgIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gICAgaWYgKHZhbGlkVHlwZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG5cbiAgICAgIGlmIChjaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2ldLCB0eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCdSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiAnICsgJ1lvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gJyArICdVc2UgdGhlIEJhYmVsIHRyYW5zZm9ybSBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbiwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCkge1xuICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufSAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGV4aXN0IHRvIHN0aWxsIGdldCBjaGlsZCB3YXJuaW5ncyBpbiBkZXZcbi8vIGV2ZW4gd2l0aCB0aGUgcHJvZCB0cmFuc2Zvcm0uIFRoaXMgbWVhbnMgdGhhdCBqc3hERVYgaXMgcHVyZWx5XG4vLyBvcHQtaW4gYmVoYXZpb3IgZm9yIGJldHRlciBtZXNzYWdlcyBidXQgdGhhdCB3ZSB3b24ndCBzdG9wXG4vLyBnaXZpbmcgeW91IHdhcm5pbmdzIGlmIHlvdSB1c2UgcHJvZHVjdGlvbiBhcGlzLlxuXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyh0eXBlLCBwcm9wcywga2V5KSB7XG4gIHtcbiAgICByZXR1cm4ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyh0eXBlLCBwcm9wcywga2V5KSB7XG4gIHtcbiAgICByZXR1cm4ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBqc3ggPSAganN4V2l0aFZhbGlkYXRpb25EeW5hbWljIDsgLy8gd2UgbWF5IHdhbnQgdG8gc3BlY2lhbCBjYXNlIGpzeHMgaW50ZXJuYWxseSB0byB0YWtlIGFkdmFudGFnZSBvZiBzdGF0aWMgY2hpbGRyZW4uXG4vLyBmb3Igbm93IHdlIGNhbiBzaGlwIGlkZW50aWNhbCBwcm9kIGZ1bmN0aW9uc1xuXG52YXIganN4cyA9ICBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyA7XG5cbmV4cG9ydHMuanN4ID0ganN4O1xuZXhwb3J0cy5qc3hzID0ganN4cztcbiAgfSkoKTtcbn1cbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIik7dmFyIGY9cmVxdWlyZShcInJlYWN0XCIpLGc9NjAxMDM7ZXhwb3J0cy5GcmFnbWVudD02MDEwNztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgaD1TeW1ib2wuZm9yO2c9aChcInJlYWN0LmVsZW1lbnRcIik7ZXhwb3J0cy5GcmFnbWVudD1oKFwicmVhY3QuZnJhZ21lbnRcIil9dmFyIG09Zi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gcShjLGEsayl7dmFyIGIsZD17fSxlPW51bGwsbD1udWxsO3ZvaWQgMCE9PWsmJihlPVwiXCIrayk7dm9pZCAwIT09YS5rZXkmJihlPVwiXCIrYS5rZXkpO3ZvaWQgMCE9PWEucmVmJiYobD1hLnJlZik7Zm9yKGIgaW4gYSluLmNhbGwoYSxiKSYmIXAuaGFzT3duUHJvcGVydHkoYikmJihkW2JdPWFbYl0pO2lmKGMmJmMuZGVmYXVsdFByb3BzKWZvcihiIGluIGE9Yy5kZWZhdWx0UHJvcHMsYSl2b2lkIDA9PT1kW2JdJiYoZFtiXT1hW2JdKTtyZXR1cm57JCR0eXBlb2Y6Zyx0eXBlOmMsa2V5OmUscmVmOmwscHJvcHM6ZCxfb3duZXI6bS5jdXJyZW50fX1leHBvcnRzLmpzeD1xO2V4cG9ydHMuanN4cz1xO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAoXCJsb2NhbFwiID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl19"}