PageSourceSearch

https://www.cyrela.com.br/themes/cyrela/dist/pdc.js?tlvscp

js cyrela.com.br collected 2026-09-24 19:45:51 UTC 71,887 bytes, 1 lines download raw bytes

1(self.webpackChunk=self.webpackChunk||[]).push([[5521,9697],{2679:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval('{/* harmony import */ var _guia_bairros__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3513);\n\nvar fetchAd = function fetchAd(cityId) {\n  fetch("/empreendimento-patrocinado/".concat(cityId)).then(function (data) {\n    return data.json();\n  }).then(function (data) {\n    if (data.length > 0) {\n      renderAd(data[0]);\n    }\n  });\n};\nvar renderAd = function renderAd(data) {\n  var adContainerPdc = document.querySelector(\'.ad-container-pdc\');\n  adContainerPdc.classList.add(\'is-visible\');\n  adContainerPdc.innerHTML = "\\n    <div class=\\"z-20 max-w-7xl flex w-full items-end lg__items-center\\">\\n      <div class=\\"flex flex-col px-6 lg__px-8 w-full lg__w-2/5\\">\\n          <h2 class=\\"text-white text-32p font-display mb-4\\">".concat(data.title, "</h2>\\n          <p class=\\"text-white text-16p mb-12\\">").concat(data.field_pdp_descricao, "</p>\\n          <a class=\\"text-white text-12p mb-20 lg__mb-0 border border-white text-center justify-center p-4 w-full lg__w-1/3\\" href=\\"").concat(data.view_node, "\\">SAIBA MAIS</a>\\n      </div>\\n    </div>\\n    <div class=\\"w-full absolute inset-0 bg-black opacity-70 z-10\\"></div>\\n    <img class=\\"hidden lg__block\\" src=\\"").concat(data.field_imagem_destaque_desktop, "\\" alt=\\"").concat(data.title, "\\" loading=\\"lazy\\">\\n    <img class=\\"lg__hidden\\" src=\\"").concat(data.field_imagem_destaque_mobile, "\\" alt=\\"").concat(data.title, "\\" loading=\\"lazy\\">\\n  ");\n};\nvar addLinkToNeighborhood = function addLinkToNeighborhood(url) {\n  var nomeCidade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";\n  var nomeBairro = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";\n  var neighborhoodLink = document.querySelector("#ver-bairro");\n  neighborhoodLink.href = url;\n  neighborhoodLink.onclick = function (_) {\n    window.dataLayer.push({\n      event: "pdc_conhecer_bairro",\n      "pagina_conteudo": url,\n      "nome_cidade": nomeCidade,\n      "nome_bairro": nomeBairro\n    });\n  };\n  neighborhoodLink.parentElement.classList.remove("hidden");\n};\nvar extractNeighborhoodFromCarrousel = function extractNeighborhoodFromCarrousel(cid, nid) {\n  if (!nid || nid.toLowerCase() === "all") return;\n  var carrousel = document.querySelector(".carrousel-bairros");\n  if (!carrousel) return;\n  if (carrousel.dataset.cidadeAtual === cid) {\n    var carrouselTitle = carrousel.parentElement.querySelector(".carrousel-header");\n    carrouselTitle.innerText = carrouselTitle.innerText.replace(" os bairros", " outros bairros");\n  }\n  var neighborhood = carrousel.querySelector("[data-bairro=\\"".concat(nid, "\\"]"));\n  if (!neighborhood) return;\n  (0,_guia_bairros__WEBPACK_IMPORTED_MODULE_0__/* .removerItemCarrousel */ .m)(function (i) {\n    return i.slide === neighborhood;\n  });\n  return neighborhood;\n};\nvar syncCarrouselFilters = function syncCarrouselFilters(cid) {\n  if (!cid || cid.toLowerCase() === "all") return;\n  var carrousel = document.querySelector(\'.carrousel-bairros\');\n  if (!carrousel) return;\n  if (carrousel.dataset.cidadeAtual === cid) {\n    // HACK: forçar sync da mesma cidade, para restaurar bairros removidos antes\n    carrousel.querySelector(\'input[type=submit]\').click();\n    return;\n  }\n  carrousel.querySelector("input[name=\\"field_cidade_target_id\\"][value=\\"".concat(cid, "\\"]")).click();\n};\nDrupal.behaviors.aplicarFiltros = {\n  attach: function attach(context) {\n    var pdc_form = document.querySelector(\'.resultPageSearch\').closest(\'form\');\n    var once_filtro = once(\'filtro_pdc\', pdc_form, context);\n    if (!once_filtro.length) return;\n    jQuery(document).ajaxComplete(function (event, xhr, settings) {\n      var _settings$extraData;\n      var isSearch = ((_settings$extraData = settings.extraData) === null || _settings$extraData === void 0 ? void 0 : _settings$extraData.view_name) === "busca_de_empreendimentos";\n      var selectedCity = document.querySelector(\'[data-drupal-selector="edit-field-cidade"]\');\n      var selectedCityId = selectedCity.value;\n      if (selectedCityId.toLowerCase() == \'all\') {\n        return;\n      }\n      var selectedCityName = selectedCity.options[selectedCity.selectedIndex].text;\n      var selectedNeighborhood = document.querySelector(\'[data-drupal-selector="edit-field-bairro"]\');\n      var selectedNeighborhoodId = selectedNeighborhood.value.toLowerCase();\n      var selectedNeighborhoodName = selectedNeighborhood.options[selectedNeighborhood.selectedIndex].text;
1\n      if (isSearch) {\n        // sync filtro aplicado à empreendimentos para o carrousel de bairros\n        syncCarrouselFilters(selectedCityId);\n        fetchAd(selectedCityId);\n        var fieldCidadeElement = document.querySelector(\'#field_cidade\');\n        if (selectedNeighborhoodId === "all") {\n          fieldCidadeElement.innerHTML = selectedCityName;\n          return;\n        }\n        fieldCidadeElement.innerHTML = selectedNeighborhoodName;\n        return;\n      }\n\n      // quando selecionar bairro, ocultar este do carrousel\n      var removedNeighborhood = extractNeighborhoodFromCarrousel(selectedCityId, selectedNeighborhoodId);\n      if (!removedNeighborhood) return;\n      addLinkToNeighborhood(removedNeighborhood.querySelector("a").href, selectedCityName, selectedNeighborhoodName);\n    });\n  }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY3OS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQVlBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvanMvcGRjLmpzP2Y3NjYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVtb3Zlckl0ZW1DYXJyb3VzZWwgfSBmcm9tIFwiLi9ndWlhLWJhaXJyb3NcIjtcblxuXG5jb25zdCBmZXRjaEFkID0gZnVuY3Rpb24gKGNpdHlJZCkge1xuICBmZXRjaChgL2VtcHJlZW5kaW1lbn
1RvLXBhdHJvY2luYWRvLyR7Y2l0eUlkfWApXG4gICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5qc29uKCk7XG4gICAgfSlcbiAgICAudGhlbihkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVuZGVyQWQoZGF0YVswXSlcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuY29uc3QgcmVuZGVyQWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBhZENvbnRhaW5lclBkYyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZC1jb250YWluZXItcGRjJyk7XG4gIGFkQ29udGFpbmVyUGRjLmNsYXNzTGlzdC5hZGQoJ2lzLXZpc2libGUnKTtcblxuICBhZENvbnRhaW5lclBkYy5pbm5lckhUTUwgPSBgXG4gICAgPGRpdiBjbGFzcz1cInotMjAgbWF4LXctN3hsIGZsZXggdy1mdWxsIGl0ZW1zLWVuZCBsZ19faXRlbXMtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBweC02IGxnX19weC04IHctZnVsbCBsZ19fdy0yLzVcIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LXdoaXRlIHRleHQtMzJwIGZvbnQtZGlzcGxheSBtYi00XCI+JHtkYXRhLnRpdGxlfTwvaDI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXdoaXRlIHRleHQtMTZwIG1iLTEyXCI+JHtkYXRhLmZpZWxkX3BkcF9kZXNjcmljYW99PC9wPlxuICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC13aGl0ZSB0ZXh0LTEycCBtYi0yMCBsZ19fbWItMCBib3JkZXIgYm9yZGVyLXdoaXRlIHRleHQtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNCB3LWZ1bGwgbGdfX3ctMS8zXCIgaHJlZj1cIiR7ZGF0YS52aWV3X25vZGV9XCI+U0FJQkEgTUFJUzwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgYWJzb2x1dGUgaW5zZXQtMCBiZy1ibGFjayBvcGFjaXR5LTcwIHotMTBcIj48L2Rpdj5cbiAgICA8aW1nIGNsYXNzPVwiaGlkZGVuIGxnX19ibG9ja1wiIHNyYz1cIiR7ZGF0YS5maWVsZF9pbWFnZW1fZGVzdGFxdWVfZGVza3RvcH1cIiBhbHQ9XCIke2RhdGEudGl0bGV9XCIgbG9hZGluZz1cImxhenlcIj5cbiAgICA8aW1nIGNsYXNzPVwibGdfX2hpZGRlblwiIHNyYz1cIiR7ZGF0YS5maWVsZF9pbWFnZW1fZGVzdGFxdWVfbW9iaWxlfVwiIGFsdD1cIiR7ZGF0YS50aXRsZX1cIiBsb2FkaW5nPVwibGF6eVwiPlxuICBgXG59XG5cbmNvbnN0IGFkZExpbmtUb05laWdoYm9yaG9vZCA9IGZ1bmN0aW9uICh1cmwsIG5vbWVDaWRhZGUgPSBcIlwiLCBub21lQmFpcnJvID0gXCJcIikge1xuICBjb25zdCBuZWlnaGJvcmhvb2RMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN2ZXItYmFpcnJvXCIpO1xuICBuZWlnaGJvcmhvb2RMaW5rLmhyZWYgPSB1cmw7XG5cbiAgbmVpZ2hib3Job29kTGluay5vbmNsaWNrID0gXyA9PiB7XG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoKHtcbiAgICAgIGV2ZW50OiBcInBkY19jb25oZWNlcl9iYWlycm9cIixcbiAgICAgIFwicGFnaW5hX2NvbnRldWRvXCI6IHVybCxcbiAgICAgIFwibm9tZV9jaWRhZGVcIjogbm9tZUNpZGFkZSxcbiAgICAgIFwibm9tZV9iYWlycm9cIjogbm9tZUJhaXJybyxcbiAgICB9KTtcbiAgfVxuICBuZWlnaGJvcmhvb2RMaW5rLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbn1cblxuY29uc3QgZXh0cmFjdE5laWdoYm9yaG9vZEZyb21DYXJyb3VzZWwgPSBmdW5jdGlvbiAoY2lkLCBuaWQpIHtcbiAgaWYgKCFuaWQgfHwgbmlkLnRvTG93ZXJDYXNlKCkgPT09IFwiYWxsXCIpIHJldHVybjtcblxuICBjb25zdCBjYXJyb3VzZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuY2Fycm91c2VsLWJhaXJyb3NgKTtcbiAgaWYgKCFjYXJyb3VzZWwpIHJldHVybjtcblxuICBpZiAoY2Fycm91c2VsLmRhdGFzZXQuY2lkYWRlQXR1YWwgPT09IGNpZCkge1xuICAgIGNvbnN0IGNhcnJvdXNlbFRpdGxlID0gY2Fycm91c2VsLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5jYXJyb3VzZWwtaGVhZGVyXCIpO1xuICAgIGNhcnJvdXNlbFRpdGxlLmlubmVyVGV4dCA9IGNhcnJvdXNlbFRpdGxlLmlubmVyVGV4dC5yZXBsYWNlKFwiIG9zIGJhaXJyb3NcIiwgXCIgb3V0cm9zIGJhaXJyb3NcIik7XG4gIH1cblxuICBjb25zdCBuZWlnaGJvcmhvb2QgPSBjYXJyb3VzZWwucXVlcnlTZWxlY3RvcihgW2RhdGEtYmFpcnJvPVwiJHtuaWR9XCJdYClcbiAgaWYgKCFuZWlnaGJvcmhvb2QpIHJldHVybjtcblxuICByZW1vdmVySXRlbUNhcnJvdXNlbChpID0+IGkuc2xpZGUgPT09IG5laWdoYm9yaG9vZCk7XG4gIHJldHVybiBuZWlnaGJvcmhvb2Q7XG59XG5cbmNvbnN0IHN5bmNDYXJyb3VzZWxGaWx0ZXJzID0gZnVuY3Rpb24gKGNpZCkge1xuICBpZiAoIWNpZCB8fCBjaWQudG9Mb3dlckNhc2UoKSA9PT0gXCJhbGxcIikgcmV0dXJuO1xuXG4gIGNvbnN0IGNhcnJvdXNlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJyb3VzZWwtYmFpcnJvcycpO1xuICBpZiAoIWNhcnJvdXNlbCkgcmV0dXJuO1xuXG4gIGlmIChjYXJyb3VzZWwuZGF0YXNldC5jaWRhZGVBdHVhbCA9PT0gY2lkKSB7XG4gICAgLy8gSEFDSzogZm9yw6dhciBzeW5jIGRhIG1lc21hIGNpZGFkZSwgcGFyYSByZXN0YXVyYXIgYmFpcnJvcyByZW1vdmlkb3MgYW50ZXNcbiAgICBjYXJyb3VzZWwucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1zdWJtaXRdJykuY2xpY2soKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNhcnJvdXNlbC5xdWVyeVNlbGVjdG9yKGBpbnB1dFtuYW1lPVwiZmllbGRfY2lkYWRlX3RhcmdldF9pZFwiXVt2YWx1ZT1cIiR7Y2lkfVwiXWApLmNsaWNrKCk7XG59XG5cbkRydXBhbC5iZWhhdmlvcnMuYXBsaWNhckZpbHRyb3MgPSB7XG4gIGF0dGFjaDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBjb25zdCBwZGNfZm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yZXN1bHRQYWdlU2VhcmNoJykuY2xvc2VzdCgnZm9ybScpO1xuICAgIGNvbnN0IG9uY2VfZmlsdHJvID0gb25jZSgnZmlsdHJvX3BkYycsIHBkY19mb3JtLCBjb250ZXh0KTtcblxuICAgIGlmICghb25jZV9maWx0cm8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBqUXVlcnkoZG9jdW1lbnQpLmFqYXhDb21wbGV0ZShmdW5jdGlvbiAoZXZlbnQsIHhociwgc2V0dGluZ3MpIHtcblxuICAgICAgY29uc3QgaXNTZWFyY2ggPSBzZXR0aW5ncy5leHRyYURhdGE/LnZpZXdfbmFtZSA9PT0gXCJidXNjYV9kZV9lbXByZWVuZGltZW50b3NcIjtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRDaXR5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZ
1HJ1cGFsLXNlbGVjdG9yPVwiZWRpdC1maWVsZC1jaWRhZGVcIl0nKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2l0eUlkID0gc2VsZWN0ZWRDaXR5LnZhbHVlO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRDaXR5SWQudG9Mb3dlckNhc2UoKSA9PSAnYWxsJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2l0eU5hbWUgPSBzZWxlY3RlZENpdHkub3B0aW9uc1tzZWxlY3RlZENpdHkuc2VsZWN0ZWRJbmRleF0udGV4dFxuXG4gICAgICBjb25zdCBzZWxlY3RlZE5laWdoYm9yaG9vZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRydXBhbC1zZWxlY3Rvcj1cImVkaXQtZmllbGQtYmFpcnJvXCJdJyk7XG4gICAgICBjb25zdCBzZWxlY3RlZE5laWdoYm9yaG9vZElkID0gc2VsZWN0ZWROZWlnaGJvcmhvb2QudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTmVpZ2hib3Job29kTmFtZSA9IHNlbGVjdGVkTmVpZ2hib3Job29kLm9wdGlvbnNbc2VsZWN0ZWROZWlnaGJvcmhvb2Quc2VsZWN0ZWRJbmRleF0udGV4dDtcblxuXG4gICAgICBpZiAoaXNTZWFyY2gpIHtcbiAgICAgICAgLy8gc3luYyBmaWx0cm8gYXBsaWNhZG8gw6AgZW1wcmVlbmRpbWVudG9zIHBhcmEgbyBjYXJyb3VzZWwgZGUgYmFpcnJvc1xuICAgICAgICBzeW5jQ2Fycm91c2VsRmlsdGVycyhzZWxlY3RlZENpdHlJZClcblxuICAgICAgICBmZXRjaEFkKHNlbGVjdGVkQ2l0eUlkKTtcblxuICAgICAgICBjb25zdCBmaWVsZENpZGFkZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZmllbGRfY2lkYWRlJyk7XG4gICAgICAgIGlmIChzZWxlY3RlZE5laWdoYm9yaG9vZElkID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgZmllbGRDaWRhZGVFbGVtZW50LmlubmVySFRNTCA9IHNlbGVjdGVkQ2l0eU5hbWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkQ2lkYWRlRWxlbWVudC5pbm5lckhUTUwgPSBzZWxlY3RlZE5laWdoYm9yaG9vZE5hbWU7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG5cbiAgICAgIC8vIHF1YW5kbyBzZWxlY2lvbmFyIGJhaXJybywgb2N1bHRhciBlc3RlIGRvIGNhcnJvdXNlbFxuICAgICAgY29uc3QgcmVtb3ZlZE5laWdoYm9yaG9vZCA9IGV4dHJhY3ROZWlnaGJvcmhvb2RGcm9tQ2Fycm91c2VsKHNlbGVjdGVkQ2l0eUlkLCBzZWxlY3RlZE5laWdoYm9yaG9vZElkKVxuICAgICAgaWYgKCFyZW1vdmVkTmVpZ2hib3Job29kKSByZXR1cm47XG5cbiAgICAgIGFkZExpbmtUb05laWdoYm9yaG9vZChcbiAgICAgICAgcmVtb3ZlZE5laWdoYm9yaG9vZC5xdWVyeVNlbGVjdG9yKFwiYVwiKS5ocmVmLFxuICAgICAgICBzZWxlY3RlZENpdHlOYW1lLFxuICAgICAgICBzZWxlY3RlZE5laWdoYm9yaG9vZE5hbWUsXG4gICAgICApO1xuXG4gICAgfSk7XG4gIH1cbn1cblxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2679\n\n}')},3513:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('{/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   m: () => (/* binding */ removerItemCarrousel)\n/* harmony export */ });\n/* harmony import */ var _splidejs_splide__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7846);\n/* harmony import */ var _js_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6167);\nvar _templateObject, _templateObject2;\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {};
1 r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\n\n\n\n/**@type {Splide}*/\nvar galeriaSplide;\n\n/**\n * @typedef {Object} ItemsPool\n * @property {HTMLElement} ItemsPool.lista\n * @property {HTMLElement} ItemsPool.header\n */\n\n/**\n * Variavel "global" para acomodar as principais entidades\n * envolvidas no dropdown customizado\n *\n * Tem objetivo de facilitar a escrita do código,\n * dado multilos usos desses itens em partes variadas\n *\n * @type {HTMLDetailsElement & ItemsPool}\n * */\nvar Dropdown;\n\n/** Verifica se view de bairros está na página de "listagem de bairros" */\nvar estaNaListagem = function estaNaListagem(_) {\n  var _Dropdown;\n  return (_Dropdown = Dropdown) === null || _Dropdown === void 0 ? void 0 : _Dropdown.parentElement.classList.contains(\'filtro-listagem-bairros\');\n};\nDrupal.behaviors.filtroBairros = {\n  attach: function attach(context, settings) {\n    once("filtroBairros", \'#cidade-select\', context).forEach(function (/**@type {HTMLDetailsElement}*/dropdownCidades) {\n      // inicializar\n      Dropdown = dropdownCidades;\n      Dropdown.lista = dropdownCidades.querySelector(\'.lista-cidades\');\n      Dropdown.header = dropdownCidades.querySelector(\'summary\');\n\n      // Filtro de cidades\n      Dropdown.header.addEventListener(\'keydown\', tecladoAbreFiltro);\n      Dropdown.lista.addEventListener(\'keydown\', tecladoNavegaCidades);\n\n      // apenas na "listagem de bairros"\n      if (estaNaListagem()) {\n        Dropdown.removeAttribute(\'open\'); // forçar carregar fechado\n\n        // mostar descrição no page load\n        var cidadeAtual = Dropdown.querySelector(\'.cidade-atual\').dataset.cidade;\n        exibirDescriaoCidade(cidadeAtual);\n        Dropdown.lista.querySelectorAll(\'.list-item\').forEach(function (i) {\n          return i.addEventListener(\'click\', function (_) {\n            ocultaCidadeAtual(i);\n            exibirDescriaoCidade(i.dataset.cidade);\n          });\n        });\n      }\n\n      // DataLayer: seleção de cidade no filtro\n      Dropdown.lista.querySelectorAll(\'.list-item\').forEach(function (i) {\n        return i.addEventListener(\'click\', function (_) {\n          dataLayerSelecionaCidade(i.textContent.trim());\n        });\n      });\n    });\n  }\n};\nDrupal.behaviors.descricaoCidade = {\n  attach: function attach(context, settings) {\n    once("descricaoCidade", \'.descricao-da-cidade\', context).forEach(function (descricao) {\n      var _descricao$querySelec;\n      descricao.dataset.collapsed = true;\n      (_descricao$querySelec = descricao.querySelector(\'.toggle-button\')) === null || _descricao$querySelec === void 0 || _descricao$querySelec.addEventListener(\'click\', function (_) {\n        descricao.dataset.collapsed = descricao.dataset.collapsed === "true" ? "false" : "true";\n      });\n    });\n  }\n};\nDrupal.behaviors.abrirFecharConteudo = {\n  attach: function attach(context, settings) {\n    once("abrirFecharConteudo", \'button.toggle-collapse\', context).forEach(function (btn) {\n      var conteudo = btn.closest(\'[data-collapsed]\');\n      if (!conteudo) return;\n      btn.addEventListener(\'click\', function (_) {\n        conteudo.dataset.collapsed = conteudo.dataset.collapsed === "true" ? "false" : "true";\n      });\n    });\n  }\n};\nDrupal.behaviors.carrouselBairros = {\n  attach: function attach(context, settings) {\n    // Resultado da view: lista de bairros na cidade filtrada\n    once("carrouselBairros", \'.splide-bairros\', context).forEach(function (listaBairros) {\n      galeriaSplide = new _splidejs_splide__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay(listaBairros, {\n        perMove: 1,\n        arrows: true,\n        pagination: false,\n        rewind: false,\n        drag: true,\n        keyboard: "focused",\n        live: true,\n        mediaQuery: "min",\n        padding: {\n          left: "1.5rem",\n          right: "3rem"\n        },\n        gap: 24,\n        breakpoints: {\n          769: {\n            padding: {\n              left: "3rem",\n              right: "5rem"\n            },\n            gap: 28\n          },\n          1024: {\n            padding: {\n              left: "5rem",\n              right: "5rem"\n            },\n            gap: 32,\n            perPage: 3\n          }\n        }\n      });\n      galeriaSplide.mount();\n    });\n  }\n};\nDrupal.behaviors.dataLayerCardsBairros = {\n  attach: function attach(context, settings) {\n    once("carrouselBairros", \'.bairro-card\', context).forEach(function (bairroCard) {\n      // dispara dataLayer em \'gatilhos\' determinados no HTML\n      var triggers = Array.from(bairroCard.querySelectorAll(\'.bairro-card-trigger\'));\n      // apenas se não houver gatilhos especificados, dispara no card todo\n      if (triggers.length === 0) triggers.push(bairroCard);
1\n      triggers.forEach(function (t) {\n        return t.addEventListener(\'click\', function (_) {\n          if (bairroCard.hasAttribute(\'data-evento-disparado\')) return;\n          bairroCard.setAttribute(\'data-evento-disparado\', true);\n          window.dataLayer.push({\n            \'event\': \'click_bairro\',\n            \'bairro\': {\n              \'bairro_nome\': (0,_js_utils__WEBPACK_IMPORTED_MODULE_1__/* .normalizeToDataLayer */ .SP)(bairroCard.dataset.nomeBairro),\n              \'bairro_regiao\': (0,_js_utils__WEBPACK_IMPORTED_MODULE_1__/* .normalizeToDataLayer */ .SP)(bairroCard.dataset.nomeRegiao)\n            }\n          });\n        });\n      });\n    });\n  }\n};\n\n/** @argument {Parameters<Splide[\'remove\']>[0]} matcher */\nfunction removerItemCarrousel(matcher) {\n  if (!galeriaSplide) return;\n  galeriaSplide.remove(matcher);\n}\nfunction exibirDescriaoCidade(idCidade) {\n  var _descricoAtual$classL, _descricoesSelecionad;\n  if (!idCidade) return;\n  var descricoAtual = document.querySelector(\'.descricao-da-cidade.cidade-atual\');\n  var descricoesSelecionada = document.querySelector(".descricao-da-cidade[data-cidade=\\"".concat(idCidade, "\\"]"));\n  descricoAtual === null || descricoAtual === void 0 || (_descricoAtual$classL = descricoAtual.classList) === null || _descricoAtual$classL === void 0 || _descricoAtual$classL.remove(\'cidade-atual\');\n  descricoesSelecionada === null || descricoesSelecionada === void 0 || (_descricoesSelecionad = descricoesSelecionada.classList) === null || _descricoesSelecionad === void 0 || _descricoesSelecionad.add(\'cidade-atual\');\n}\nfunction fecharFiltro() {\n  Dropdown.removeAttribute(\'open\');\n  Dropdown.header.focus();\n}\nfunction abrirFiltro() {\n  Dropdown.setAttribute(\'open\', \'\');\n  selecionaPrimeiroItem();\n}\nfunction selecionaPrimeiroItem() {\n  var _item;\n  var item = Dropdown.lista.firstElementChild;\n  if ((_item = item) !== null && _item !== void 0 && _item.classList.contains("cidade-atual")) {\n    item = item.nextElementSibling;\n  }\n  item.focus();\n}\n\n/**\n * @argument {KeyboardEvent} event\n * */\nfunction tecladoAbreFiltro(event) {\n  if (event.key === \'ArrowDown\') {\n    event.preventDefault();\n    abrirFiltro();\n  } else if (event.key === \'ArrowUp\' || event.key === \'Escape\') {\n    event.preventDefault();\n    fecharFiltro();\n  }\n}\nfunction dataLayerSelecionaCidade(cidade) {\n  window.dataLayer.push({\n    event: \'bairros_selecionar_cidade\',\n    cidade: (0,_js_utils__WEBPACK_IMPORTED_MODULE_1__/* .normalizeToDataLayer */ .SP)(cidade)\n  });\n}\n\n/**\n * @argument {KeyboardEvent} event\n * */\nfunction tecladoNavegaCidades(event) {\n  if (event.key === \'Enter\' || event.key == \' \') {\n    event.preventDefault();\n    event.target.click();\n    return;\n  }\n  if (event.key === \'Escape\') {\n    event.preventDefault();\n    fecharFiltro();\n  }\n  if (event.key === \'ArrowUp\') {\n    var _ante;\n    event.preventDefault();\n    var ante = event.target.previousElementSibling;\n    if ((_ante = ante) !== null && _ante !== void 0 && _ante.classList.contains("cidade-atual")) ante = ante.previousElementSibling;\n    if (ante) ante.focus();else fecharFiltro();\n  } else if (event.key === \'ArrowDown\') {\n    var _prox;\n    event.preventDefault();\n    var prox = event.target.nextElementSibling;\n    if ((_prox = prox) !== null && _prox !== void 0 && _prox.classList.contains("cidade-atual")) prox = prox.nextElementSibling;\n    if (prox) prox.focus();\n  }\n}\n\n/**\n * @argument {HTMLElement} itemAtivado\n * */\nfunction ocultaCidadeAtual(itemAtivado) {\n  fecharFiltro();\n  Dropdown.querySelector(\'.titulo-dropdown\').innerText = itemAtivado.textContent.trim();\n  Dropdown.querySelector(\'.cidade-atual\').classList.remove(\'cidade-atual\');\n  itemAtivado.classList.add(\'cidade-atual\');\n}\n\n/*\n * ==========================================\n * Conteudo do bairro\n * ==========================================\n*/\nDrupal.behaviors.conteudoBairro = {\n  attach: function attach(context, settings) {\n    once("conteudoBairro", \'.explore-content\', 
1context).forEach(function (secaoConteudo) {\n      // HACK: garantir que não haja overflow hidden para que `position: sticky` funcione\n      document.body.style.overflow = \'initial\';\n\n      // preparar troca de html para splide\n      var track = secaoConteudo.querySelector(\'.splide__track\');\n      track === null || track === void 0 || track.scrollTo({\n        left: 0\n      });\n      track === null || track === void 0 || track.classList.remove(\'overflow-auto\');\n      secaoConteudo.classList.add(\'splide\');\n      var initialSlide = 0;\n      var tabs = secaoConteudo.parentElement.querySelector(\'.explore-tabs\');\n      tabs.querySelectorAll(\'a\').forEach(function (a, k) {\n        if (a.getAttribute(\'href\') === location.hash) initialSlide = k;\n        a.href = \'javascript:void(0)\';\n      });\n      tabs.classList.add(\'splide\');\n\n      // construir ambos slides: abas e conteudo\n      var slidesOpts = {\n        arrows: false,\n        pagination: false,\n        drag: false\n      };\n      var slideAbas = new _splidejs_splide__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay(tabs, _objectSpread(_objectSpread({}, slidesOpts), {}, {\n        isNavigation: true\n      }));\n      var slideConteudo = new _splidejs_splide__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay(secaoConteudo, slidesOpts);\n\n      // sincronizar abas e conteudos slides\n      slideConteudo.sync(slideAbas);\n      slideConteudo.mount();\n      slideAbas.mount();\n      if (initialSlide) slideConteudo.go(initialSlide);\n      var alturaHeader = document.querySelector(\'#menu-desktop\').getBoundingClientRect().height;\n      slideConteudo.on(\'move\', function (_) {\n        var posConteudo = slideConteudo.root.getBoundingClientRect().y + window.scrollY;\n        window.scrollTo({\n          top: posConteudo - alturaHeader,\n          behavior: \'smooth\'\n        });\n      });\n    });\n  }\n};\n\n/*\n * ==========================================\n * Lista de info do bairro, abaixo do MAPA\n * ==========================================\n*/\n\nvar screens = __webpack_require__(4551);\nDrupal.behaviors.listagemBairros = {\n  attach: function attach(context, settings) {\n    // Resultado da view: lista de bairros na cidade filtrada\n    once("listagemBairros", \'.infos-bairro\', context).forEach(function (infosBairro) {\n      infosBairro.classList.add(\'splide\');\n      var slidesCount = infosBairro.querySelectorAll(\'.splide__slide\').length;\n      new _splidejs_splide__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay(infosBairro, {\n        type: \'slide\',\n        mediaQuery: \'min\',\n        autoWidth: true,\n        arrows: false,\n        perPage: 1,\n        perMove: 1,\n        pagination: true,\n        padding: \'1.5rem\',\n        breakpoints: _defineProperty(_defineProperty({}, parseInt(screens.xs), {\n          perPage: slidesCount > 2 ? 2 : 1,\n          padding: \'2rem\'\n        }), parseInt(screens.ms), {\n          pagination: false\n        })\n      }).mount();\n    });\n  }\n};\n\n/*\n * ==========================================\n * MAPA da pagina de conteudo do bairro (PDB)\n * ==========================================\n*/\nwindow.initMap = function () {\n  var mapa = document.querySelector(\'#mapa-bairro\');\n  if (!mapa) return;\n  renderizarMapaBairro(mapa);\n};\nvar iconesPropsEmp = {\n  "m²": "metragem-dark.svg",\n  "suítes": "suite_dark.svg",\n  "dorm.": "bedrooms_dark.svg",\n  "vagas": "vagas-dark.svg"\n};\nfunction renderizarMapaBairro(mapa) {\n  var geoLocData = document.querySelector("#geoloc-empreendimentos");\n  var locations = JSON.parse(geoLocData.textContent);\n  if (!locations) return;\n  var bounds = new google.maps.LatLngBounds();\n  var map = new google.maps.Map(mapa, _defineProperty(_defineProperty(_defineProperty({\n    // camera inicial em um dos empreendimentos\n    center: locations[0],\n    zoom: 15,\n    // reduzir items da UI\n    streetViewControl: false,\n    mapTypeControl: false,\n    panControl: false,\n    scaleControl: false,\n    cameraControl: false\n  }, "panControl", false), "zoomControl", true), "styles", [{\n    "featureType": "all",\n    "elementType": "labels.text",\n    "stylers": [{\n      "color": "#878787"\n    }]\n  }, {\n    "featureType": "all",\n    "elementType": "labels.text.stroke",\n    "stylers": [{\n      "visibility": "off"\n    }]\n  }]));\n\n  // Card de empreendimento\n  var infoWindow = new google.maps.InfoWindow({\n    content: \'\',\n    maxWidth: 250\n  });\n\n  // Criar os pins do empreendimentos\n  var simplePin = {\n    url: "/themes/cyrela/img/icons/pin-cyrela.svg",\n    scaledSize: new google.maps.Size(42, 51)\n  };\n  locations.forEach(function (location) {\n    var marker = new google.maps.Marker({\n      position: location,\n      map: map,\n      title: location.name,\n      icon: simplePin\n    });\n    bounds.extend(marker.position);\n\n    // Abrir card do empreendimento ao clicar no pin\n    marker.addListener(\'click\', function () {\n      var content = (0,_js_utils__WEBPACK_IMPORTED_MODULE_1__/* .html */ .qy)(_templateOb
1ject || (_templateObject = _taggedTemplateLiteral(["\\n        <div class=\\"w-[217px] overflow-hidden\\">\\n          <img src=\\"", "\\" alt=\\"", "\\" class=\\"w-full h-[180px] object-cover\\">\\n\\n          <div class=\\"mt-4 flex flex-col gap-4\\">\\n            <h3 class=\\"text-16p font-bold\\">", "</h3>\\n\\n            <div class=\\"grid grid-cols-2 gap-4\\">\\n            ", "\\n            </div>\\n\\n            <a href=\\"", "\\" target=\\"_blank\\" id=\\"cta-button\\" class=\\"w-full py-3 text-center bg-neutral-color-dark-pure text-neutral-color-light-pure\\">\\n              CONHECER IM\\xD3VEL\\n            </a>\\n          </div>\\n        </div>\\n      "])), location.image.src, location.image.alt, location.name, Object.entries(location.props).map(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n          k = _ref2[0],\n          desc = _ref2[1];\n        return (0,_js_utils__WEBPACK_IMPORTED_MODULE_1__/* .html */ .qy)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\\n              <div class=\\"flex items-center\\">\\n                <img src=\\"/themes/cyrela/img/icons/", "\\" class=\\"w-5 mr-2 h-6\\">\\n                <span class=\\"text-sm\\">", "</span>\\n              </div>\\n            "])), iconesPropsEmp[k], desc);\n      }).join(\'\'), location.url);\n      infoWindow.setContent(content);\n      infoWindow.open(map, marker);\n    });\n  });\n\n  // reposicionar camera para ver todos os pins\n  var margin = 100;\n  map.fitBounds(bounds, {\n    top: margin,\n    left: margin,\n    right: margin,\n    bottom: margin\n  });\n  contornarBairroNoMapa(map, mapa);\n}\nfunction contornarBairroNoMapa(map, mapElement) {\n  var _mapElement$dataset = mapElement.dataset,\n    bairro = _mapElement$dataset.bairro,\n    cidade = _mapElement$dataset.cidade,\n    estado = _mapElement$dataset.estado;\n  var buscaRegiao = [bairro, cidade, estado, "Brasil"].join(\', \');\n  fetch("https://nominatim.openstreetmap.org/search?" + new URLSearchParams({\n    q: buscaRegiao,\n    format: \'json\',\n    polygon_geojson: 1,\n    polygon_threshold: 0.0001,\n    limit: 1\n  })).then(function (payload) {\n    return payload.json();\n  }).then(function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 1),\n      response = _ref4[0];\n    var fronteiraBairro = response.geojson.coordinates[0].map(function (c) {\n      return {\n        lat: c[1],\n        lng: c[0]\n      };\n    });\n    new google.maps.Polyline({\n      map: map,\n      path: fronteiraBairro,\n      clickable: false,\n      strokeOpacity: 0,\n      strokeColor: "#e11f1d",\n      icons: [{\n        icon: {\n          path: \'M 0,0 0,4\',\n          strokeOpacity: .5,\n          scale: 2\n        },\n        offset: "0",\n        repeat: "16px"\n      }]\n    });\n  })["catch"](function (error) {\n    console.error(\'Map region outlining error:\', error);\n  });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUxMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0F
1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFHQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUVBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQVlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvanMvZ3VpYS1iYWlycm9zLmpzP2VmODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNwbGlkZSBmcm9tICdAc3BsaWRlanMvc3BsaWRlJztcbmltcG9ydCB7IGh0bWwsIG5vcm1hbGl6ZVRvRGF0YUxheWVyIH0gZnJvbSAnQGpzL3V0aWxzJztcblxuLyoqQHR5cGUge1NwbGlkZX0qL1xubGV0IGdhbGVyaWFTcGxpZGU7XG5cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEl0ZW1zUG9vbFxuICogQHByb3BlcnR5IHtIVE1MRWxlbWVudH0gSXRlbXNQb29sLmxpc3RhXG4gKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fSBJdGVtc1Bvb2wuaGVhZGVyXG4gKi9cblxuLyoqXG4gKiBWYXJpYXZlbCBcImdsb2JhbFwiIHBhcmEgYWNvbW9kYXIgYXMgcHJpbmNpcGFpcyBlbnRpZGFkZXNcbiAqIGVudm9sdmlkYXMgbm8gZHJvcGRvd24gY3VzdG9taXphZG9cbiAqXG4gKiBUZW0gb2JqZXRpdm8gZGUgZmFjaWxpdGFyIGEgZXNjcml0YSBkbyBjw7NkaWdvLFxuICogZGFkbyBtdWx0aWxvcyB1c29zIGRlc3NlcyBpdGVucyBlbSBwYXJ0ZXMgdmFyaWFkYXNcbiAqXG4gKiBAdHlwZSB7SFRNTERldGFpbHNFbGVtZW50ICYgSXRlbXNQb29sfVxuICogKi9cbmxldCBEcm9wZG93bjtcblxuLyoqIFZlcmlmaWNhIHNlIHZpZXcgZGUgYmFpcnJvcyBlc3TDoSBuYSBww6FnaW5hIGRlIFwibGlzdGFnZW0gZGUgYmFpcnJvc1wiICovXG5jb25zdCBlc3RhTmFMaXN0YWdlbSA9IF8gPT4gRHJvcGRvd24/LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmaWx0cm8tbGlzdGFnZW0tYmFpcnJvcycpXG5cbkRydXBhbC5iZWhhdmlvcnMuZmlsdHJvQmFpcnJvcyA9IHtcbiAgYXR0YWNoOiBmdW5jdGlvbiAoY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICBvbmNlKFwiZmlsdHJvQmFpcnJvc1wiLCAnI2NpZGFkZS1zZWxlY3QnLCBjb250ZXh0KS5mb3JFYWNoKCggLyoqQHR5cGUge0hUTUxEZXRhaWxzRWxlbWVudH0qL2Ryb3Bkb3duQ2lkYWRlcykgPT4ge1xuXG4gICAgICAvLyBpbmljaWFsaXphclxuICAgICAgRHJvcGRvd24gPSBkcm9wZG93bkNpZGFkZXM7XG4gICAgICBEcm9wZG93bi5saXN0YSA9IGRyb3Bkb3duQ2lkYWRlcy5xdWVyeVNlbGVjdG9yKCcubGlzdGEtY2lkYWRlcycpO1xuICAgICAgRHJvcGRvd24uaGVhZGVyID0gZHJvcGRvd25DaWRhZGVzLnF1ZXJ5U2VsZWN0b3IoJ3N1bW1hcnknKTtcblxuXG5cbiAgICAgIC8vIEZpbHRybyBkZSBjaWRhZGVzXG4gICAgICBEcm9wZG93bi5oZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRlY2xhZG9BYnJlRmlsdHJvKTtcbiAgICAgIERyb3Bkb3duLmxpc3RhLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0ZWNsYWRvTmF2ZWdhQ2lkYWRlcyk7XG5cblxuICAgICAgLy8gYXBlbmFzIG5hIFwibGlzdGFnZW0gZGUgYmFpcnJvc1wiXG4gICAgICBpZiAoZXN0YU5hTGlzdGFnZW0oKSkge1xuICAgICAgICBEcm9wZG93bi5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKSAvLyBmb3LDp2FyIGNhcnJlZ2FyIGZlY2hhZG9cblxuICAgICAgICAvLyBtb3N0YXIgZGVzY3Jpw6fDo28gbm8gcGFnZSBsb2FkXG4gICAgICAgIGNvbnN0IGNpZGFkZUF0dWFsID0gRHJvcGRvd24ucXVlcnlTZWxlY3RvcignLmNpZGFkZS1hdHVhbCcpLmRhdGFzZXQuY2lkYWRlO1xuICAgICAgICBleGliaXJEZXNjcmlhb0NpZGFkZShjaWRhZGVBdHVhbClcblxuICAgICAgICBEcm9wZG93bi5saXN0YVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcubGlzdC1pdGVtJylcbiAgICAgICAgICAuZm9yRWFjaChpID0+IGkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfID0+IHtcbiAgICAgICAgICAgIG9jdWx0YUNpZGFkZUF0dWFsKGkpXG4gICAgICAgICAgICBleGliaXJEZXNjcmlhb0NpZGFkZShpLmRhdGFzZXQuY2lkYWRlKVxuICAgICAgICAgI
1H0pKVxuICAgICAgfVxuXG4gICAgICAvLyBEYXRhTGF5ZXI6IHNlbGXDp8OjbyBkZSBjaWRhZGUgbm8gZmlsdHJvXG4gICAgICBEcm9wZG93bi5saXN0YS5xdWVyeVNlbGVjdG9yQWxsKCcubGlzdC1pdGVtJylcbiAgICAgICAgLmZvckVhY2goaSA9PiBpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgXyA9PiB7XG4gICAgICAgICAgZGF0YUxheWVyU2VsZWNpb25hQ2lkYWRlKGkudGV4dENvbnRlbnQudHJpbSgpKVxuICAgICAgICB9KSlcbiAgICB9KTtcbiAgfVxufVxuXG5EcnVwYWwuYmVoYXZpb3JzLmRlc2NyaWNhb0NpZGFkZSA9IHtcbiAgYXR0YWNoOiBmdW5jdGlvbiAoY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICBvbmNlKFwiZGVzY3JpY2FvQ2lkYWRlXCIsICcuZGVzY3JpY2FvLWRhLWNpZGFkZScsIGNvbnRleHQpLmZvckVhY2goZGVzY3JpY2FvID0+IHtcbiAgICAgIGRlc2NyaWNhby5kYXRhc2V0LmNvbGxhcHNlZCA9IHRydWU7XG5cbiAgICAgIGRlc2NyaWNhby5xdWVyeVNlbGVjdG9yKCcudG9nZ2xlLWJ1dHRvbicpPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIF8gPT4ge1xuICAgICAgICBkZXNjcmljYW8uZGF0YXNldC5jb2xsYXBzZWQgPSBkZXNjcmljYW8uZGF0YXNldC5jb2xsYXBzZWQgPT09IFwidHJ1ZVwiID8gXCJmYWxzZVwiIDogXCJ0cnVlXCJcbiAgICAgIH0pO1xuICAgIH0pXG4gIH1cbn1cblxuRHJ1cGFsLmJlaGF2aW9ycy5hYnJpckZlY2hhckNvbnRldWRvID0ge1xuICBhdHRhY2g6IGZ1bmN0aW9uIChjb250ZXh0LCBzZXR0aW5ncykge1xuICAgIG9uY2UoXCJhYnJpckZlY2hhckNvbnRldWRvXCIsICdidXR0b24udG9nZ2xlLWNvbGxhcHNlJywgY29udGV4dCkuZm9yRWFjaChidG4gPT4ge1xuICAgICAgY29uc3QgY29udGV1ZG8gPSBidG4uY2xvc2VzdCgnW2RhdGEtY29sbGFwc2VkXScpO1xuICAgICAgaWYgKCFjb250ZXVkbykgcmV0dXJuO1xuXG4gICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfID0+IHtcbiAgICAgICAgY29udGV1ZG8uZGF0YXNldC5jb2xsYXBzZWQgPSBjb250ZXVkby5kYXRhc2V0LmNvbGxhcHNlZCA9PT0gXCJ0cnVlXCIgPyBcImZhbHNlXCIgOiBcInRydWVcIlxuICAgICAgfSk7XG4gICAgfSlcbiAgfVxufVxuXG5cbkRydXBhbC5iZWhhdmlvcnMuY2Fycm91c2VsQmFpcnJvcyA9IHtcbiAgYXR0YWNoOiBmdW5jdGlvbiAoY29udGV4dCwgc2V0dGluZ3MpIHtcblxuICAgIC8vIFJlc3VsdGFkbyBkYSB2aWV3OiBsaXN0YSBkZSBiYWlycm9zIG5hIGNpZGFkZSBmaWx0cmFkYVxuICAgIG9uY2UoXCJjYXJyb3VzZWxCYWlycm9zXCIsICcuc3BsaWRlLWJhaXJyb3MnLCBjb250ZXh0KS5mb3JFYWNoKGxpc3RhQmFpcnJvcyA9PiB7XG5cbiAgICAgIGdhbGVyaWFTcGxpZGUgPSBuZXcgU3BsaWRlKGxpc3RhQmFpcnJvcywge1xuICAgICAgICBwZXJNb3ZlOiAxLFxuICAgICAgICBhcnJvd3M6IHRydWUsXG4gICAgICAgIHBhZ2luYXRpb246IGZhbHNlLFxuICAgICAgICByZXdpbmQ6IGZhbHNlLFxuICAgICAgICBkcmFnOiB0cnVlLFxuXG4gICAgICAgIGtleWJvYXJkOiBcImZvY3VzZWRcIixcbiAgICAgICAgbGl2ZTogdHJ1ZSxcblxuICAgICAgICBtZWRpYVF1ZXJ5OiBcIm1pblwiLFxuICAgICAgICBwYWRkaW5nOiB7IGxlZnQ6IFwiMS41cmVtXCIsIHJpZ2h0OiBcIjNyZW1cIiB9LFxuICAgICAgICBnYXA6IDI0LFxuXG4gICAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgICAgNzY5OiB7XG4gICAgICAgICAgICBwYWRkaW5nOiB7IGxlZnQ6IFwiM3JlbVwiLCByaWdodDogXCI1cmVtXCIgfSxcbiAgICAgICAgICAgIGdhcDogMjgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAxMDI0OiB7XG4gICAgICAgICAgICBwYWRkaW5nOiB7IGxlZnQ6IFwiNXJlbVwiLCByaWdodDogXCI1cmVtXCIgfSxcbiAgICAgICAgICAgIGdhcDogMzIsXG4gICAgICAgICAgICBwZXJQYWdlOiAzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgZ2FsZXJpYVNwbGlkZS5tb3VudCgpO1xuICAgIH0pXG4gIH1cbn1cblxuRHJ1cGFsLmJlaGF2aW9ycy5kYXRhTGF5ZXJDYXJkc0JhaXJyb3MgPSB7XG4gIGF0dGFjaDogZnVuY3Rpb24gKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgb25jZShcImNhcnJvdXNlbEJhaXJyb3NcIiwgJy5iYWlycm8tY2FyZCcsIGNvbnRleHQpLmZvckVhY2goYmFpcnJvQ2FyZCA9PiB7XG5cbiAgICAgIC8vIGRpc3BhcmEgZGF0YUxheWVyIGVtICdnYXRpbGhvcycgZGV0ZXJtaW5hZG9zIG5vIEhUTUxcbiAgICAgIGxldCB0cmlnZ2VycyA9IEFycmF5LmZyb20oYmFpcnJvQ2FyZC5xdWVyeVNlbGVjdG9yQWxsKCcuYmFpcnJvLWNhcmQtdHJpZ2dlcicpKTtcbiAgICAgIC8vIGFwZW5hcyBzZSBuw6NvIGhvdXZlciBnYXRpbGhvcyBlc3BlY2lmaWNhZG9zLCBkaXNwYXJhIG5vIGNhcmQgdG9kb1xuICAgICAgaWYgKHRyaWdnZXJzLmxlbmd0aCA9PT0gMCkgdHJpZ2dlcnMucHVzaChiYWlycm9DYXJkKVxuXG4gICAgICB0cmlnZ2Vycy5mb3JFYWNoKCB0ID0+IHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfID0+IHtcbiAgICAgICAgaWYgKGJhaXJyb0NhcmQuaGFzQXR0cmlidXRlKCdkYXRhLWV2ZW50by1kaXNwYXJhZG8nKSkgcmV0dXJuO1xuICAgICAgICBiYWlycm9DYXJkLnNldEF0dHJpYnV0ZSgnZGF0YS1ldmVudG8tZGlzcGFyYWRvJywgdHJ1ZSk7XG5cbiAgICAgICAgd2luZG93LmRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAnZXZlbnQnOiAnY2xpY2tfYmFpcnJvJyxcbiAgICAgICAgICAnYmFpcnJvJzoge1xuICAgICAgICAgICAgJ2JhaXJyb19ub21lJzogbm9ybWFsaXplVG9EYXRhTGF5ZXIoYmFpcnJvQ2FyZC5kYXRhc2V0Lm5vbWVCYWlycm8pLFxuICAgICAgICAgICAgJ2JhaXJyb19yZWdpYW8nOiBub3JtYWxpemVUb0RhdGFMYXllcihiYWlycm9DYXJkLmRhdGFzZXQubm9tZVJlZ2lhbyksXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSkpXG5cbiAgICB9KVxuICB9XG59XG5cbi8qKiBAYXJndW1lbnQge1BhcmFtZXRlcnM8U3BsaWRlWydyZW1vdmUnXT5bMF19IG1hdGNoZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVySXRlbUNhcnJvdXNlbChtYXRjaGVyKSB7XG4gIGlmICghZ2FsZXJpYVNwbGlkZSkgcmV0dXJuO1xuICBnYWxlcmlhU3BsaWRlLnJlbW92ZShtYXRjaGVyKVxufVxuXG5mdW5jdGlvbiBleGliaXJEZXNjcmlhb0NpZGFkZShpZENpZGFkZSkge1xuICBpZiAoIWlkQ2lkYWRlKSByZXR1cm47XG5cbiAgY29uc3QgZGVzY3JpY29BdHVhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZXNjcmljYW8tZGEtY2lkYWRlLmNpZGFkZS1hdHVhbCcpO1xuICBjb25zdCBkZXNjcmljb2VzU2VsZWNpb25hZGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuZGVzY3JpY2FvLWRhLWNpZGFkZVtkYXRhLWNpZGFkZT1cIiR7aWRDaWRhZGV9XCJdYCk7XG5cbiAgZGVzY3JpY29BdHVhbD8uY2x
1hc3NMaXN0Py5yZW1vdmUoJ2NpZGFkZS1hdHVhbCcpO1xuICBkZXNjcmljb2VzU2VsZWNpb25hZGE/LmNsYXNzTGlzdD8uYWRkKCdjaWRhZGUtYXR1YWwnKTtcblxufVxuXG5mdW5jdGlvbiBmZWNoYXJGaWx0cm8oKSB7XG4gIERyb3Bkb3duLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpO1xuICBEcm9wZG93bi5oZWFkZXIuZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gYWJyaXJGaWx0cm8oKSB7XG4gIERyb3Bkb3duLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTtcbiAgc2VsZWNpb25hUHJpbWVpcm9JdGVtKClcbn1cblxuZnVuY3Rpb24gc2VsZWNpb25hUHJpbWVpcm9JdGVtKCkge1xuICBsZXQgaXRlbSA9IERyb3Bkb3duLmxpc3RhLmZpcnN0RWxlbWVudENoaWxkO1xuICBpZiAoaXRlbT8uY2xhc3NMaXN0LmNvbnRhaW5zKFwiY2lkYWRlLWF0dWFsXCIpKSB7XG4gICAgaXRlbSA9IGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nXG4gIH1cblxuICBpdGVtLmZvY3VzKClcbn1cblxuLyoqXG4gKiBAYXJndW1lbnQge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKiAqL1xuZnVuY3Rpb24gdGVjbGFkb0FicmVGaWx0cm8oZXZlbnQpIHtcbiAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGFicmlyRmlsdHJvKCk7XG4gIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZmVjaGFyRmlsdHJvKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YUxheWVyU2VsZWNpb25hQ2lkYWRlKGNpZGFkZSkge1xuICB3aW5kb3cuZGF0YUxheWVyLnB1c2goe1xuICAgIGV2ZW50OiAnYmFpcnJvc19zZWxlY2lvbmFyX2NpZGFkZScsXG4gICAgY2lkYWRlOiBub3JtYWxpemVUb0RhdGFMYXllcihjaWRhZGUpLFxuICB9KVxufVxuXG4vKipcbiAqIEBhcmd1bWVudCB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcbiAqICovXG5mdW5jdGlvbiB0ZWNsYWRvTmF2ZWdhQ2lkYWRlcyhldmVudCkge1xuICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PSAnICcpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBmZWNoYXJGaWx0cm8oKTtcbiAgfVxuXG4gIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBsZXQgYW50ZSA9IGV2ZW50LnRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIGlmIChhbnRlPy5jbGFzc0xpc3QuY29udGFpbnMoXCJjaWRhZGUtYXR1YWxcIikpIGFudGUgPSBhbnRlLnByZXZpb3VzRWxlbWVudFNpYmxpbmdcblxuICAgIGlmIChhbnRlKSBhbnRlLmZvY3VzKClcbiAgICBlbHNlIGZlY2hhckZpbHRybygpXG5cbiAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGxldCBwcm94ID0gZXZlbnQudGFyZ2V0Lm5leHRFbGVtZW50U2libGluZztcbiAgICBpZiAocHJveD8uY2xhc3NMaXN0LmNvbnRhaW5zKFwiY2lkYWRlLWF0dWFsXCIpKSBwcm94ID0gcHJveC5uZXh0RWxlbWVudFNpYmxpbmdcblxuICAgIGlmIChwcm94KSBwcm94LmZvY3VzKCk7XG5cbiAgfVxufVxuXG4vKipcbiAqIEBhcmd1bWVudCB7SFRNTEVsZW1lbnR9IGl0ZW1BdGl2YWRvXG4gKiAqL1xuZnVuY3Rpb24gb2N1bHRhQ2lkYWRlQXR1YWwoaXRlbUF0aXZhZG8pIHtcbiAgZmVjaGFyRmlsdHJvKClcbiAgRHJvcGRvd24ucXVlcnlTZWxlY3RvcignLnRpdHVsby1kcm9wZG93bicpLmlubmVyVGV4dCA9IGl0ZW1BdGl2YWRvLnRleHRDb250ZW50LnRyaW0oKTtcblxuICBEcm9wZG93bi5xdWVyeVNlbGVjdG9yKCcuY2lkYWRlLWF0dWFsJykuY2xhc3NMaXN0LnJlbW92ZSgnY2lkYWRlLWF0dWFsJyk7XG4gIGl0ZW1BdGl2YWRvLmNsYXNzTGlzdC5hZGQoJ2NpZGFkZS1hdHVhbCcpO1xufVxuXG4vKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb250ZXVkbyBkbyBiYWlycm9cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKi9cbkRydXBhbC5iZWhhdmlvcnMuY29udGV1ZG9CYWlycm8gPSB7XG4gIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICBvbmNlKFwiY29udGV1ZG9CYWlycm9cIiwgJy5leHBsb3JlLWNvbnRlbnQnLCBjb250ZXh0KS5mb3JFYWNoKHNlY2FvQ29udGV1ZG8gPT4ge1xuXG4gICAgICAvLyBIQUNLOiBnYXJhbnRpciBxdWUgbsOjbyBoYWphIG92ZXJmbG93IGhpZGRlbiBwYXJhIHF1ZSBgcG9zaXRpb246IHN0aWNreWAgZnVuY2lvbmVcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaW5pdGlhbCc7XG5cbiAgICAgIC8vIHByZXBhcmFyIHRyb2NhIGRlIGh0bWwgcGFyYSBzcGxpZGVcbiAgICAgIGNvbnN0IHRyYWNrID0gc2VjYW9Db250ZXVkby5xdWVyeVNlbGVjdG9yKCcuc3BsaWRlX190cmFjaycpO1xuICAgICAgdHJhY2s/LnNjcm9sbFRvKHtsZWZ0OiAwfSk7XG4gICAgICB0cmFjaz8uY2xhc3NMaXN0LnJlbW92ZSgnb3ZlcmZsb3ctYXV0bycpO1xuICAgICAgc2VjYW9Db250ZXVkby5jbGFzc0xpc3QuYWRkKCdzcGxpZGUnKTtcblxuICAgICAgbGV0IGluaXRpYWxTbGlkZSA9IDA7XG4gICAgICBjb25zdCB0YWJzID0gc2VjYW9Db250ZXVkby5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5leHBsb3JlLXRhYnMnKTtcbiAgICAgIHRhYnMucXVlcnlTZWxlY3RvckFsbCgnYScpLmZvckVhY2goIChhLGspID0+IHtcbiAgICAgICAgaWYoYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA9PT0gbG9jYXRpb24uaGFzaCkgaW5pdGlhbFNsaWRlID0gaztcbiAgICAgICAgYS5ocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCknO1xuICAgICAgfSlcbiAgICAgIHRhYnMuY2xhc3NMaXN0LmFkZCgnc3BsaWRlJyk7XG5cbiAgICAgIC8vIGNvbnN0cnVpciBhbWJvcyBzbGlkZXM6IGFiYXMgZSBjb250ZXVkb1xuICAgICAgY29uc3Qgc2xpZGVzT3B0cyA9IHtcbiAgICAgICAgYXJyb3dzOiBmYWxzZSxcbiAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXG4gICAgICAgIGRyYWc6IGZhbHNlLFxuICAgICAgfVxuICAgICAgY29uc3Qgc2xpZGVBYmFzID0gbmV3IFNwbGlkZSh0YWJzLCB7IC4uLnNsaWRlc09wdHMsIGlzTmF2aWdhdGlvbjogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHNsaWRlQ29udGV1
1ZG8gPSBuZXcgU3BsaWRlKHNlY2FvQ29udGV1ZG8sIHNsaWRlc09wdHMpXG5cbiAgICAgIC8vIHNpbmNyb25pemFyIGFiYXMgZSBjb250ZXVkb3Mgc2xpZGVzXG4gICAgICBzbGlkZUNvbnRldWRvLnN5bmMoc2xpZGVBYmFzKTtcbiAgICAgIHNsaWRlQ29udGV1ZG8ubW91bnQoKTtcbiAgICAgIHNsaWRlQWJhcy5tb3VudCgpO1xuICAgICAgaWYgKGluaXRpYWxTbGlkZSkgc2xpZGVDb250ZXVkby5nbyhpbml0aWFsU2xpZGUpO1xuXG4gICAgICBjb25zdCBhbHR1cmFIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudS1kZXNrdG9wJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgc2xpZGVDb250ZXVkby5vbignbW92ZScsIF89PntcbiAgICAgICAgY29uc3QgcG9zQ29udGV1ZG8gPSBzbGlkZUNvbnRldWRvLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueSArIHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogcG9zQ29udGV1ZG8gLSBhbHR1cmFIZWFkZXIsIGJlaGF2aW9yOiAnc21vb3RoJ30pO1xuICAgICAgfSlcblxuICAgIH0pXG4gIH1cbn1cblxuXG4vKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBMaXN0YSBkZSBpbmZvIGRvIGJhaXJybywgYWJhaXhvIGRvIE1BUEFcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKi9cblxuY29uc3Qgc2NyZWVucyA9IHJlcXVpcmUoXCIuLi8uLi90YWlsd2luZC10aGVtZS9zY3JlZW5zXCIpXG5EcnVwYWwuYmVoYXZpb3JzLmxpc3RhZ2VtQmFpcnJvcyA9IHtcbiAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuXG4gICAgLy8gUmVzdWx0YWRvIGRhIHZpZXc6IGxpc3RhIGRlIGJhaXJyb3MgbmEgY2lkYWRlIGZpbHRyYWRhXG4gICAgb25jZShcImxpc3RhZ2VtQmFpcnJvc1wiLCAnLmluZm9zLWJhaXJybycsIGNvbnRleHQpLmZvckVhY2goaW5mb3NCYWlycm8gPT4ge1xuICAgICAgaW5mb3NCYWlycm8uY2xhc3NMaXN0LmFkZCgnc3BsaWRlJyk7XG4gICAgICBjb25zdCBzbGlkZXNDb3VudCA9IGluZm9zQmFpcnJvLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zcGxpZGVfX3NsaWRlJykubGVuZ3RoXG5cbiAgICAgIG5ldyBTcGxpZGUoaW5mb3NCYWlycm8sIHtcbiAgICAgICAgdHlwZTogJ3NsaWRlJyxcbiAgICAgICAgbWVkaWFRdWVyeTogJ21pbicsXG4gICAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgICAgYXJyb3dzOiBmYWxzZSxcblxuICAgICAgICBwZXJQYWdlOiAxLFxuICAgICAgICBwZXJNb3ZlOiAxLFxuICAgICAgICBwYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgICBwYWRkaW5nOiAnMS41cmVtJyxcblxuICAgICAgICBicmVha3BvaW50czoge1xuICAgICAgICAgIFtwYXJzZUludChzY3JlZW5zLnhzKV06IHtcbiAgICAgICAgICAgIHBlclBhZ2U6IHNsaWRlc0NvdW50ID4gMiA/IDIgOiAxLFxuICAgICAgICAgICAgcGFkZGluZzogJzJyZW0nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW3BhcnNlSW50KHNjcmVlbnMubXMpXToge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLm1vdW50KCk7XG4gICAgfSlcbiAgfVxufVxuXG5cbi8qXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIE1BUEEgZGEgcGFnaW5hIGRlIGNvbnRldWRvIGRvIGJhaXJybyAoUERCKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4qL1xud2luZG93LmluaXRNYXAgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1hcGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbWFwYS1iYWlycm8nKTtcbiAgaWYgKCFtYXBhKSByZXR1cm47XG5cbiAgcmVuZGVyaXphck1hcGFCYWlycm8obWFwYSk7XG59XG5cbmNvbnN0IGljb25lc1Byb3BzRW1wID0ge1xuICBcIm3CslwiOiBcIm1ldHJhZ2VtLWRhcmsuc3ZnXCIsXG4gIFwic3XDrXRlc1wiOiBcInN1aXRlX2Rhcmsuc3ZnXCIsXG4gIFwiZG9ybS5cIjogXCJiZWRyb29tc19kYXJrLnN2Z1wiLFxuICBcInZhZ2FzXCI6IFwidmFnYXMtZGFyay5zdmdcIixcbn1cblxuZnVuY3Rpb24gcmVuZGVyaXphck1hcGFCYWlycm8obWFwYSkge1xuICBjb25zdCBnZW9Mb2NEYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNnZW9sb2MtZW1wcmVlbmRpbWVudG9zXCIpXG4gIGNvbnN0IGxvY2F0aW9ucyA9IEpTT04ucGFyc2UoZ2VvTG9jRGF0YS50ZXh0Q29udGVudCk7XG5cbiAgaWYgKCFsb2NhdGlvbnMpIHJldHVybjtcblxuICBjb25zdCBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XG4gIGNvbnN0IG1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAobWFwYSwge1xuXG4gICAgLy8gY2FtZXJhIGluaWNpYWwgZW0gdW0gZG9zIGVtcHJlZW5kaW1lbn
1Rvc1xuICAgIGNlbnRlcjogbG9jYXRpb25zWzBdLFxuICAgIHpvb206IDE1LFxuXG4gICAgLy8gcmVkdXppciBpdGVtcyBkYSBVSVxuICAgIHN0cmVldFZpZXdDb250cm9sOiBmYWxzZSxcbiAgICBtYXBUeXBlQ29udHJvbDogZmFsc2UsXG4gICAgcGFuQ29udHJvbDogZmFsc2UsXG4gICAgc2NhbGVDb250cm9sOiBmYWxzZSxcbiAgICBjYW1lcmFDb250cm9sOiBmYWxzZSxcbiAgICBwYW5Db250cm9sOiBmYWxzZSxcbiAgICB6b29tQ29udHJvbDogdHJ1ZSxcblxuICAgIC8vIGNvcmVzIG1lbm9zIHZpYnJhbnRlcyBwYXJhIGl0ZW1zIGRvIG1hcGFcbiAgICBzdHlsZXM6IFtcbiAgICAgIHtcbiAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcImFsbFwiLFxuICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwibGFiZWxzLnRleHRcIixcbiAgICAgICAgXCJzdHlsZXJzXCI6IFt7IFwiY29sb3JcIjogXCIjODc4Nzg3XCIgfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJhbGxcIixcbiAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVscy50ZXh0LnN0cm9rZVwiLFxuICAgICAgICBcInN0eWxlcnNcIjogW3sgXCJ2aXNpYmlsaXR5XCI6IFwib2ZmXCIgfV1cbiAgICAgIH0sXG4gICAgXVxuICB9KTtcblxuICAvLyBDYXJkIGRlIGVtcHJlZW5kaW1lbnRvXG4gIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgY29udGVudDogJycsXG4gICAgbWF4V2lkdGg6IDI1MCxcbiAgfSk7XG5cblxuICAvLyBDcmlhciBvcyBwaW5zIGRvIGVtcHJlZW5kaW1lbn
1Rvc1xuICBjb25zdCBzaW1wbGVQaW4gPSB7XG4gICAgdXJsOiBcIi90aGVtZXMvY3lyZWxhL2ltZy9pY29ucy9waW4tY3lyZWxhLnN2Z1wiLFxuICAgIHNjYWxlZFNpemU6IG5ldyBnb29nbGUubWFwcy5TaXplKDQyLCA1MSksXG4gIH1cblxuICBsb2NhdGlvbnMuZm9yRWFjaChsb2NhdGlvbiA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICBwb3NpdGlvbjogbG9jYXRpb24sXG4gICAgICBtYXA6IG1hcCxcbiAgICAgIHRpdGxlOiBsb2NhdGlvbi5uYW1lLFxuICAgICAgaWNvbjogc2ltcGxlUGluLFxuICAgIH0pO1xuXG4gICAgYm91bmRzLmV4dGVuZChtYXJrZXIucG9zaXRpb24pO1xuXG4gICAgLy8gQWJyaXIgY2FyZCBkbyBlbXByZWVuZGltZW50byBhbyBjbGljYXIgbm8gcGluXG4gICAgbWFya2VyLmFkZExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblxuICAgICAgY29uc3QgY29udGVudCA9IGh0bWxgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsyMTdweF0gb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCIke2xvY2F0aW9uLmltYWdlLnNyY31cIiBhbHQ9XCIke2xvY2F0aW9uLmltYWdlLmFsdH1cIiBjbGFzcz1cInctZnVsbCBoLVsxODBweF0gb2JqZWN0LWNvdmVyXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LTE2cCBmb250LWJvbGRcIj4ke2xvY2F0aW9uLm5hbWV9PC9oMz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cbiAgICAgICAgICAgICR7T2JqZWN0LmVud
1HJpZXMobG9jYXRpb24ucHJvcHMpLm1hcCgoW2ssIGRlc2NdKSA9PiBodG1sYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi90aGVtZXMvY3lyZWxhL2ltZy9pY29ucy8ke2ljb25lc1Byb3BzRW1wW2tdfVwiIGNsYXNzPVwidy01IG1yLTIgaC02XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+JHtkZXNjfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgKS5qb2luKCcnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YSBocmVmPVwiJHtsb2NhdGlvbi51cmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgaWQ9XCJjdGEtYnV0dG9uXCIgY2xhc3M9XCJ3LWZ1bGwgcHktMyB0ZXh0LWNlbnRlciBiZy1uZXV0cmFsLWNvbG9yLWRhcmstcHVyZSB0ZXh0LW5ldXRyYWwtY29sb3ItbGlnaHQtcHVyZVwiPlxuICAgICAgICAgICAgICBDT05IRUNFUiBJTcOTVkVMXG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcblxuICAgICAgaW5mb1dpbmRvdy5zZXRDb250ZW50KGNvbnRlbnQpO1xuICAgICAgaW5mb1dpbmRvdy5vcGVuKG1hcCwgbWFya2VyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gcmVwb3NpY2lvbmFyIGNhbWVyYSBwYXJhIHZlciB0b2RvcyBvcyBwaW5zXG4gIGNvbnN0IG1hcmdpbiA9IDEwMDtcbiAgbWFwLmZpdEJvdW5kcyhib3VuZHMsIHsgdG9wOiBtYXJnaW4sIGxlZnQ6IG1hcmdpbiwgcmlnaHQ6IG1hcmdpbiwgYm90dG9tOiBtYXJnaW4gfSk7XG5cbiAgY29udG9ybmFyQmFpcnJvTm9NYXBhKG1hcCwgbWFwYSlcbn1cblxuZnVuY3Rpb24gY29udG9ybmFyQmFpcnJvTm9NYXBhKG1hcCwgbWFwRWxlbWVudCkge1xuICBjb25zdCB7IGJhaXJybywgY2lkYWRlLCBlc3RhZG8gfSA9IG1hcEVsZW1lbnQuZGF0YXNldDtcbiAgY29uc3QgYnVzY2FSZWdpYW8gPSBbYmFpcnJvLCBjaWRhZGUsIGVzdGFkbywgXCJCcmFzaWxcIl0uam9pbignLCAnKVxuXG5cbiAgZmV0Y2goXCJodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9zZWFyY2g/XCIgKyBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICBxOiBidXNjYVJlZ2lhbyxcbiAgICBmb3JtYXQ6ICdqc29uJyxcbiAgICBwb2x5Z29uX2dlb2pzb246IDEsXG4gICAgcG9seWdvbl90aHJlc2hvbGQ6IDAuMDAwMSxcbiAgICBsaW1pdDogMSxcbiAgfSkpXG4gICAgLnRoZW4ocGF5bG9hZCA9PiBwYXlsb2FkLmpzb24oKSlcbiAgICAudGhlbigoW3Jlc3BvbnNlXSkgPT4ge1xuICAgICAgY29uc3QgZnJvbnRlaXJhQmFpcnJvID0gcmVzcG9uc2UuZ2VvanNvbi5jb29yZGluYXRlc1swXS5tYXAoXG4gICAgICAgIGMgPT4gKHsgbGF0OiBjWzFdLCBsbmc6IGNbMF0gfSlcbiAgICAgICk7XG5cbiAgICAgIG5ldyBnb29nbGUubWFwcy5Qb2x5bGluZSh7XG4gICAgICAgIG1hcCxcbiAgICAgICAgcGF0aDogZnJvbnRlaXJhQmFpcnJvLFxuICAgICAgICBjbGlja2FibGU6IGZhbHNlLFxuICAgICAgICBzdHJva2VPcGFjaXR5OiAwLFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZTExZjFkXCIsXG4gICAgICAgIGljb25zOiBbe1xuICAgICAgICAgIGljb246IHsgcGF0aDogJ00gMCwwIDAsNCcsIHN0cm9rZU9wYWNpdHk6IC41LCBzY2FsZTogMiB9LFxuICAgICAgICAgIG9mZnNldDogXCIwXCIsXG4gICAgICAgICAgcmVwZWF0OiBcIjE2cHhcIixcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNYXAgcmVnaW9uIG91dGxpbmluZyBlcnJvcjonLCBlcnJvcik7XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3513\n\n}')},4551:module=>{eval('{module.exports = {\n  xm: "320px",\n  xs: "480px",\n  ss: "769px",\n  ms: "976px",\n  lg: "1024px",\n  ml: "1280px",\n  ll: "1366px",\n  xl: "1600px",\n  xxl: "1920px",\n  xxlx: "1921px",\n  xxx: "2560px"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwieG0iLCJ4cyIsInNzIiwibXMiLCJsZyIsIm1sIiwibGwiLCJ4bCIsInh4bCIsInh4bHgiLCJ4eHgiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vdGFpbHdpbmQtdGhlbWUvc2NyZWVucy5qcz82YzhkIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1xuICB4bTogXCIzMjBweFwiLFxuICB4czogXCI0ODBweFwiLFxuICBzczogXCI3NjlweFwiLFxuICBtczogXCI5NzZweFwiLFxuICBsZzogXCIxMDI0cHhcIixcbiAgbWw6IFwiMTI4MHB4XCIsXG4gIGxsOiBcIjEzNjZweFwiLFxuICB4bDogXCIxNjAwcHhcIixcbiAgeHhsOiBcIjE5MjBweFwiLFxuICB4eGx4OiBcIjE5MjFweFwiLFxuICB4eHg6IFwiMjU2MHB4XCIsXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmQyxFQUFFLEVBQUUsT0FBTztFQUNYQyxFQUFFLEVBQUUsT0FBTztFQUNYQyxFQUFFLEVBQUUsT0FBTztFQUNYQyxFQUFFLEVBQUUsT0FBTztFQUNYQyxFQUFFLEVBQUUsUUFBUTtFQUNaQyxFQUFFLEVBQUUsUUFBUTtFQUNaQyxFQUFFLEVBQUUsUUFBUTtFQUNaQyxFQUFFLEVBQUUsUUFBUTtFQUNaQyxHQUFHLEVBQUUsUUFBUTtFQUNiQyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxHQUFHLEVBQUU7QUFDUCxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiI0NTUxLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4551\n\n}')},6167:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('{/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SP: () => (/* binding */ normalizeToDataLayer),\n/* harmony export */   V8: () => (/* binding */ WEEK),\n/* harmony export */   qy: () => (/* binding */ html),\n/* harmony export */   ty: () => (/* binding */ nativeShare)\n/* harmony export */ });\n/* unused harmony exports MILLISECOND, SECOND, MINUTE, HOUR, DAY, MONTH, getFileNameFromUrl */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf;
vendor: 6,302 bytes, line 1
1 var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar MILLISECOND = 1;\nvar SECOND = MILLISECOND * 1000;\nvar MINUTE = SECOND * 60;\nvar HOUR = MINUTE * 60;\nvar DAY = HOUR * 24;\nvar WEEK = DAY * 7;\n/** rounded do 30 */\nvar MONTH = DAY * 30;\nfunction getFileNameFromUrl(url) {\n  // Split the URL by \'/\' to get the individual path segments\n  var pathSegments = url.split(\'/\');\n\n  // Get the last path segment, which should be the image name\n  var imageNameWithExtension = pathSegments[pathSegments.length - 1];\n\n  // If there\'s no image name (e.g., the URL ends with a \'/\'), return an empty string\n  if (!imageNameWithExtension) {\n    return \'\';\n  }\n\n  // Remove any query parameters or hash fragments from the image name\n  var imageName = imageNameWithExtension.split(\'?\')[0].split(\'#\')[0];\n  return imageName;\n}\n\n/**\n * Compartilha **imagem** com o Sistema Operacional, via a API [navigator.share](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share)\n * Essa funcionalidade só pode ser executada em ambinete seguro.\n *\n * @argument {string} shareimg - URL da imagem que será compartilhada\n * A imagem até pode ser externa, mas o site precisa ter acesso a ela (aka: CORS).\n * @argument {string} [sharelink] - Link que será compartilhado\n * @argument {string} [sharetitle] - Titulo da imagem\n *\n * @throws Se algo no fluxo de compartilhamento falhar, lança uma exceção. Mas não o faz se o próprio usuario cancelar a ação.\n * Exemplos comuns para falha:\n * - Dispositivo não ter suporte à API de compartilhamento.\n * - Imagem não estar disponível no contexto do site.\n *\n * @returns boolean - `true` se imagem foi compartilhada com sucesso, `false` caso compartilhamento seja cancelado\n *\n * BUG: https://stackoverflow.com/questions/76076190/sharing-an-image-using-the-webshare-api-in-ios-is-failing\n * */\nfunction nativeShare(_x) {\n  return _nativeShare.apply(this, arguments);\n}\nfunction _nativeShare() {\n  _nativeShare = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(shareimg) {\n    var sharelink,\n      sharetitle,\n      response,\n      blob,\n      file,\n      _args = arguments,\n      _t;\n    return _regenerator().w(function (_context) {\n      while (1) switch (_context.p = _context.n) {\n        case 0:\n          sharelink = _args.length > 1 && _args[1] !== undefined ? _args[1] : \'\';\n          sharetitle = _args.length > 2 && _args[2] !== undefined ? _args[2] : \'\';\n          _context.p = 1;\n          if (\'share\' in navigator) {\n            _context.n = 2;\n            break;\n          }\n          throw TypeError("navigator.share is not supported");\n        case 2:\n          _context.n = 3;\n          return fetch(shareimg);\n        case 3:\n          response = _context.v;\n          _context.n = 4;\n          return response.blob();\n        case 4:\n          blob = _context.v;\n          file = new File([blob], getFileNameFromUrl(shareimg), {\n            type: blob.type\n          });\n          _context.n = 5;\n          return navigator.share({\n            url: sharelink,\n            title: sharetitle,\n            files: [file]\n          });\n        case 5:\n          _context.n = 8;\n          break;\n        case 6:\n          _context.p = 6;\n          _t = _context.v;\n          if (!String(_t).startsWith("AbortError")) {\n            _context.n = 7;\n            break;\n          }\n          return _context.a(2, false);\n        case 7:\n          throw _t;\n        case 8:\n          return _context.a(2, true);\n      }\n    }, _callee, null, [[1, 6]]);\n  }));\n  return _nativeShare.apply(this, arguments);\n}\n;\nfunction normalizeToDataLayer(txt) {\n  return txt.trim().normalize(\'NFD\').replace(/[\\u0300-\\u036f]/g, "").toLowerCase().replace(/\\s+/g, \'_\');\n}\n\n/**\n * Tagged template literal para HTML dentro de string\n *\n * Não executa nenhuma funcionalidade extra à template literal comum,\n * mas com isso, IDEs mostram syntax highlight e recomendações LSP dentro da string\n */\nvar html = String.raw;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjE2Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0F
1BRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBeUJBO0FBQUE7QUF6QkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUtBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2pzL3V0aWxzLmpzPzRmZGQiXSwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgY29uc3QgTUlMTElTRUNPTkQgPSAxO1xuZXhwb3J0IGNvbnN0IFNFQ09ORCA9IE1JTExJU0VDT05EICogMTAwMDtcbmV4cG9ydCBjb25zdCBNSU5VVEUgPSBTRUNPTkQgKiA2MDtcbmV4cG9ydCBjb25zdCBIT1VSID0gTUlOVVRFICogNjA7XG5leHBvcnQgY29uc3QgREFZID0gSE9VUiAqIDI0O1xuZXhwb3J0IGNvbnN0IFdFRUsgPSBEQVkgKiA3O1xuLyoqIHJvdW5kZWQgZG8gMzAgKi9cbmV4cG9ydCBjb25zdCBNT05USCA9IERBWSAqIDMwO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlTmFtZUZyb21VcmwodXJsKSB7XG4gIC8vIFNwbGl0IHRoZSBVUkwgYnkgJy8nIHRvIGdldCB0aGUgaW5kaXZpZHVhbCBwYXRoIHNlZ21lbnRzXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHVybC5zcGxpdCgnLycpO1xuXG4gIC8vIEdldCB0aGUgbGFzdCBwYXRoIHNlZ21lbnQsIHdoaWNoIHNob3VsZCBiZSB0aGUgaW1hZ2UgbmFtZVxuICBjb25zdCBpbWFnZU5hbWVXaXRoRXh0ZW5zaW9uID0gcGF0aFNlZ21lbnRzW3BhdGhTZWdtZW50cy5sZW5ndGggLSAxXTtcblxuICAvLyBJZiB0aGVyZSdzIG5vIGltYWdlIG5hbWUgKGUuZy4sIHRoZSBVUkwgZW5kcyB3aXRoIGEgJy8nKSwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZ1xuICBpZiAoIWltYWdlTmFtZVdpdGhFeHRlbnNpb24pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBSZW1vdmUgYW55IHF1ZXJ5IHBhcmFtZXRlcnMgb3IgaGFzaCBmcmFnbWVudHMgZnJvbSB0aGUgaW1hZ2UgbmFtZVxuICBjb25zdCBpbWFnZU5hbWUgPSBpbWFnZU5hbWVXaXRoRXh0ZW5zaW9uLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXTtcblxuICByZXR1cm4gaW1hZ2VOYW1lO1xufVxuXG5cbi8qKlxuICogQ29tcGFydGlsaGEgKippbWFnZW0qKiBjb20gbyBTaXN0ZW1hIE9wZXJhY2lvbmFsLCB2aWEgYSBBUEkgW25hdmlnYXRvci5zaGFyZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9zaGFyZSlcbiAqIEVzc2EgZnVuY2lvbmFsaWRhZGUgc8OzIHBvZGUgc2VyIGV4ZWN1dGFkYSBlbSBhbWJpbmV0ZSBzZWd1cm8uXG4gKlxuICogQGFyZ3VtZW50IHtzdHJpbmd9IHNoYXJlaW1nIC0gVVJMIGRhIGltYWdlbSBxdWUgc2Vyw6EgY29tcGFydGlsaGFkYVxuICogQSBpbWFnZW0gYXTDqSBwb2RlIHNlciBleHRlcm5hLCBtYXMgbyBzaXRlIHByZWNpc2EgdGVyIGFjZXNzbyBhIGVsYSAoYWthOiBDT1JTKS5cbiAqIEBhcmd1bWVudCB7c3RyaW5nfSBbc2hhcmVsaW5rXSAtIExpbmsgcXVlIHNlcsOhIGNvbXBhcnRpbGhhZG9cbiAqIEBhcmd1bWVudCB7c3RyaW5nfSBbc2hhcmV0aXRsZV0gLSBUaXR1bG8gZGEgaW1hZ2VtXG4gKlxuICogQHRocm93cyBTZSBhbGdvIG5vIGZsdXhvIGRlIGNvbXBhcnRpbGhhbWVudG8gZmFsaGFyLCBsYW7Dp2EgdW1hIGV4Y2XDp8Ojby4gTWFzIG7Do28gbyBmYXogc2UgbyBwcsOzcHJpbyB1c3VhcmlvIGNhbmNlbGFyIGEgYcOnw6NvLlxuICogRXhlbXBsb3MgY29tdW5zIHBhcmEgZmFsaGE6XG4gKiAtIERpc3Bvc2l0aXZvIG7Do28gdGVyIHN1cG9ydGUgw6AgQVBJIGRlIGNvbXBhcnRpbGhhbWVudG8uXG4gKiAtIEltYWdlbSBuw6NvIGVzdGFyIGRpc3BvbsOtdmVsIG5vIGNvbnRleHRvIGRvIHNpdGUuXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiAtIGB0cnVlYCBzZSBpbWFnZW0gZm9pIGNvbXBhcnRpbGhhZGEgY29tIHN1Y2Vzc28sIGBmYWxzZWAgY2FzbyBjb21wYXJ0aWxoYW1lbnRvIHNlamEgY2FuY2VsYWRvXG4gKlxuICogQlVHOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NjA3NjE5MC9zaGFyaW5nLWFuLWltYWdlLXVzaW5nLXRoZS13ZWJzaGFyZS1hcGktaW4taW9zLWlzLWZhaWxpbmdcbiAqICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmF0aXZlU2hhcmUoc2hhcmVpbWcsIHNoYXJlbGluayA9ICcnLCBzaGFyZXRpdGxlID0gJycpIHtcblxuICB0cnkge1xuICAgIGlmICghKCdzaGFyZScgaW4gbmF2aWdhdG9yKSkgdGhyb3cgVHlwZUVycm9yKFwibmF2aWdhdG9yLnNoYXJlIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG5cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc2hhcmVpbWcpO1xuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZ2V0RmlsZU5hbWVGcm9tVXJsKHNoYXJlaW1nKSwgeyB0eXBlOiBibG9iLnR5cGUgfSk7XG5cbiAgICBhd2FpdCBuYXZpZ2F0b3Iuc2hhcmUoe1xuICAgICAgdXJsOiBzaGFyZWxpbmssXG4gICAgICB0aXRsZTogc2hhcmV0aXRsZSxcbiAgICAgIGZpbGVzOiBbZmlsZV0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFNlIHVzdcOhcmlvIGNhbmNlbGFyIGNvbXBhcnRpbGhhbWVudG8sIG7Do28gaW50ZXJmaXJpclxuICAgIGlmIChTdHJpbmcoZXJyKS5zdGFydHNXaXRoKFwiQWJvcnRFcnJvclwiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgI
1HRocm93IGVycjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVG9EYXRhTGF5ZXIodHh0KSB7XG4gIHJldHVybiB0eHQudHJpbSgpXG4gICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csICdfJylcbn1cblxuLyoqXG4gKiBUYWdnZWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJhIEhUTUwgZGVudHJvIGRlIHN0cmluZ1xuICpcbiAqIE7Do28gZXhlY3V0YSBuZW5odW1hIGZ1bmNpb25hbGlkYWRlIGV4dHJhIMOgIHRlbXBsYXRlIGxpdGVyYWwgY29tdW0sXG4gKiBtYXMgY29tIGlzc28sIElERXMgbW9zdHJhbSBzeW50YXggaGlnaGxpZ2h0IGUgcmVjb21lbmRhw6fDtWVzIExTUCBkZW50cm8gZGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBodG1sID0gU3RyaW5nLnJhdztcblxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6167\n\n}')}},n=>{n.O(0,[1332],()=>{return e=2679,n(n.s=e);var e});n.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.