{"version":3,"sources":["wwwroot/js/sessions/node_modules/browser-pack/_prelude.js","wwwroot/js/sessions/Scripts/pages/sessions/sessionHeader.js","wwwroot/js/sessions/Scripts/src/api.js","wwwroot/js/sessions/Scripts/src/common.js","wwwroot/js/sessions/Scripts/src/debounce.js","wwwroot/js/sessions/Scripts/src/emails.js","wwwroot/js/sessions/Scripts/src/errors.js","wwwroot/js/sessions/Scripts/src/freeze-ui.js","wwwroot/js/sessions/Scripts/src/guid.js","wwwroot/js/sessions/Scripts/src/handlebarsHelpers.js","wwwroot/js/sessions/Scripts/src/localStorage.js","wwwroot/js/sessions/Scripts/src/modals.js","wwwroot/js/sessions/Scripts/src/notifications.js","wwwroot/js/sessions/Scripts/src/tabs.js","wwwroot/js/sessions/Scripts/src/tagify.js","wwwroot/js/sessions/Scripts/src/tooltips.js","wwwroot/js/sessions/Scripts/src/validation.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/asyncToGenerator.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/classCallCheck.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/createClass.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/defineProperty.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/interopRequireDefault.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/iterableToArray.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/nonIterableSpread.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/toConsumableArray.js","wwwroot/js/sessions/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","wwwroot/js/sessions/node_modules/@babel/runtime/regenerator/index.js","wwwroot/js/sessions/node_modules/regenerator-runtime/runtime.js"],"names":[],"mappings":"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;MACrC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,SAAS,GAAG,SAAS;IACrE;EAAC;IAAA,GAAA;IAAA,KAAA,EAED,SAAO,aAAa,CAAA,EAAG;MACnB,IAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC;MAC7D,IAAI,CAAC,cAAc,EACf;MAEJ,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;IACzC;EAAC;AAAA;;;ACjFL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"sessionHeader.min.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 {\n\n new Tabs(document.querySelector(\"[data-collapse-menu]\"));\n\n const sessionHeader = document.querySelector(\"#session_header\");\n sessionId = sessionHeader?.dataset.sessionId;\n sessionDate = sessionHeader?.dataset.sessionDate;\n\n initTemplates();\n\n await updateBookingsUI();\n\n document.addEventListener(\"bookingupdated\", async () => {\n await updateBookingsUI();\n });\n\n //#region Add Coach Events\n\n document.querySelectorAll(\"[data-add-coach]\").forEach(el => {\n el.addEventListener(\"click\", async e => {\n e.preventDefault();\n\n await showAddCoachForm(el);\n });\n });\n\n //#endregion Add Coach Events\n\n //#region Add Booking Events\n\n document.querySelectorAll(\"[data-add-booking]\").forEach(el => {\n el.addEventListener(\"click\", async e => {\n e.preventDefault();\n\n await showAddBookingForm(el);\n });\n });\n\n //#endregion Add Bookings Events\n\n //#region Send Emails Events\n\n document.querySelector(\"[data-email-participants]\")?.addEventListener(\"click\", async e => {\n e.preventDefault();\n\n FreezeUI.Freeze();\n const subject = e.currentTarget.dataset.subject;\n\n const {data} = await authApi.get(`/api/bookings?sessionId=${sessionId}&SessionDate=${sessionDate}&BookingStatus=coach&BookingStatus=confirmed&Limit=100&include=memberId,name`);\n const recipients = data.items.map(item => {\n return item.memberId;\n });\n\n await composeEmail([{\n value: recipients.join('|'),\n text: `${recipients.length} Members`\n }], subject);\n\n FreezeUI.UnFreeze();\n });\n\n //#endregion Send Emails Events\n\n //#region Book Button Events\n\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"[data-action='Book'][data-booking-type='Coach']\")\n if (!target)\n return;\n\n await handleCoachBooking(e, target);\n });\n\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"[data-action='Book'][data-booking-type='Participant']\")\n if (!target)\n return;\n\n await handleParticipantBooking(e, target);\n });\n\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"[data-action='Cancel']\")\n if (!target)\n return;\n\n await handleCancelBooking(e, target);\n });\n\n //#endregion Book Events\n\n});\n\n//#region Modals\n\nconst showAddCoachForm = async (el) => {\n const modalUrl = el.href;\n\n const {data} = await api.get(modalUrl);\n const modal = setModalContent(data);\n\n const tagify = memberSearchTagify(\"#Members\", false);\n\n const form = modal._element.querySelector(\"form\");\n const saveButton = modal._element.querySelector(\"[data-save=\\\"modal\\\"]\")\n\n saveButton.addEventListener(\"click\", async e => {\n e.preventDefault();\n\n Validation.disableButton(saveButton);\n const members = tagify.value.map(e => {\n return e.value\n });\n\n if (members.length <= 0) {\n Notifications.showWarning({ message: \"Please select at least one member to add.\" });\n return;\n }\n\n try {\n await api.post(form.action, {\n members\n });\n\n document.dispatchEvent(bookingUpdatedEvent);\n Notifications.showSuccess({ message: \"The coaches have been added.\" });\n modal.hide();\n\n await updateBookingsUI();\n } catch (ex) {\n trackException(ex);\n Validation.enableButton(saveButton);\n Notifications.showError({ message: \"There was an error adding the coach.\" });\n }\n });\n}\n\nconst showAddBookingForm = async (el) => {\n const modalUrl = el.href;\n\n const {data} = await api.get(modalUrl);\n const modal = setModalContent(data);\n\n const tagify = memberSearchTagify(\"#Members\", false);\n\n const form = modal._element.querySelector(\"form\");\n const saveButton = modal._element.querySelector(\"[data-save=\\\"modal\\\"]\")\n\n saveButton.addEventListener(\"click\", async e => {\n e.preventDefault();\n\n Validation.disableButton(saveButton);\n const members = tagify.value.map(e => {\n return e.value\n });\n\n if (members.length <= 0) {\n Notifications.showWarning({ message: \"Please select at least one member to add.\" });\n return;\n }\n\n const sendEmails = form.querySelector(\"#SendEmails\").checked;\n\n await api.post(form.action, { members, sendEmails})\n .then(async () => {\n Validation.enableButton(saveButton);\n document.dispatchEvent(bookingUpdatedEvent);\n\n await updateBookingsUI();\n\n Notifications.showSuccess({ message: \"The member has been added to the session.\" });\n modal.hide();\n })\n .catch(ex => {\n console.error(ex);\n trackException(ex);\n Notifications.showError({ message: \"There was an error creating the booking.\" });\n Validation.enableButton(saveButton);\n });\n });\n}\n\n//#endregion Modals\n\n//#region Booking UI Updates\n\n const updateBookingsUI = async () => {\n\n await authApi.get(`/api/sessions/bookings/${sessionId}/${sessionDate}`)\n .then(response => {\n updateCounts(\"[data-bookings-badge]\", response.data.confirmedCount);\n updateCounts(\"[data-waiting-badge]\", response.data.waitingListCount);\n updateCounts(\"[data-coaches-badge]\", response.data.coachCount);\n\n updateConfirmedTable(response.data.bookings);\n updateWaitingListTable(response.data.bookings);\n updateCancelledTable(response.data.bookings);\n updateCoachesTable(response.data.bookings);\n\n initTooltips(document.querySelector(\"#bookings_container\"));\n refreshFsLightbox();\n })\n .catch(ex => {\n console.error(ex);\n });\n }\n\n const updateConfirmedTable = (bookings) => {\n\n if(!bookings)\n return;\n\n const container = document.querySelector(\"#tab_bookings .content\");\n const confirmedBookings = bookings.filter((el) => {\n return el.bookingStatus === \"Confirmed\";\n });\n\n if (confirmedBookings.length > 0) {\n const listTemplate = Handlebars.compile(bookingsTableTemplate);\n container ? container.innerHTML = listTemplate(confirmedBookings) : null;\n } else {\n container ? container.innerHTML = noResultsTemplate(\"There are no bookings for this session.\") : null;\n }\n }\n\n const updateWaitingListTable = (bookings) => {\n if (!bookings)\n return;\n\n const container = document.querySelector(\"#tab_bookings .content\");\n const waiting = bookings.filter((el) => {\n return el.bookingStatus === \"WaitingList\";\n });\n\n if (waiting.length > 0) {\n const listTemplate = Handlebars.compile(bookingsTableTemplate);\n const headerTemplate = Handlebars.compile(waitingListTemplate);\n\n container ? container.innerHTML += headerTemplate() : null;\n container ? container.innerHTML += listTemplate(waiting) : null;\n }\n }\n\n const updateCancelledTable = (bookings) => {\n if (!bookings)\n return;\n\n const cancelled = bookings.filter((el) => {\n return el.bookingStatus === \"Cancelled\";\n });\n\n if (cancelled.length > 0) {\n const listTemplate = Handlebars.compile(cancelledTableTemplate);\n const headerTemplate = Handlebars.compile(cancelledTemplate);\n\n const sortedBookings = cancelled.sort(function (a, b) {\n if (a.dateCancelled < b.dateCancelled) {\n return -1;\n }\n if (a.dateCancelled > b.dateCancelled) {\n return 1;\n }\n\n return 0;\n });\n\n const container = document.querySelector(\"#tab_bookings .content\");\n container ? container.innerHTML += headerTemplate() : null;\n container ? container.innerHTML += listTemplate(cancelled) : null;\n }\n }\n\n const updateCoachesTable = (bookings) => {\n if (!bookings)\n return;\n\n const container = document.querySelector(\"#tab_coaches .content\");\n const coaches = bookings.filter((el) => {\n return el.bookingStatus === \"Coach\";\n });\n\n if (coaches.length > 0) {\n const listTemplate = Handlebars.compile(coachTableTemplate);\n container ? container.innerHTML = listTemplate(coaches) : null;\n } else {\n container ? container.innerHTML = noResultsTemplate(\"There are no coaches for this session.\") : null;\n }\n }\n\n const updateCounts = (selector, count) => {\n document.querySelectorAll(selector).forEach(el => {\n el.innerHTML = count;\n });\n }\n//#endregion Booking Updates\n\n//#region Book Button Handlers\n\nconst handleCoachBooking = async (e, el) => {\n\n try {\n FreezeUI.Freeze();\n\n await authApi.post(\"/api/bookings\", { sessionId, sessionDate, BookingType: \"Coach\"});\n\n await updateBookingsUI();\n Notifications.setNotificationCookie(\"Your booking has been confirmed.\")\n\n location.reload();\n\n } catch (ex) {\n trackException(ex);\n console.error(ex);\n FreezeUI.UnFreeze();\n Notifications.showError({ message: \"There was an error making your booking. Please try again later.\" });\n }\n};\n\nconst handleParticipantBooking = async (e, el) => {\n\n e.preventDefault();\n const modalUrl = el.href;\n\n FreezeUI.Freeze();\n\n const {data} = await api.get(modalUrl);\n const modal = setModalContent(data);\n\n FreezeUI.UnFreeze();\n\n const form = modal._element.querySelector(\"#book_form\");\n const validator = Validation.getDefaultValidator(form);\n\n form.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n\n validator.validate().then(async status => {\n if (status === 'Valid') {\n Validation.disableButton(e.submitter);\n\n let fields = {};\n form.querySelectorAll(\"[id^=field_]\").forEach(input => {\n fields[input.id.replace('field_', '')] = input.value;\n });\n\n const paymentMethodEl = document.querySelector(\"input[name=\\\"PaymentMethods\\\"]:checked\");\n\n const paymentMethod = paymentMethodEl?.value ?? null;\n const passInstanceId = paymentMethod === \"Pass\" ? paymentMethodEl.dataset.passInstanceId : null;\n\n await authApi.post(\"/api/bookings\", {\n sessionId,\n sessionDate,\n fields,\n paymentMethod,\n passInstanceId\n })\n .then(async ({data}) => {\n if (data.paymentUrl) {\n window.location = data.paymentUrl;\n } else {\n await updateBookingsUI();\n Notifications.setNotificationCookie(\"Your booking has been confirmed.\")\n\n location.reload();\n }\n })\n .catch((ex) => {\n trackException(ex);\n console.error(ex);\n\n Notifications.showError({ message: ex.response.data ?? \"There was a problem creating your booking. Please try again later.\" });\n Validation.enableButton(e.submitter);\n });\n\n }\n });\n\n });\n}\n\nconst handleCancelBooking = async (e, el) => {\n e.preventDefault();\n\n const bookingId = el.dataset.bookingId;\n const refundWindow = el.dataset.refundWindow;\n const refundWindowCloses = new Date(el.dataset.refundWindowCloses);\n const bookingCost = parseFloat(el.dataset.bookingCost ?? 0);\n\n let message = `

Your booking will be cancelled.

`;\n if(bookingCost > 0 && refundWindow > 0 && new Date() > refundWindowCloses) {\n message += `

Bookings cancelled within ${refundWindow} hours of the session will not be refunded.

`;\n }\n\n const {isConfirmed} = await Notifications.confirm.fire({\n title: \"Cancel Booking?\",\n html: message\n });\n\n if (isConfirmed) {\n\n try {\n FreezeUI.Freeze();\n const {data} = await authApi.put(`/api/bookings/cancel/${bookingId}`);\n\n await updateBookingsUI();\n Notifications.setNotificationCookie(\"Your booking has been cancelled.\");\n\n location.reload();\n } catch(ex){\n trackException(ex);\n Notifications.showError({ message: \"There was an error cancelling your booking. Please try again later.\" })\n }\n finally {\n FreezeUI.UnFreeze();\n }\n }\n}\n\n//#endregion Booking\n\n//#region Templates\n\nconst initTemplates = () => {\n HandlebarsHelpers.init();\n Handlebars.registerPartial(\"avatar\", avatarTemplate);\n}\n\nconst avatarTemplate = `\n
\n \n \"{{name}}\"\n \n
`;\n\nconst bookingsTableTemplate = `\n {{#each @root}}\n
\n
\n {{>avatar }}\n
\n \n {{name}}\n
\n
\n {{#ifEquals attended false}}\n \n {{/ifEquals}}\n {{#ifEquals attended true}}\n \n {{/ifEquals}}\n {{#if isFirstSession}}\n First Session\n {{/if}}\n {{#if paymentRequired}}\n Not paid\n {{/if}}\n {{#ifGreaterThan 18 age}}\n Under 18\n {{/ifGreaterThan}}\n {{#unlessObjectEmpty formValues}}\n \n {{/unlessObjectEmpty}}\n
\n \n
\n
\n {{/each}}`;\n\nconst cancelledTableTemplate = `\n {{#each @root}}\n
\n
\n {{>avatar }}\n
\n \n {{name}}\n
\n
\n {{formatDate dateCancelled \"short\"}}\n
\n
\n
\n {{/each}}`;\n\nconst coachTableTemplate = `\n {{#each @root}}\n
\n \n
\n {{/each}}`;\n\nconst waitingListTemplate = `\n
Waiting List
`;\n\nconst cancelledTemplate = `\n
\n
Cancelled Bookings
\n
Date Cancelled
\n
`;\n\n//#endregion Templates\n","import {LocalStorage} from \"./localStorage\";\nimport {requestVerificationToken} from \"./common\";\n\nexport const apiVersion = \"2023-02-21\";\n\nexport const api = axios.create({\n headers: {\n \"RequestVerificationToken\": requestVerificationToken,\n \"x-api-version\": apiVersion\n }\n});\n\nexport const authApi = axios.create({\n headers: {\n \"RequestVerificationToken\": requestVerificationToken,\n \"x-api-version\": apiVersion\n }\n});\n\nauthApi.interceptors.request.use(\n config => {\n const token = LocalStorage.getToken();\n if (token) {\n config.headers['Authorization'] = `Bearer ${token}`;\n }\n return config;\n },\n error => {\n Promise.reject(error)\n });\n\nauthApi.interceptors.response.use((response) => {\n return response\n },\n function (error) {\n const originalRequest = error.config;\n if (error.response.status === 401 && !originalRequest._retry) {\n\n originalRequest._retry = true;\n return axios.post('/api/token', new URLSearchParams({ grant_type: 'client_credentials' }), { headers: {\"x-api-version\": apiVersion}})\n .then(res => {\n if (res.status === 200 && res.data.access_token) {\n LocalStorage.setToken(res.data);\n originalRequest.headers.Authorization = `Bearer ${res.data.access_token}`;\n\n return axios(originalRequest);\n }\n });\n }\n return Promise.reject(error);\n });\n","export const requestVerificationToken = document.querySelector('input[name=\"__RequestVerificationToken\"]')?.value;\n\nexport function addCommas(value) {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n\nexport function sanitizeUrl(url) {\n return url.toLowerCase()\n .replace(/ /g, '-')\n .replace(/[^\\w-]+/g, '');\n}\n\nexport function truncateString(str, num) {\n if (str.length <= num) {\n return str;\n }\n return str.slice(0, num) + '...';\n}\n\nexport let pathAndQuery = location.pathname + location.search + location.hash;\n\nexport let returnUrlQueryString = `returnurl=${encodeURIComponent(pathAndQuery)}`;\n\nexport const archivedBadge = \"Archived\";\n\nexport const slideUp = (el, speed, callback) => {\n KTUtil.slideUp(el, speed ?? 250, callback);\n}\n\nexport const slideDown = (el, speed, callback) => {\n KTUtil.slideDown(el, speed ?? 250, callback);\n}\n\nexport const show = (el, display) => {\n if (typeof el !== 'undefined' && el) {\n el.style.display = (display ? display : 'block');\n }\n}\n\nexport const hide = (el) => {\n if (typeof el !== 'undefined' && el) {\n el.style.display = 'none';\n }\n}\n\nexport function createUUID() {\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nexport function currentCulture() {\n return document.getElementById(\"currentCulture\")?.value ?? \"en-gb\";\n}\n\nexport function currentCurrency() {\n return document.getElementById(\"currentCurrency\")?.value ?? \"£\";\n}\n\nexport function getCurrencySymbol() {\n return (0).toLocaleString(currentCulture(), {\n style: 'currency',\n currency: currentCurrency(),\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n }).replace(/\\d/g, '').trim();\n}\n\nexport function formatCurrency(amount) {\n return new Intl.NumberFormat(currentCulture(), {\n style: \"currency\",\n currency: currentCurrency(),\n }).format(amount);\n}\n","export const debounce = function (callback, ms) {\n let timer = 0;\n return function () {\n let context = this, args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n callback.apply(context, args);\n }, ms || 0);\n };\n};\n\n","import {Notifications} from \"./notifications\";\nimport {authApi, apiVersion} from \"./api\";\nimport {FreezeUI} from \"./freeze-ui\";\nimport {requestVerificationToken} from \"./common\";\nimport {memberSearchTagify} from \"./tagify\";\nimport {Guid} from \"./guid\";\nimport {trackException} from \"./errors\";\n\nlet editor, subjectEl, tagify, attachmentDropzone, id, modal;\nexport const maxFileSize = 5; // Maximum size in MB\nexport const maxAttachments = 5; // Maximum number of attachments allowed per email\n\nexport const parallelUploads = 4;\n\nconst Emails = function () {\n\n return {\n init: async () => {\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"[data-send-email]\")\n if (!target)\n return;\n\n e.preventDefault();\n const memberId = target.dataset.memberId;\n const name = target.dataset.memberName;\n\n await composeEmail([{value: memberId, text: name}]);\n });\n }\n }\n}();\n\nexport const initDropzone = (selector, id) => {\n\n const container = document.querySelector(selector);\n\n const previewNode = container.querySelector(\".dropzone-item\");\n previewNode.id = \"\";\n const previewTemplate = previewNode.parentNode.innerHTML;\n previewNode.parentNode.removeChild(previewNode);\n\n const dropzone = new Dropzone(selector, {\n url: `/api/emails/attachments/${id}`,\n headers: {\n RequestVerificationToken: requestVerificationToken,\n \"x-api-version\": apiVersion\n },\n previewTemplate: previewTemplate,\n parallelUploads: parallelUploads,\n maxFilesize: maxFileSize, // Max filesize in MB\n maxFiles: maxAttachments,\n autoQueue: true,\n previewsContainer: selector + \" .dropzone-items\",\n clickable: \".dropzone-select\", // Define the element that should be used as click trigger to select files.\n });\n\n dropzone.on(\"addedfile\", function (file) {\n const dropzoneItems = container.querySelectorAll('.dropzone-item');\n dropzoneItems.forEach(dropzoneItem => {\n dropzoneItem.style.display = '';\n });\n });\n\n dropzone.on(\"totaluploadprogress\", function (progress) {\n const progressBars = container.querySelectorAll('.progress-bar');\n progressBars.forEach(progressBar => {\n progressBar.style.width = progress + \"%\";\n });\n });\n\n dropzone.on(\"sending\", function (file) {\n // Show the total progress bar when upload starts\n const progressBars = container.querySelectorAll('.progress-bar');\n progressBars.forEach(progressBar => {\n progressBar.style.opacity = \"1\";\n });\n });\n\n dropzone.on(\"complete\", function (progress) {\n const progressBars = container.querySelectorAll('.dz-complete');\n\n setTimeout(function () {\n progressBars.forEach(progressBar => {\n progressBar.querySelector('.progress-bar').style.opacity = \"0\";\n progressBar.querySelector('.progress').style.opacity = \"0\";\n });\n }, 300);\n });\n\n dropzone.on(\"removedfile\", async file => {\n await removeAttachment(id, file);\n });\n\n if(container.dataset.attachments) {\n const attachments = JSON.parse(container.dataset.attachments);\n\n attachments?.forEach(attachment => {\n const mockFile = {\n name: attachment.name,\n size: attachment.size,\n type: attachment.contentType,\n accepted: true\n };\n dropzone.files.push(mockFile);\n dropzone.emit(\"addedfile\", mockFile);\n dropzone.emit(\"complete\", mockFile);\n });\n }\n\n return dropzone;\n}\n\nexport const composeEmail = async (to, subject, body) => {\n id = Guid.newGuid();\n const placeholderEl = document.querySelector(\"#modal-placeholder\");\n const {data} = await axios.get(\"/compose-email\");\n\n const modalHtml = new DOMParser().parseFromString(data, 'text/html');\n placeholderEl.append(...modalHtml.body.children);\n const modalEl = placeholderEl.querySelector(\".modal\");\n modal = new bootstrap.Modal(modalEl);\n\n const recipientsEl = placeholderEl.querySelector(\"#To\");\n subjectEl = placeholderEl.querySelector(\"#Subject\");\n\n subjectEl.value = subject ?? \"\";\n\n initTagify(recipientsEl, to);\n initEditor(modalEl, \"#editor\")\n attachmentDropzone = initDropzone(\"#attachment_dropzone\", id);\n\n placeholderEl.querySelector(\"#send-email\").addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n Notifications.confirm.fire({ text: \"Are you sure you want to send the email?\" })\n .then(async (result) => {\n if (result.isConfirmed) {\n await saveEmail(true);\n }\n });\n });\n\n placeholderEl.querySelector(\"#advanced_editor\")?.addEventListener(\"click\", async (e) => {\n e.preventDefault();\n\n await saveEmail(false);\n });\n\n modal.show();\n\n modalEl.addEventListener('hide.bs.modal', e => {\n placeholderEl.innerHTML = \"\";\n tagify = null;\n editor = null;\n });\n}\n\n//#region Editor\nconst initEditor = (container, selector) => {\n\n // Init editor\n const editorEl = document.querySelector(selector)\n editor = CKEditor.ClassicEditor\n .create(editorEl, {\n toolbar: {\n items: [\n 'heading',\n '|',\n 'bold',\n 'italic',\n 'indent',\n 'outdent',\n 'alignment',\n '|',\n 'link',\n 'bulletedList',\n 'numberedList',\n 'blockQuote',\n 'horizontalLine',\n 'insertTable',\n ]\n }\n })\n .then(e => {\n editor = e;\n })\n .catch(error => {\n console.error(error);\n });\n};\n\n//#endregion\n\n//#region Tagify\n\nconst initTagify = (el, to) => {\n\n tagify = memberSearchTagify(\"#To\", true);\n tagify.whitelist = to;\n tagify.addTags(to);\n};\n\n//#endregion\n\nconst saveEmail = async (sendEmail) => {\n const body = editor.getData();\n const subject = subjectEl.value;\n const recipients = tagify.value.map(x => ({value: x.value, text: x.text}));\n\n if(sendEmail && recipients.length <= 0){\n Notifications.showWarning({ message: \"Please select at least one participant before sending.\" });\n return;\n }\n\n if (sendEmail && subject.length <= 0) {\n Notifications.showWarning({ message: \"Please enter a subject.\" });\n return;\n }\n\n if(sendEmail && body.length <= 1){\n Notifications.showWarning({ message: \"Please enter a message body.\" });\n return;\n }\n\n const values = {\n id,\n subject,\n body,\n recipients,\n status: sendEmail ? \"Queued\" : \"Draft\"\n };\n\n FreezeUI.Freeze();\n\n try{\n const {data} = await authApi.put(`/api/emails/${id}`, values);\n\n if(sendEmail){\n FreezeUI.UnFreeze();\n } else {\n window.location.href = `/admin/emails/compose/${id}`;\n }\n Notifications.showSuccess({ message: \"Your email has been sent.\" });\n modal.hide();\n }\n catch (err) {\n trackException(err);\n Notifications.showError({ message: \"There was a problem saving the email. Please try again later.\" });\n }\n finally {\n FreezeUI.UnFreeze();\n }\n}\n\nconst removeAttachment = async (id, file) => {\n\n const {data} = await authApi.delete(`/api/emails/attachments/${id}`, {\n data: {\n fileName: file.name\n }\n });\n\n console.log(data);\n}\n\nexport default Emails;\n","export const trackException = (err) => {\n if (typeof appInsights !== 'undefined') {\n appInsights.trackException(err);\n } else {\n console.log(err);\n }\n}\n","export class FreezeUI {\n\n static isFrozen = false;\n\n static Freeze = (options) => {\n\n if(this.isFrozen)\n return;\n\n const freezeHtml = document.createElement('div');\n freezeHtml.classList.add('freeze-ui');\n\n let parent = document.querySelector(options?.selector) || document.body;\n freezeHtml.setAttribute('data-text', options?.text || 'Please wait');\n if (document.querySelector(options?.selector)) {\n freezeHtml.style.position = 'absolute';\n\n this.isFrozen = true;\n }\n\n parent.appendChild(freezeHtml);\n };\n\n static UnFreeze = () => {\n let element = document.querySelector('.freeze-ui');\n if (element) {\n element.classList.add('is-unfreezing');\n setTimeout(() => {\n if (element) {\n element.classList.remove('is-unfreezing');\n element.parentElement?.removeChild(element);\n\n this.isFrozen = false;\n }\n }, 250);\n }\n };\n}\n","export class Guid {\n static newGuid() {\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}\n","\nexport const noResultsTemplate = (message, classList) => {\n return \"\" +\n \"
\\n\" +\n \" \\n\" +\n \"
\\n\" +\n \" \" + message + \"\\n\" +\n \"
\\n\" +\n \"
\\n\";\n}\n\nexport class HandlebarsHelpers {\n static init(){\n const dateFormats = {\n short: \"DD MMM YY @ HH:mm\",\n long: \"dddd DD.MM.YYYY HH:mm\"\n };\n\n Handlebars.registerHelper('ifEquals', function (value1, value2, options) {\n if (value1 === value2) {\n return options.fn(this);\n }\n return options.inverse(this);\n });\n\n Handlebars.registerHelper('ifNotEquals', function (value1, value2, options) {\n if (value1 === value2) {\n return options.inverse(this);\n }\n return options.fn(this);\n });\n\n Handlebars.registerHelper(\"formatDate\", function (datetime, format) {\n if (moment) {\n format = dateFormats[format] || format;\n return moment(datetime).format(format);\n } else {\n return datetime;\n }\n });\n\n Handlebars.registerHelper(\"formatCurrency\", function (value) {\n\n if(!value)\n return;\n\n if(Number.isNaN(value))\n return value;\n\n return Number(value).toFixed(2);\n });\n\n Handlebars.registerHelper(\"ifGreaterThan\", function (value1, value2, options) {\n if (value1 > value2) {\n return options.fn(this);\n }\n return options.inverse(this);\n });\n\n Handlebars.registerHelper(\"unlessObjectEmpty\", function (obj, options) {\n\n const the = this;\n let hasValue = false;\n\n if (!obj)\n return options.inverse(the);\n\n Object.keys(obj).forEach(function(item) {\n if(obj[item].length > 0) {\n hasValue = true;\n }\n });\n\n return hasValue ? options.fn(the) : options.inverse(the);\n });\n\n };\n}\n","// LocalStorageService.js\nexport class LocalStorage {\n\n static setToken(tokenObj) {\n localStorage.setItem(\"token\", tokenObj.access_token);\n localStorage.setItem(\"expires\", tokenObj.expires);\n }\n\n static getToken() {\n return localStorage.getItem(\"token\");\n }\n\n static clearToken() {\n localStorage.removeItem(\"token\");\n localStorage.removeItem(\"expiration\");\n }\n}\n","import {FreezeUI} from \"./freeze-ui\";\nimport {trackException} from \"./errors\";\nimport {Notifications} from \"./notifications\";\n\nexport const setModalContent = (html) => {\n const placeholderElement = document.querySelector(\"#modal-placeholder\");\n placeholderElement.innerHTML = \"\"; // Clear just in case it has an old modal in it\n\n const modalHtml = new DOMParser().parseFromString(html, 'text/html');\n placeholderElement.append(...modalHtml.body.children);\n const modalEl = placeholderElement.querySelector(\".modal\");\n\n const modal = new bootstrap.Modal(modalEl);\n modal.show();\n\n return modal;\n}\n\nexport const setAjaxModalContent = async url => {\n\n try {\n FreezeUI.Freeze();\n\n const {data} = await axios.get(url);\n\n return setModalContent(data);\n } catch (error) {\n trackException(error);\n Notifications.showError({ message: \"There was a problem opening the modal.\" });\n } finally {\n FreezeUI.UnFreeze();\n }\n}\n\nconst Modals = function () {\n\n const handleModalLaunchClick = async el =>{\n const url = el.href;\n\n await setAjaxModalContent(url);\n };\n\n return {\n // Public functions\n init: function () {\n document.addEventListener(\"click\", async e => {\n const target = e.target.closest(\"a[data-bs-toggle=\\\"ajax-modal\\\"]\")\n if (!target)\n return;\n\n e.preventDefault();\n await handleModalLaunchClick(target);\n });\n }\n }\n}();\n\nexport default Modals;\n","export class Notifications {\n\n static notificationCookieName = \".clubpal.toast\";\n static alertCookieName = \".clubpal.alert\";\n\n static init() {\n window.addEventListener('load', function () {\n\n const notificationCookie = Notifications.getCookie(Notifications.notificationCookieName);\n if (notificationCookie) {\n\n let values = Notifications.parseQuery(notificationCookie);\n if (values[\"message\"]) {\n showMessage({message: values[\"message\"], type: values[\"type\"]});\n\n Notifications.setCookie(Notifications.notificationCookieName, \"\", -1);\n }\n }\n\n const alertCookie = Notifications.getCookie(Notifications.alertCookieName);\n if (alertCookie) {\n\n let values = Notifications.parseQuery(alertCookie);\n if (values[\"message\"]) {\n Notifications.alert.fire({ title: values[\"title\"], html: values[\"message\"]});\n }\n Notifications.setCookie(Notifications.alertCookieName, \"\", -1);\n }\n });\n }\n\n static setNotificationCookie(title) {\n Notifications.setCookie(btoa(`message=${title}&type=success`), 1);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showSuccess = (options) => {\n options.type = \"success\";\n\n showMessage(options);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showError = (options) => {\n options.type = \"error\";\n\n showMessage(options);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showWarning = (options) => {\n options.type = \"warning\";\n\n showMessage(options);\n }\n\n /**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n static showInfo = (options) => {\n options.type = \"warning\";\n\n showMessage(options);\n }\n\n static confirm = Swal?.mixin({\n showConfirmButton: true,\n showDenyButton: true,\n reverseButtons: true,\n customClass: {\n actions: \"d-flex justify-content-between w-100\",\n confirmButton: \"px-10 btn btn-primary d-flex align-items-center\",\n denyButton: \"px-10 btn btn-danger d-flex align-items-center\",\n input: ''\n },\n confirmButtonText: ' Yes',\n denyButtonText: ' No',\n });\n\n static alert = Swal.mixin({\n showConfirmButton: true,\n showDenyButton: false,\n reverseButtons: false,\n customClass: {\n actions: \"d-flex justify-content-center w-100\",\n confirmButton: \"px-10 btn btn-light-primary d-flex align-items-center\",\n input: ''\n },\n confirmButtonText: 'OK!'\n });\n\n static setCookie(cookieName, value, minutes) {\n let expires = \"\";\n if (minutes) {\n const date = new Date();\n date.setTime(date.getTime() + (minutes * 60 * 1000));\n expires = \"; expires=\" + date.toUTCString();\n }\n\n document.cookie = cookieName + \"=\" + (value || \"\") + expires + \"; path=/\";\n }\n\n static getCookie(cookieName) {\n let nameEQ = cookieName + \"=\";\n let ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) {\n let value = decodeURIComponent(c.substring(nameEQ.length, c.length));\n return atob(value);\n }\n }\n\n return null;\n }\n\n static parseQuery(queryString) {\n let query = {};\n let pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\n for (let i = 0; i < pairs.length; i++) {\n let pair = pairs[i].split('=');\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');\n }\n return query;\n }\n}\n\nlet container;\n\nconst alertTemplate = Handlebars.compile(`\n
\n {{#if title}}\n
{{title}}
\n {{/if}}\n
\n
\n {{message}}\n
\n \n
\n
\n
\n`);\n\nconst ensureContainer = () => {\n if(container)\n return container;\n\n container = document.createElement(\"div\");\n container.id = \"snackbar\";\n\n document.body.appendChild(container);\n\n return container;\n};\n\n/**\n *\n * @param {object} options - Options\n * @param {string} options.message - The message for the notification\n * @param {(\"success\" | \"warning\" | \"error\" | \"info\")} options.type - The type of notification to display. Options are success, warning, error, info.\n * @param {string} [options.title] - An optional title for the notification\n * @param {number} [options.timeout] - The time in milliseconds to show the notification. Set to 0 to not auto-hide.\n */\n\nconst showMessage = (options) => {\n\n const timeout = options.timeout ?? 5000;\n\n const alert = document.createElement(\"div\");\n alert.innerHTML = alertTemplate(options);\n\n ensureContainer().appendChild(alert);\n alert.className = `snack ${options.type} show`;\n\n const closeButton = alert.querySelector(\"a.close\");\n closeButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n hideAlert();\n });\n\n if(timeout > 0) {\n setTimeout(hideAlert, timeout);\n }\n\n function hideAlert() {\n alert.remove();\n }\n};\n\n","const Tabs = (el) => {\n\n if(!el){\n console.warn(\"Unable to initialize Tabs without an element.\")\n return;\n }\n\n const moreDropdown = el.querySelector(\"li.dropdown\");\n const moreMenu = el.querySelector(\"li.dropdown .dropdown-menu\");\n const tabs = el.querySelectorAll(\":scope > li:not(.dropdown)\");\n const maxWidth = getMaxWidth(el);\n\n for(let i = tabs.length -1; i >= 0; i--){\n const tab = tabs[i];\n\n if(el.scrollWidth > maxWidth) {\n tab.classList.add(\"d-none\");\n moreDropdown.classList.remove(\"d-none\");\n }\n }\n\n moreMenu.innerHTML = \"\";\n const hiddenItems = el.querySelectorAll(\"li.d-none:not(.dropdown)\");\n hiddenItems.forEach(hiddenItem => {\n\n const li = document.createElement(\"li\");\n const link = hiddenItem.querySelector(\"a\");\n link.className = \"dropdown-item text-gray-500 fw-bold fs-5 p-5\";\n\n li.appendChild(link);\n moreMenu.append(li);\n });\n}\n\nfunction getMaxWidth(el) {\n\n const parentProperties = window.getComputedStyle(el.parentElement);\n const paddingLeft = parseInt(parentProperties.getPropertyValue(\"padding-left\"));\n const paddingRight = parseInt(parentProperties.getPropertyValue(\"padding-right\"));\n\n return el.parentElement.clientWidth - paddingLeft - paddingRight;\n}\n\nexport default Tabs\n","import {debounce} from \"./debounce\";\n\nexport const memberSearchTagify = (selector, enableSmartGroups, options) => {\n\n const input = document.querySelector(selector);\n\n if (!input) {\n console.warn(`A tagify instance cannot be created because the no element with the selector \"${selector}\" could be found.`);\n return;\n }\n\n let whitelist = [];\n if (input.value.length > 0) {\n whitelist = JSON.parse(input.value);\n }\n\n const defaultOptions = {\n tagTextProp: \"text\",\n enforceWhitelist: true,\n whitelist: whitelist,\n skipInvalid: true,\n dropdown: {\n closeOnSelect: true,\n enabled: 1,\n classname: \"users-list\",\n searchKeys: [\"text\"]\n },\n templates: {\n tag: memberTemplate,\n dropdownItem: memberSuggestionTemplate\n }\n };\n\n const tagify = new Tagify(input, {...defaultOptions, ...options});\n\n tagify.on(\"input\", debounce(async (e) => {\n tagify.whitelist = null;\n tagify.loading(true);\n\n const {data} = await axios.get(`/members?term=${e.detail.value}&smartGroups=${enableSmartGroups}`);\n tagify.whitelist = data.results;\n tagify\n .loading(false)\n .dropdown.show(e.detail.value);\n }, 300));\n\n return tagify;\n}\n\nexport const ajaxTagify = (selector, url) => {\n\n const input = document.querySelector(selector);\n\n if(!input){\n console.warn(`A tagify instance cannot be created because the no element with the selector \"${selector}\" could be found.`);\n return;\n }\n\n let whitelist = [];\n if(input.value.length > 0){\n whitelist = JSON.parse(input.value);\n }\n\n const tagify = new Tagify(input, {\n tagTextProp: \"text\",\n whitelist: whitelist,\n enforceWhitelist: true,\n skipInvalid: true,\n dropdown: {\n mapValueTo: \"text\",\n closeOnSelect: true,\n enabled: 1,\n classname: \"tagify-list\",\n searchKeys: [\"text\"]\n },\n });\n\n tagify.on(\"input\", debounce(async (e) => {\n tagify.whitelist = null;\n tagify.loading(true);\n\n const {data} = await axios.get(`${url}&term=${e.detail.value}`);\n tagify.whitelist = data.results;\n tagify\n .loading(false)\n .dropdown.show(e.detail.value);\n }, 300));\n\n return tagify;\n};\n\nexport const whitelistTagify = (selector, options) => {\n const el = document.querySelector(selector);\n if(!el)\n return;\n\n const defaultOptions = {\n whitelist: el.dataset.whitelistItems ? JSON.parse(el.dataset.whitelistItems) : \"\",\n enforceWhitelist: true,\n originalInputValueFormat: valuesArr => valuesArr.map(item => item.value).join(','),\n dropdown: {\n maxItems: 20,\n enabled: 0,\n classname: \"tags-look\",\n closeOnSelect: false\n }\n };\n\n return new Tagify(el, {...defaultOptions, ...options});\n}\n\n//#region Templates\n\nfunction memberTemplate(tagData) {\n return `\n \n \n
\n ${tagData.text}\n
\n
\n `;\n}\n\nfunction memberSuggestionTemplate(tagData) {\n return `\n
\n
\n ${tagData.text}\n
\n
\n `;\n}\n\n//#endregion Templates\n\n","export const initTooltips = (element) => {\n const tooltipTriggerList = element?.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n\n if(tooltipTriggerList) {\n return [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));\n }\n};\n","export class Validation{\n static getDefaultValidator(form) {\n\n return FormValidation.formValidation(form, {\n plugins: {\n trigger: new FormValidation.plugins.Trigger(),\n bootstrap: new FormValidation.plugins.Bootstrap5({\n rowSelector: '.fv-row',\n eleInvalidClass: 'bg-light-danger is-invalid',\n eleValidClass: ''\n }),\n declarative: new FormValidation.plugins.Declarative({html5Input: true})\n }\n });\n }\n\n static disableButton(button) {\n button?.setAttribute(\"disabled\", \"disabled\");\n button?.setAttribute(\"data-kt-indicator\", \"on\");\n }\n\n static enableButton(button) {\n button?.removeAttribute(\"disabled\");\n button?.removeAttribute(\"data-kt-indicator\");\n }\n\n static validateForm(e, validator, submitter) {\n e.preventDefault();\n\n const form = validator.form;\n if (validator) {\n validator.validate().then(status => {\n if (status === 'Valid') {\n Validation.disableButton(submitter || e.submitter);\n form.submit();\n }\n });\n }\n }\n\n static validateFormWithReCaptcha(e, validator, submitter) {\n e.preventDefault();\n\n const form = validator.form;\n if (validator) {\n validator.validate().then(function (status) {\n if (status === 'Valid') {\n\n Validation.disableButton(submitter || e.submitter);\n\n const recaptchaInput = form.querySelector(\"#RecaptchaResponse\");\n const siteKey = recaptchaInput.dataset.siteKey;\n\n grecaptcha.ready(function () {\n const action = recaptchaInput.dataset.action;\n grecaptcha.execute(siteKey, {action: action}).then(function (token) {\n recaptchaInput.value = token;\n\n form.submit();\n });\n });\n }\n });\n }\n }\n\n static showFormError(errorText, errorTitle) {\n const errorContainer = document.querySelector(\"#error-alert\");\n if(!errorContainer)\n return;\n\n errorContainer.style.display = \"flex\";\n errorContainer.querySelector(\".alert-text\").innerHTML = errorText;\n }\n\n static hideFormError() {\n const errorContainer = document.querySelector(\"#error-alert\");\n if (!errorContainer)\n return;\n\n errorContainer.style.display = \"none\";\n }\n}\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\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\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJTY3JpcHRzL3BhZ2VzL3Nlc3Npb25zL3Nlc3Npb25IZWFkZXIuanMiLCJTY3JpcHRzL3NyYy9hcGkuanMiLCJTY3JpcHRzL3NyYy9jb21tb24uanMiLCJTY3JpcHRzL3NyYy9kZWJvdW5jZS5qcyIsIlNjcmlwdHMvc3JjL2VtYWlscy5qcyIsIlNjcmlwdHMvc3JjL2Vycm9ycy5qcyIsIlNjcmlwdHMvc3JjL2ZyZWV6ZS11aS5qcyIsIlNjcmlwdHMvc3JjL2d1aWQuanMiLCJTY3JpcHRzL3NyYy9oYW5kbGViYXJzSGVscGVycy5qcyIsIlNjcmlwdHMvc3JjL2xvY2FsU3RvcmFnZS5qcyIsIlNjcmlwdHMvc3JjL21vZGFscy5qcyIsIlNjcmlwdHMvc3JjL25vdGlmaWNhdGlvbnMuanMiLCJTY3JpcHRzL3NyYy90YWJzLmpzIiwiU2NyaXB0cy9zcmMvdGFnaWZ5LmpzIiwiU2NyaXB0cy9zcmMvdG9vbHRpcHMuanMiLCJTY3JpcHRzL3NyYy92YWxpZGF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztBQ0FBLElBQUEsSUFBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLE9BQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxPQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsY0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLFdBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxPQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsU0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLGtCQUFBLEdBQUEsT0FBQTtBQUNBLElBQUEsT0FBQSxHQUFBLE9BQUE7QUFDQSxJQUFBLFNBQUEsR0FBQSxPQUFBO0FBQ0EsSUFBQSxLQUFBLEdBQUEsc0JBQUEsQ0FBQSxPQUFBO0FBRUEsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztBQUN0RCxJQUFJLFNBQVMsRUFBRSxXQUFXO0FBRTFCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsbUJBQUEsa0JBQUEsMEJBQUEsWUFBQSxZQUFBLElBQUEsQ0FBRSxTQUFBLFNBQUE7RUFBQSxJQUFBLHFCQUFBO0VBQUEsSUFBQSxhQUFBO0VBQUEsT0FBQSxZQUFBLFlBQUEsSUFBQSxVQUFBLFVBQUEsU0FBQTtJQUFBLGtCQUFBLFNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImltcG9ydCB7YXBpLCBhdXRoQXBpfSBmcm9tIFwiLi4vLi4vc3JjL2FwaVwiO1xuaW1wb3J0IHtzZXRNb2RhbENvbnRlbnR9IGZyb20gXCIuLi8uLi9zcmMvbW9kYWxzXCI7XG5pbXBvcnQge21lbWJlclNlYXJjaFRhZ2lmeX0gZnJvbSBcIi4uLy4uL3NyYy90YWdpZnlcIjtcbmltcG9ydCB7Tm90aWZpY2F0aW9uc30gZnJvbSBcIi4uLy4uL3NyYy9ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQge1ZhbGlkYXRpb259IGZyb20gXCIuLi8uLi9zcmMvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtjb21wb3NlRW1haWx9IGZyb20gXCIuLi8uLi9zcmMvZW1haWxzXCI7XG5pbXBvcnQge0ZyZWV6ZVVJfSBmcm9tIFwiLi4vLi4vc3JjL2ZyZWV6ZS11aVwiO1xuaW1wb3J0IHtIYW5kbGViYXJzSGVscGVycywgbm9SZXN1bHRzVGVtcGxhdGV9IGZyb20gXCIuLi8uLi9zcmMvaGFuZGxlYmFyc0hlbHBlcnNcIjtcbmltcG9ydCB7dHJhY2tFeGNlcHRpb259IGZyb20gXCIuLi8uLi9zcmMvZXJyb3JzXCI7XG5pbXBvcnQge2luaXRUb29sdGlwc30gZnJvbSBcIi4uLy4uL3NyYy90b29sdGlwc1wiO1xuaW1wb3J0IFRhYnMgZnJvbSBcIi4uLy4uL3NyYy90YWJzXCI7XG5cbmxldCBib29raW5nVXBkYXRlZEV2ZW50ID0gbmV3IEV2ZW50KCdib29raW5nLnVwZGF0ZWQnKTtcbmxldCBzZXNzaW9uSWQsIHNlc3Npb25EYXRlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBhc3luYyAoKSA9PiB7XG5cbiAgICBuZXcgVGFicyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtY29sbGFwc2UtbWVudV1cIikpO1xuXG4gICAgY29uc3Qgc2Vzc2lvbkhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2Vzc2lvbl9oZWFkZXJcIik7XG4gICAgc2Vzc2lvbklkID0gc2Vzc2lvbkhlYWRlcj8uZGF0YXNldC5zZXNzaW9uSWQ7XG4gICAgc2Vzc2lvbkRhdGUgPSBzZXNzaW9uSGVhZGVyPy5kYXRhc2V0LnNlc3Npb25EYXRlO1xuXG4gICAgaW5pdFRlbXBsYXRlcygpO1xuXG4gICAgYXdhaXQgdXBkYXRlQm9va2luZ3NVSSgpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImJvb2tpbmd1cGRhdGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdXBkYXRlQm9va2luZ3NVSSgpO1xuICAgIH0pO1xuXG4gICAgLy8jcmVnaW9uIEFkZCBDb2FjaCBFdmVudHNcblxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hZGQtY29hY2hdXCIpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHNob3dBZGRDb2FjaEZvcm0oZWwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vI2VuZHJlZ2lvbiBBZGQgQ29hY2ggRXZlbnRzXG5cbiAgICAvLyNyZWdpb24gQWRkIEJvb2tpbmcgRXZlbnRzXG5cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWRkLWJvb2tpbmddXCIpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHNob3dBZGRCb29raW5nRm9ybShlbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8jZW5kcmVnaW9uIEFkZCBCb29raW5ncyBFdmVudHNcblxuICAgIC8vI3JlZ2lvbiBTZW5kIEVtYWlscyBFdmVudHNcblxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1lbWFpbC1wYXJ0aWNpcGFudHNdXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBGcmVlemVVSS5GcmVlemUoKTtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IGUuY3VycmVudFRhcmdldC5kYXRhc2V0LnN1YmplY3Q7XG5cbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXV0aEFwaS5nZXQoYC9hcGkvYm9va2luZ3M/c2Vzc2lvbklkPSR7c2Vzc2lvbklkfSZTZXNzaW9uRGF0ZT0ke3Nlc3Npb25EYXRlfSZCb29raW5nU3RhdHVzPWNvYWNoJkJvb2tpbmdTdGF0dXM9Y29uZmlybWVkJkxpbWl0PTEwMCZpbmNsdWRlPW1lbWJlcklkLG5hbWVgKTtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50cyA9IGRhdGEuaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWVtYmVySWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IGNvbXBvc2VFbWFpbChbe1xuICAgICAgICAgICAgdmFsdWU6IHJlY2lwaWVudHMuam9pbignfCcpLFxuICAgICAgICAgICAgdGV4dDogYCR7cmVjaXBpZW50cy5sZW5ndGh9IE1lbWJlcnNgXG4gICAgICAgIH1dLCBzdWJqZWN0KTtcblxuICAgICAgICBGcmVlemVVSS5VbkZyZWV6ZSgpO1xuICAgIH0pO1xuXG4gICAgLy8jZW5kcmVnaW9uIFNlbmQgRW1haWxzIEV2ZW50c1xuXG4gICAgLy8jcmVnaW9uIEJvb2sgQnV0dG9uIEV2ZW50c1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldC5jbG9zZXN0KFwiW2RhdGEtYWN0aW9uPSdCb29rJ11bZGF0YS1ib29raW5nLXR5cGU9J0NvYWNoJ11cIilcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgaGFuZGxlQ29hY2hCb29raW5nKGUsIHRhcmdldCk7XG4gICAgfSk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1hY3Rpb249J0Jvb2snXVtkYXRhLWJvb2tpbmctdHlwZT0nUGFydGljaXBhbnQnXVwiKVxuICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCBoYW5kbGVQYXJ0aWNpcGFudEJvb2tpbmcoZSwgdGFyZ2V0KTtcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyBlID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQuY2xvc2VzdChcIltkYXRhLWFjdGlvbj0nQ2FuY2VsJ11cIilcbiAgICAgICAgaWYgKCF0YXJnZXQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgaGFuZGxlQ2FuY2VsQm9va2luZyhlLCB0YXJnZXQpO1xuICAgIH0pO1xuXG4gICAgLy8jZW5kcmVnaW9uIEJvb2sgRXZlbnRzXG5cbn0pO1xuXG4vLyNyZWdpb24gTW9kYWxzXG5cbmNvbnN0IHNob3dBZGRDb2FjaEZvcm0gPSBhc3luYyAoZWwpID0+IHtcbiAgICBjb25zdCBtb2RhbFVybCA9IGVsLmhyZWY7XG5cbiAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBhcGkuZ2V0KG1vZGFsVXJsKTtcbiAgICBjb25zdCBtb2RhbCA9IHNldE1vZGFsQ29udGVudChkYXRhKTtcblxuICAgIGNvbnN0IHRhZ2lmeSA9IG1lbWJlclNlYXJjaFRhZ2lmeShcIiNNZW1iZXJzXCIsIGZhbHNlKTtcblxuICAgIGNvbnN0IGZvcm0gPSBtb2RhbC5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKTtcbiAgICBjb25zdCBzYXZlQnV0dG9uID0gbW9kYWwuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLXNhdmU9XFxcIm1vZGFsXFxcIl1cIilcblxuICAgIHNhdmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgVmFsaWRhdGlvbi5kaXNhYmxlQnV0dG9uKHNhdmVCdXR0b24pO1xuICAgICAgICBjb25zdCBtZW1iZXJzID0gdGFnaWZ5LnZhbHVlLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtZW1iZXJzLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICBOb3RpZmljYXRpb25zLnNob3dXYXJuaW5nKHsgbWVzc2FnZTogXCJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBtZW1iZXIgdG8gYWRkLlwiIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGFwaS5wb3N0KGZvcm0uYWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgbWVtYmVyc1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoYm9va2luZ1VwZGF0ZWRFdmVudCk7XG4gICAgICAgICAgICBOb3RpZmljYXRpb25zLnNob3dTdWNjZXNzKHsgbWVzc2FnZTogXCJUaGUgY29hY2hlcyBoYXZlIGJlZW4gYWRkZWQuXCIgfSk7XG4gICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZUJvb2tpbmdzVUkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIHRyYWNrRXhjZXB0aW9uKGV4KTtcbiAgICAgICAgICAgIFZhbGlkYXRpb24uZW5hYmxlQnV0dG9uKHNhdmVCdXR0b24pO1xuICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhbiBlcnJvciBhZGRpbmcgdGhlIGNvYWNoLlwiIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IHNob3dBZGRCb29raW5nRm9ybSA9IGFzeW5jIChlbCkgPT4ge1xuICAgIGNvbnN0IG1vZGFsVXJsID0gZWwuaHJlZjtcblxuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGFwaS5nZXQobW9kYWxVcmwpO1xuICAgIGNvbnN0IG1vZGFsID0gc2V0TW9kYWxDb250ZW50KGRhdGEpO1xuXG4gICAgY29uc3QgdGFnaWZ5ID0gbWVtYmVyU2VhcmNoVGFnaWZ5KFwiI01lbWJlcnNcIiwgZmFsc2UpO1xuXG4gICAgY29uc3QgZm9ybSA9IG1vZGFsLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJmb3JtXCIpO1xuICAgIGNvbnN0IHNhdmVCdXR0b24gPSBtb2RhbC5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtc2F2ZT1cXFwibW9kYWxcXFwiXVwiKVxuXG4gICAgc2F2ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBWYWxpZGF0aW9uLmRpc2FibGVCdXR0b24oc2F2ZUJ1dHRvbik7XG4gICAgICAgIGNvbnN0IG1lbWJlcnMgPSB0YWdpZnkudmFsdWUubWFwKGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG1lbWJlcnMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG1lbWJlciB0byBhZGQuXCIgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZW5kRW1haWxzID0gZm9ybS5xdWVyeVNlbGVjdG9yKFwiI1NlbmRFbWFpbHNcIikuY2hlY2tlZDtcblxuICAgICAgICBhd2FpdCBhcGkucG9zdChmb3JtLmFjdGlvbiwgeyBtZW1iZXJzLCBzZW5kRW1haWxzfSlcbiAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLmVuYWJsZUJ1dHRvbihzYXZlQnV0dG9uKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGJvb2tpbmdVcGRhdGVkRXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlQm9va2luZ3NVSSgpO1xuXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93U3VjY2Vzcyh7IG1lc3NhZ2U6IFwiVGhlIG1lbWJlciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc2Vzc2lvbi5cIiB9KTtcbiAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGV4ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGV4KTtcbiAgICAgICAgICAgICAgICB0cmFja0V4Y2VwdGlvbihleCk7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgYm9va2luZy5cIiB9KTtcbiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLmVuYWJsZUJ1dHRvbihzYXZlQnV0dG9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vLyNlbmRyZWdpb24gTW9kYWxzXG5cbi8vI3JlZ2lvbiBCb29raW5nIFVJIFVwZGF0ZXNcblxuICAgIGNvbnN0IHVwZGF0ZUJvb2tpbmdzVUkgPSBhc3luYyAoKSA9PiB7XG5cbiAgICAgICAgYXdhaXQgYXV0aEFwaS5nZXQoYC9hcGkvc2Vzc2lvbnMvYm9va2luZ3MvJHtzZXNzaW9uSWR9LyR7c2Vzc2lvbkRhdGV9YClcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVDb3VudHMoXCJbZGF0YS1ib29raW5ncy1iYWRnZV1cIiwgcmVzcG9uc2UuZGF0YS5jb25maXJtZWRDb3VudCk7XG4gICAgICAgICAgICAgICAgdXBkYXRlQ291bnRzKFwiW2RhdGEtd2FpdGluZy1iYWRnZV1cIiwgcmVzcG9uc2UuZGF0YS53YWl0aW5nTGlzdENvdW50KTtcbiAgICAgICAgICAgICAgICB1cGRhdGVDb3VudHMoXCJbZGF0YS1jb2FjaGVzLWJhZGdlXVwiLCByZXNwb25zZS5kYXRhLmNvYWNoQ291bnQpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlQ29uZmlybWVkVGFibGUocmVzcG9uc2UuZGF0YS5ib29raW5ncyk7XG4gICAgICAgICAgICAgICAgdXBkYXRlV2FpdGluZ0xpc3RUYWJsZShyZXNwb25zZS5kYXRhLmJvb2tpbmdzKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVDYW5jZWxsZWRUYWJsZShyZXNwb25zZS5kYXRhLmJvb2tpbmdzKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVDb2FjaGVzVGFibGUocmVzcG9uc2UuZGF0YS5ib29raW5ncyk7XG5cbiAgICAgICAgICAgICAgICBpbml0VG9vbHRpcHMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNib29raW5nc19jb250YWluZXJcIikpO1xuICAgICAgICAgICAgICAgIHJlZnJlc2hGc0xpZ2h0Ym94KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGV4ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUNvbmZpcm1lZFRhYmxlID0gKGJvb2tpbmdzKSA9PiB7XG5cbiAgICAgICAgaWYoIWJvb2tpbmdzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdGFiX2Jvb2tpbmdzIC5jb250ZW50XCIpO1xuICAgICAgICBjb25zdCBjb25maXJtZWRCb29raW5ncyA9IGJvb2tpbmdzLmZpbHRlcigoZWwpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbC5ib29raW5nU3RhdHVzID09PSBcIkNvbmZpcm1lZFwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uZmlybWVkQm9va2luZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdFRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKGJvb2tpbmdzVGFibGVUZW1wbGF0ZSk7XG4gICAgICAgICAgICBjb250YWluZXIgPyBjb250YWluZXIuaW5uZXJIVE1MID0gbGlzdFRlbXBsYXRlKGNvbmZpcm1lZEJvb2tpbmdzKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250YWluZXIgPyBjb250YWluZXIuaW5uZXJIVE1MID0gbm9SZXN1bHRzVGVtcGxhdGUoXCJUaGVyZSBhcmUgbm8gYm9va2luZ3MgZm9yIHRoaXMgc2Vzc2lvbi5cIikgOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlV2FpdGluZ0xpc3RUYWJsZSA9IChib29raW5ncykgPT4ge1xuICAgICAgICBpZiAoIWJvb2tpbmdzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdGFiX2Jvb2tpbmdzIC5jb250ZW50XCIpO1xuICAgICAgICBjb25zdCB3YWl0aW5nID0gYm9va2luZ3MuZmlsdGVyKChlbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVsLmJvb2tpbmdTdGF0dXMgPT09IFwiV2FpdGluZ0xpc3RcIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHdhaXRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdFRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKGJvb2tpbmdzVGFibGVUZW1wbGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJUZW1wbGF0ZSA9IEhhbmRsZWJhcnMuY29tcGlsZSh3YWl0aW5nTGlzdFRlbXBsYXRlKTtcblxuICAgICAgICAgICAgY29udGFpbmVyID8gY29udGFpbmVyLmlubmVySFRNTCArPSBoZWFkZXJUZW1wbGF0ZSgpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnRhaW5lciA/IGNvbnRhaW5lci5pbm5lckhUTUwgKz0gbGlzdFRlbXBsYXRlKHdhaXRpbmcpIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUNhbmNlbGxlZFRhYmxlID0gKGJvb2tpbmdzKSA9PiB7XG4gICAgICAgIGlmICghYm9va2luZ3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY2FuY2VsbGVkID0gYm9va2luZ3MuZmlsdGVyKChlbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVsLmJvb2tpbmdTdGF0dXMgPT09IFwiQ2FuY2VsbGVkXCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjYW5jZWxsZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdFRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKGNhbmNlbGxlZFRhYmxlVGVtcGxhdGUpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyVGVtcGxhdGUgPSBIYW5kbGViYXJzLmNvbXBpbGUoY2FuY2VsbGVkVGVtcGxhdGUpO1xuXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRCb29raW5ncyA9IGNhbmNlbGxlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEuZGF0ZUNhbmNlbGxlZCA8IGIuZGF0ZUNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmRhdGVDYW5jZWxsZWQgPiBiLmRhdGVDYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0YWJfYm9va2luZ3MgLmNvbnRlbnRcIik7XG4gICAgICAgICAgICBjb250YWluZXIgPyBjb250YWluZXIuaW5uZXJIVE1MICs9IGhlYWRlclRlbXBsYXRlKCkgOiBudWxsO1xuICAgICAgICAgICAgY29udGFpbmVyID8gY29udGFpbmVyLmlubmVySFRNTCArPSBsaXN0VGVtcGxhdGUoY2FuY2VsbGVkKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVDb2FjaGVzVGFibGUgPSAoYm9va2luZ3MpID0+IHtcbiAgICAgICAgaWYgKCFib29raW5ncylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RhYl9jb2FjaGVzIC5jb250ZW50XCIpO1xuICAgICAgICBjb25zdCBjb2FjaGVzID0gYm9va2luZ3MuZmlsdGVyKChlbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVsLmJvb2tpbmdTdGF0dXMgPT09IFwiQ29hY2hcIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNvYWNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdFRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKGNvYWNoVGFibGVUZW1wbGF0ZSk7XG4gICAgICAgICAgICBjb250YWluZXIgPyBjb250YWluZXIuaW5uZXJIVE1MID0gbGlzdFRlbXBsYXRlKGNvYWNoZXMpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA/IGNvbnRhaW5lci5pbm5lckhUTUwgPSBub1Jlc3VsdHNUZW1wbGF0ZShcIlRoZXJlIGFyZSBubyBjb2FjaGVzIGZvciB0aGlzIHNlc3Npb24uXCIpIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUNvdW50cyA9IChzZWxlY3RvciwgY291bnQpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBjb3VudDtcbiAgICAgICAgfSk7XG4gICAgfVxuLy8jZW5kcmVnaW9uIEJvb2tpbmcgVXBkYXRlc1xuXG4vLyNyZWdpb24gQm9vayBCdXR0b24gSGFuZGxlcnNcblxuY29uc3QgaGFuZGxlQ29hY2hCb29raW5nID0gYXN5bmMgKGUsIGVsKSA9PiB7XG5cbiAgICB0cnkge1xuICAgICAgICBGcmVlemVVSS5GcmVlemUoKTtcblxuICAgICAgICBhd2FpdCBhdXRoQXBpLnBvc3QoXCIvYXBpL2Jvb2tpbmdzXCIsIHsgc2Vzc2lvbklkLCBzZXNzaW9uRGF0ZSwgQm9va2luZ1R5cGU6IFwiQ29hY2hcIn0pO1xuXG4gICAgICAgIGF3YWl0IHVwZGF0ZUJvb2tpbmdzVUkoKTtcbiAgICAgICAgTm90aWZpY2F0aW9ucy5zZXROb3RpZmljYXRpb25Db29raWUoXCJZb3VyIGJvb2tpbmcgaGFzIGJlZW4gY29uZmlybWVkLlwiKVxuXG4gICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuXG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgdHJhY2tFeGNlcHRpb24oZXgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGV4KTtcbiAgICAgICAgRnJlZXplVUkuVW5GcmVlemUoKTtcbiAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhbiBlcnJvciBtYWtpbmcgeW91ciBib29raW5nLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiIH0pO1xuICAgIH1cbn07XG5cbmNvbnN0IGhhbmRsZVBhcnRpY2lwYW50Qm9va2luZyA9IGFzeW5jIChlLCBlbCkgPT4ge1xuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IG1vZGFsVXJsID0gZWwuaHJlZjtcblxuICAgIEZyZWV6ZVVJLkZyZWV6ZSgpO1xuXG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXBpLmdldChtb2RhbFVybCk7XG4gICAgY29uc3QgbW9kYWwgPSBzZXRNb2RhbENvbnRlbnQoZGF0YSk7XG5cbiAgICBGcmVlemVVSS5VbkZyZWV6ZSgpO1xuXG4gICAgY29uc3QgZm9ybSA9IG1vZGFsLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYm9va19mb3JtXCIpO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IFZhbGlkYXRpb24uZ2V0RGVmYXVsdFZhbGlkYXRvcihmb3JtKTtcblxuICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKCkudGhlbihhc3luYyBzdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZhbGlkJykge1xuICAgICAgICAgICAgICAgIFZhbGlkYXRpb24uZGlzYWJsZUJ1dHRvbihlLnN1Ym1pdHRlcik7XG5cbiAgICAgICAgICAgICAgICBsZXQgZmllbGRzID0ge307XG4gICAgICAgICAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXj1maWVsZF9dXCIpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHNbaW5wdXQuaWQucmVwbGFjZSgnZmllbGRfJywgJycpXSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bWVudE1ldGhvZEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0W25hbWU9XFxcIlBheW1lbnRNZXRob2RzXFxcIl06Y2hlY2tlZFwiKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBheW1lbnRNZXRob2QgPSBwYXltZW50TWV0aG9kRWw/LnZhbHVlID8/IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc0luc3RhbmNlSWQgPSBwYXltZW50TWV0aG9kID09PSBcIlBhc3NcIiA/IHBheW1lbnRNZXRob2RFbC5kYXRhc2V0LnBhc3NJbnN0YW5jZUlkIDogbnVsbDtcblxuICAgICAgICAgICAgICAgIGF3YWl0IGF1dGhBcGkucG9zdChcIi9hcGkvYm9va2luZ3NcIiwge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25EYXRlLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIHBheW1lbnRNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIHBhc3NJbnN0YW5jZUlkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyAoe2RhdGF9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBheW1lbnRVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGRhdGEucGF5bWVudFVybDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHVwZGF0ZUJvb2tpbmdzVUkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2V0Tm90aWZpY2F0aW9uQ29va2llKFwiWW91ciBib29raW5nIGhhcyBiZWVuIGNvbmZpcm1lZC5cIilcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tFeGNlcHRpb24oZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGV4KTtcblxuICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25zLnNob3dFcnJvcih7IG1lc3NhZ2U6IGV4LnJlc3BvbnNlLmRhdGEgPz8gXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGNyZWF0aW5nIHlvdXIgYm9va2luZy4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbi5lbmFibGVCdXR0b24oZS5zdWJtaXR0ZXIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59XG5cbmNvbnN0IGhhbmRsZUNhbmNlbEJvb2tpbmcgPSBhc3luYyAoZSwgZWwpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBib29raW5nSWQgPSBlbC5kYXRhc2V0LmJvb2tpbmdJZDtcbiAgICBjb25zdCByZWZ1bmRXaW5kb3cgPSBlbC5kYXRhc2V0LnJlZnVuZFdpbmRvdztcbiAgICBjb25zdCByZWZ1bmRXaW5kb3dDbG9zZXMgPSBuZXcgRGF0ZShlbC5kYXRhc2V0LnJlZnVuZFdpbmRvd0Nsb3Nlcyk7XG4gICAgY29uc3QgYm9va2luZ0Nvc3QgPSBwYXJzZUZsb2F0KGVsLmRhdGFzZXQuYm9va2luZ0Nvc3QgPz8gMCk7XG5cbiAgICBsZXQgbWVzc2FnZSA9IGA8cD5Zb3VyIGJvb2tpbmcgd2lsbCBiZSBjYW5jZWxsZWQuPC9wPmA7XG4gICAgaWYoYm9va2luZ0Nvc3QgPiAwICYmIHJlZnVuZFdpbmRvdyA+IDAgJiYgbmV3IERhdGUoKSA+IHJlZnVuZFdpbmRvd0Nsb3Nlcykge1xuICAgICAgICBtZXNzYWdlICs9IGA8cD5Cb29raW5ncyBjYW5jZWxsZWQgd2l0aGluIDxzdHJvbmc+JHtyZWZ1bmRXaW5kb3d9PC9zdHJvbmc+IGhvdXJzIG9mIHRoZSBzZXNzaW9uIHdpbGwgbm90IGJlIHJlZnVuZGVkLjwvcD5gO1xuICAgIH1cblxuICAgIGNvbnN0IHtpc0NvbmZpcm1lZH0gPSBhd2FpdCBOb3RpZmljYXRpb25zLmNvbmZpcm0uZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkNhbmNlbCBCb29raW5nP1wiLFxuICAgICAgICBodG1sOiBtZXNzYWdlXG4gICAgfSk7XG5cbiAgICBpZiAoaXNDb25maXJtZWQpIHtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgRnJlZXplVUkuRnJlZXplKCk7XG4gICAgICAgICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBhdXRoQXBpLnB1dChgL2FwaS9ib29raW5ncy9jYW5jZWwvJHtib29raW5nSWR9YCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZUJvb2tpbmdzVUkoKTtcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2V0Tm90aWZpY2F0aW9uQ29va2llKFwiWW91ciBib29raW5nIGhhcyBiZWVuIGNhbmNlbGxlZC5cIik7XG5cbiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9IGNhdGNoKGV4KXtcbiAgICAgICAgICAgIHRyYWNrRXhjZXB0aW9uKGV4KTtcbiAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd0Vycm9yKHsgbWVzc2FnZTogXCJUaGVyZSB3YXMgYW4gZXJyb3IgY2FuY2VsbGluZyB5b3VyIGJvb2tpbmcuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIgfSlcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIEZyZWV6ZVVJLlVuRnJlZXplKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vI2VuZHJlZ2lvbiBCb29raW5nXG5cbi8vI3JlZ2lvbiBUZW1wbGF0ZXNcblxuY29uc3QgaW5pdFRlbXBsYXRlcyA9ICgpID0+IHtcbiAgICBIYW5kbGViYXJzSGVscGVycy5pbml0KCk7XG4gICAgSGFuZGxlYmFycy5yZWdpc3RlclBhcnRpYWwoXCJhdmF0YXJcIiwgYXZhdGFyVGVtcGxhdGUpO1xufVxuXG5jb25zdCBhdmF0YXJUZW1wbGF0ZSA9IGBcbiAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zMCBmbGV4LXNocmluay0wIG1lLTUgZC1ub25lIGQtc20tYmxvY2tcIj5cbiAgICAgICAgPGEgaHJlZj1cIi9pbWFnZXMvYXZhdGFyL3t7bWVtYmVySWR9fT93PTgwMFwiIGRhdGEtZnNsaWdodGJveD1cImxpZ2h0Ym94LWJhc2ljXCI+XG4gICAgICAgICAgICA8aW1nIHNyY3NldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIC9pbWFnZXMvYXZhdGFyL3t7bWVtYmVySWR9fT93PTIwMCA0eCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAvaW1hZ2VzL2F2YXRhci97e21lbWJlcklkfX0/dz0xNTAgM3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgL2ltYWdlcy9hdmF0YXIve3ttZW1iZXJJZH19P3c9MTAwIDJ4XCJcbiAgICAgICAgICAgICAgICAgc3JjPVwiL2ltYWdlcy9hdmF0YXIve3ttZW1iZXJJZH19P3c9NTBcIiBhbHQ9XCJ7e25hbWV9fVwiIGNsYXNzPVwidy0zMHB4IHJvdW5kZWRcIj5cbiAgICAgICAgPC9hPlxuICAgIDwvZGl2PmA7XG5cbmNvbnN0IGJvb2tpbmdzVGFibGVUZW1wbGF0ZSA9IGBcbiAgICB7eyNlYWNoIEByb290fX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGUgc2hvdyBhY3RpdmVcIiBpZD1cInRhYl9ib29raW5nc1wiIHJvbGU9XCJ0YWJwYW5lbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gYmctaG92ZXItbGlnaHQgcHgtNSBweS0yXCI+XG4gICAgICAgICAgICAgICAge3s+YXZhdGFyIH19XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHB5LTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWNpcmNsZSBmdy1ib2xkIGZzLTcgc3RhdHVzLXt7bWVtYmVyc2hpcFN0YXR1c319IG1lLTIgdy0xNXB4IGgtMTVweFwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwidG9wXCIgdGl0bGU9XCJNZW1iZXJzaGlwIHN0YXR1cyBpcyB7e21lbWJlcnNoaXBTdGF0dXN9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9J3RleHQtZ3JheS04MDAgdGV4dC1ob3Zlci1wcmltYXJ5JyBocmVmPVwiL21lbWJlcmRldGFpbHMve3ttZW1iZXJJZH19XCIgZGF0YS1icy10b2dnbGU9XCJhamF4LW1vZGFsXCI+e3tuYW1lfX08L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1lLTInPlxuICAgICAgICAgICAgICAgICAgIHt7I2lmRXF1YWxzIGF0dGVuZGVkIGZhbHNlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leGNsYW1hdGlvbi10cmlhbmdsZSB0ZXh0LXdhcm5pbmcgZnMtM1wiIHRpdGxlPVwiRGlkIG5vdCBhdHRlbmQgdGhlIHNlc3Npb25cIiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAge3svaWZFcXVhbHN9fVxuICAgICAgICAgICAgICAgICAgIHt7I2lmRXF1YWxzIGF0dGVuZGVkIHRydWV9fVxuICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNoZWNrIGZzLTEgdGV4dC1zdWNjZXNzXCIgdGl0bGU9XCJBdHRlbmRlZCB0aGUgc2Vzc2lvblwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICB7ey9pZkVxdWFsc319XG4gICAgICAgICAgICAgICAgICAge3sjaWYgaXNGaXJzdFNlc3Npb259fVxuICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXdhcm5pbmdcIj5GaXJzdCBTZXNzaW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgIHt7L2lmfX1cbiAgICAgICAgICAgICAgICAgICAge3sjaWYgcGF5bWVudFJlcXVpcmVkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXIgbGFiZWwtaW5saW5lXCIgZGF0YS1tYXJrLXBhaWQ9J3t7aWR9fSc+Tm90IHBhaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7L2lmfX1cbiAgICAgICAgICAgICAgICAgICB7eyNpZkdyZWF0ZXJUaGFuIDE4IGFnZX19XG4gICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtZGFuZ2VyXCI+VW5kZXIgMTg8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAge3svaWZHcmVhdGVyVGhhbn19XG4gICAgICAgICAgICAgICAgICAge3sjdW5sZXNzT2JqZWN0RW1wdHkgZm9ybVZhbHVlc319XG4gICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvYm9va2luZ25vdGVzL3t7aWR9fVwiIGRhdGEtYnMtdG9nZ2xlPVwiYWpheC1tb2RhbFwiPjxzcGFuIGRhdGEtcGxhY2VtZW50PVwidG9wXCIgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJUaGlzIGJvb2tpbmcgaGFzIG5vdGVzLlwiIGNsYXNzPVwiYmkgYmktam91cm5hbC10ZXh0IGZzLTNcIj48L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgIHt7L3VubGVzc09iamVjdEVtcHR5fX1cbiAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93biBkcm9wZG93bi1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1iZy1saWdodCBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRocmVlLWRvdHMgZnMtM1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5IGZ3LXNlbWlib2xkIHctMjAwcHggcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCIgdGl0bGU9XCJTZW5kIEVtYWlsXCIgZGF0YS1zZW5kLWVtYWlsIGRhdGEtbWVtYmVyLWlkPVwie3ttZW1iZXJJZH19XCIgZGF0YS1tZW1iZXItbmFtZT1cInt7bmFtZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWVudmVsb3BlLWF0IGZzLTNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5kIEVtYWlsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvbWVtYmVyZGV0YWlscy97e21lbWJlcklkfX1cIiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCIgdGl0bGU9XCJWaWV3IERldGFpbHNcIiBkYXRhLWJzLXRvZ2dsZT1cImFqYXgtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktcGVyc29uIGZzLTNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IFByb2ZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9ib29raW5nZGV0YWlscy97e2lkfX1cIiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCIgdGl0bGU9XCJWaWV3IEJvb2tpbmdcIiBkYXRhLWJzLXRvZ2dsZT1cImFqYXgtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY3JlZGl0LWNhcmQtMi1mcm9udCBmcy0zXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBCb29raW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAge3sjaWYgcGF5bWVudFJlcXVpcmVkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiIHRpdGxlPVwiTWFyayBhcyBQYWlkXCIgZGF0YS1tYXJrLXBhaWQ9J3t7aWR9fSc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNhc2gtY29pbiBmcy0zXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyayBhcyBQYWlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7L2lmfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJtZW51LWxpbmsgdGV4dC1kYW5nZXIgcHgtM1wiIHRpdGxlPVwiQ2FuY2VsIEJvb2tpbmdcIiBkYXRhLWNhbmNlbC1ib29raW5nIGRhdGEtYm9va2luZy1pZD1cInt7aWR9fVwiIGRhdGEtbWVtYmVyLWlkPVwie3ttZW1iZXJJZH19XCIgZGF0YS1tZW1iZXItbmFtZT1cInt7bmFtZX19XCIgZGF0YS1pcy1wYWlkPVwie3tpc1BhaWR9fVwiIGRhdGEtY29zdD1cInt7Y29zdH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXBlcnNvbi14IHRleHQtZGFuZ2VyIGZzLTNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWwgQm9va2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIHt7L2VhY2h9fWA7XG5cbmNvbnN0IGNhbmNlbGxlZFRhYmxlVGVtcGxhdGUgPSBgXG4gICAge3sjZWFjaCBAcm9vdH19XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItcGFuZSBmYWRlIHNob3cgYWN0aXZlXCIgaWQ9XCJ0YWJfYm9va2luZ3NcIiByb2xlPVwidGFicGFuZWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGJnLWhvdmVyLWxpZ2h0IHB4LTUgcHktMlwiPlxuICAgICAgICAgICAgICAgIHt7PmF2YXRhciB9fVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBweS0yIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXIgYmFkZ2UtY2lyY2xlIGZ3LWJvbGQgZnMtNyBzdGF0dXMte3ttZW1iZXJzaGlwU3RhdHVzfX0gbWUtMiB3LTE1cHggaC0xNXB4XCIgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJ0b3BcIiB0aXRsZT1cIk1lbWJlcnNoaXAgc3RhdHVzIGlzIHt7bWVtYmVyc2hpcFN0YXR1c319XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ndGV4dC1ncmF5LTgwMCB0ZXh0LWhvdmVyLXByaW1hcnknIGhyZWY9XCIvbWVtYmVyZGV0YWlscy97e21lbWJlcklkfX1cIiBkYXRhLWJzLXRvZ2dsZT1cImFqYXgtbW9kYWxcIj57e25hbWV9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdmcy03Jz5cbiAgICAgICAgICAgICAgICAgICB7e2Zvcm1hdERhdGUgZGF0ZUNhbmNlbGxlZCBcInNob3J0XCJ9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIHt7L2VhY2h9fWA7XG5cbmNvbnN0IGNvYWNoVGFibGVUZW1wbGF0ZSA9IGBcbiAgICB7eyNlYWNoIEByb290fX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGUgc2hvdyBhY3RpdmVcIiBpZD1cInRhYl9ib29raW5nc1wiIHJvbGU9XCJ0YWJwYW5lbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gYmctaG92ZXItbGlnaHQgcHgtNSBweS0yXCI+XG4gICAgICAgICAgICAgICAge3s+YXZhdGFyIH19XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHB5LTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBiYWRnZS1jaXJjbGUgZnctYm9sZCBmcy03IHN0YXR1cy17e21lbWJlcnNoaXBTdGF0dXN9fSBtZS0yIHctMTVweCBoLTE1cHhcIiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiIHRpdGxlPVwiTWVtYmVyc2hpcCBzdGF0dXMgaXMge3ttZW1iZXJzaGlwU3RhdHVzfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSd0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeScgaHJlZj1cIi9tZW1iZXJkZXRhaWxzL3t7bWVtYmVySWR9fVwiIGRhdGEtYnMtdG9nZ2xlPVwiYWpheC1tb2RhbFwiPnt7bmFtZX19PC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93biBkcm9wZG93bi1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1iZy1saWdodCBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRocmVlLWRvdHMgZnMtM1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5IGZ3LXNlbWlib2xkIHctMjAwcHggcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCIgdGl0bGU9XCJTZW5kIEVtYWlsXCIgZGF0YS1zZW5kLWVtYWlsIGRhdGEtbWVtYmVyLWlkPVwie3ttZW1iZXJJZH19XCIgZGF0YS1tZW1iZXItbmFtZT1cInt7bmFtZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWVudmVsb3BlLWF0IGZzLTNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5kIEVtYWlsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvbWVtYmVyZGV0YWlscy97e21lbWJlcklkfX1cIiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCIgdGl0bGU9XCJWaWV3IERldGFpbHNcIiBkYXRhLWJzLXRvZ2dsZT1cImFqYXgtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktcGVyc29uIGZzLTNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IFByb2ZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9ib29raW5nZGV0YWlscy97e2lkfX1cIiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCIgdGl0bGU9XCJWaWV3IEJvb2tpbmdcIiBkYXRhLWJzLXRvZ2dsZT1cImFqYXgtbW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktY3JlZGl0LWNhcmQtMi1mcm9udCBmcy0zXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBCb29raW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiIHRpdGxlPVwiUmVtb3ZlIENvYWNoXCIgZGF0YS1jYW5jZWwtYm9va2luZyBkYXRhLWJvb2tpbmctaWQ9XCJ7e2lkfX1cIiBkYXRhLW1lbWJlci1pZD1cInt7bWVtYmVySWR9fVwiIGRhdGEtbWVtYmVyLW5hbWU9XCJ7e25hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZXJzb24teCBmcy0zXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIENvYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAge3svZWFjaH19YDtcblxuY29uc3Qgd2FpdGluZ0xpc3RUZW1wbGF0ZSA9IGBcbiAgICA8ZGl2IGNsYXNzPVwiYmctZGFyayB0ZXh0LWxpZ2h0IGZ3LWJvbGQgcC0yIG10LTEwXCI+V2FpdGluZyBMaXN0PC9kaXY+YDtcblxuY29uc3QgY2FuY2VsbGVkVGVtcGxhdGUgPSBgXG4gICAgPGRpdiBjbGFzcz1cImJnLWRhcmsgdGV4dC1saWdodCBmdy1ib2xkIHAtMiBtdC0xMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICA8ZGl2PkNhbmNlbGxlZCBCb29raW5nczwvZGl2PlxuICAgICAgIDxkaXY+RGF0ZSBDYW5jZWxsZWQ8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuXG4vLyNlbmRyZWdpb24gVGVtcGxhdGVzXG4iLCJpbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4vbG9jYWxTdG9yYWdlXCI7XG5pbXBvcnQge3JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbmV4cG9ydCBjb25zdCBhcGlWZXJzaW9uID0gXCIyMDIzLTAyLTIxXCI7XG5cbmV4cG9ydCBjb25zdCBhcGkgPSBheGlvcy5jcmVhdGUoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJSZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5cIjogcmVxdWVzdFZlcmlmaWNhdGlvblRva2VuLFxuICAgICAgICBcIngtYXBpLXZlcnNpb25cIjogYXBpVmVyc2lvblxuICAgIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgYXV0aEFwaSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBcIlJlcXVlc3RWZXJpZmljYXRpb25Ub2tlblwiOiByZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAgIFwieC1hcGktdmVyc2lvblwiOiBhcGlWZXJzaW9uXG4gICAgfVxufSk7XG5cbmF1dGhBcGkuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuICAgIGNvbmZpZyA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gTG9jYWxTdG9yYWdlLmdldFRva2VuKCk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfSxcbiAgICBlcnJvciA9PiB7XG4gICAgICAgIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgIH0pO1xuXG5hdXRoQXBpLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IGVycm9yLmNvbmZpZztcbiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmICFvcmlnaW5hbFJlcXVlc3QuX3JldHJ5KSB7XG5cbiAgICAgICAgICAgIG9yaWdpbmFsUmVxdWVzdC5fcmV0cnkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGF4aW9zLnBvc3QoJy9hcGkvdG9rZW4nLCBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycgfSksIHsgaGVhZGVyczoge1wieC1hcGktdmVyc2lvblwiOiBhcGlWZXJzaW9ufX0pXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCAmJiByZXMuZGF0YS5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsU3RvcmFnZS5zZXRUb2tlbihyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlcXVlc3QuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Jlcy5kYXRhLmFjY2Vzc190b2tlbn1gO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXhpb3Mob3JpZ2luYWxSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG4iLCJleHBvcnQgY29uc3QgcmVxdWVzdFZlcmlmaWNhdGlvblRva2VuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cIl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXCJdJyk/LnZhbHVlO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29tbWFzKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplVXJsKHVybCkge1xuICAgIHJldHVybiB1cmwudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvIC9nLCAnLScpXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcdy1dKy9nLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZVN0cmluZyhzdHIsIG51bSkge1xuICAgIGlmIChzdHIubGVuZ3RoIDw9IG51bSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnNsaWNlKDAsIG51bSkgKyAnLi4uJztcbn1cblxuZXhwb3J0IGxldCBwYXRoQW5kUXVlcnkgPSBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaCArIGxvY2F0aW9uLmhhc2g7XG5cbmV4cG9ydCBsZXQgcmV0dXJuVXJsUXVlcnlTdHJpbmcgPSBgcmV0dXJudXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGhBbmRRdWVyeSl9YDtcblxuZXhwb3J0IGNvbnN0IGFyY2hpdmVkQmFkZ2UgPSBcIjxzcGFuIGNsYXNzPVxcXCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XFxcIj5BcmNoaXZlZDwvc3Bhbj5cIjtcblxuZXhwb3J0IGNvbnN0IHNsaWRlVXAgPSAoZWwsIHNwZWVkLCBjYWxsYmFjaykgPT4ge1xuICAgIEtUVXRpbC5zbGlkZVVwKGVsLCBzcGVlZCA/PyAyNTAsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWRlRG93biA9IChlbCwgc3BlZWQsIGNhbGxiYWNrKSA9PiB7XG4gICAgS1RVdGlsLnNsaWRlRG93bihlbCwgc3BlZWQgPz8gMjUwLCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93ID0gKGVsLCBkaXNwbGF5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZWwpIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IChkaXNwbGF5ID8gZGlzcGxheSA6ICdibG9jaycpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhpZGUgPSAoZWwpID0+IHtcbiAgICBpZiAodHlwZW9mIGVsICE9PSAndW5kZWZpbmVkJyAmJiBlbCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVVSUQoKSB7XG4gICAgcmV0dXJuICd4eHh4eHh4eHh4eHg0eHh4eXh4eHh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuICAgICAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRDdWx0dXJlKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImN1cnJlbnRDdWx0dXJlXCIpPy52YWx1ZSA/PyBcImVuLWdiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50Q3VycmVuY3koKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3VycmVudEN1cnJlbmN5XCIpPy52YWx1ZSA/PyBcIsKjXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW5jeVN5bWJvbCgpIHtcbiAgICByZXR1cm4gKDApLnRvTG9jYWxlU3RyaW5nKGN1cnJlbnRDdWx0dXJlKCksIHtcbiAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIGN1cnJlbmN5OiBjdXJyZW50Q3VycmVuY3koKSxcbiAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDBcbiAgICB9KS5yZXBsYWNlKC9cXGQvZywgJycpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KGFtb3VudCkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoY3VycmVudEN1bHR1cmUoKSwge1xuICAgICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgICBjdXJyZW5jeTogY3VycmVudEN1cnJlbmN5KCksXG4gICAgfSkuZm9ybWF0KGFtb3VudCk7XG59XG4iLCJleHBvcnQgY29uc3QgZGVib3VuY2UgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgbGV0IHRpbWVyID0gMDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfSwgbXMgfHwgMCk7XG4gICAgfTtcbn07XG5cbiIsImltcG9ydCB7Tm90aWZpY2F0aW9uc30gZnJvbSBcIi4vbm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHthdXRoQXBpLCBhcGlWZXJzaW9ufSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7RnJlZXplVUl9IGZyb20gXCIuL2ZyZWV6ZS11aVwiO1xuaW1wb3J0IHtyZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW59IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHttZW1iZXJTZWFyY2hUYWdpZnl9IGZyb20gXCIuL3RhZ2lmeVwiO1xuaW1wb3J0IHtHdWlkfSBmcm9tIFwiLi9ndWlkXCI7XG5pbXBvcnQge3RyYWNrRXhjZXB0aW9ufSBmcm9tIFwiLi9lcnJvcnNcIjtcblxubGV0IGVkaXRvciwgc3ViamVjdEVsLCB0YWdpZnksIGF0dGFjaG1lbnREcm9wem9uZSwgaWQsIG1vZGFsO1xuZXhwb3J0IGNvbnN0IG1heEZpbGVTaXplID0gNTsgLy8gTWF4aW11bSBzaXplIGluIE1CXG5leHBvcnQgY29uc3QgbWF4QXR0YWNobWVudHMgPSA1OyAvLyBNYXhpbXVtIG51bWJlciBvZiBhdHRhY2htZW50cyBhbGxvd2VkIHBlciBlbWFpbFxuXG5leHBvcnQgY29uc3QgcGFyYWxsZWxVcGxvYWRzID0gNDtcblxuY29uc3QgRW1haWxzID0gZnVuY3Rpb24gKCkge1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1zZW5kLWVtYWlsXVwiKVxuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVtYmVySWQgPSB0YXJnZXQuZGF0YXNldC5tZW1iZXJJZDtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGFyZ2V0LmRhdGFzZXQubWVtYmVyTmFtZTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvc2VFbWFpbChbe3ZhbHVlOiBtZW1iZXJJZCwgdGV4dDogbmFtZX1dKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufSgpO1xuXG5leHBvcnQgY29uc3QgaW5pdERyb3B6b25lID0gKHNlbGVjdG9yLCBpZCkgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBjb25zdCBwcmV2aWV3Tm9kZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmRyb3B6b25lLWl0ZW1cIik7XG4gICAgcHJldmlld05vZGUuaWQgPSBcIlwiO1xuICAgIGNvbnN0IHByZXZpZXdUZW1wbGF0ZSA9IHByZXZpZXdOb2RlLnBhcmVudE5vZGUuaW5uZXJIVE1MO1xuICAgIHByZXZpZXdOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocHJldmlld05vZGUpO1xuXG4gICAgY29uc3QgZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoc2VsZWN0b3IsIHtcbiAgICAgICAgdXJsOiBgL2FwaS9lbWFpbHMvYXR0YWNobWVudHMvJHtpZH1gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBSZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46IHJlcXVlc3RWZXJpZmljYXRpb25Ub2tlbixcbiAgICAgICAgICAgIFwieC1hcGktdmVyc2lvblwiOiBhcGlWZXJzaW9uXG4gICAgICAgIH0sXG4gICAgICAgIHByZXZpZXdUZW1wbGF0ZTogcHJldmlld1RlbXBsYXRlLFxuICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IHBhcmFsbGVsVXBsb2FkcyxcbiAgICAgICAgbWF4RmlsZXNpemU6IG1heEZpbGVTaXplLCAvLyBNYXggZmlsZXNpemUgaW4gTUJcbiAgICAgICAgbWF4RmlsZXM6IG1heEF0dGFjaG1lbnRzLFxuICAgICAgICBhdXRvUXVldWU6IHRydWUsXG4gICAgICAgIHByZXZpZXdzQ29udGFpbmVyOiBzZWxlY3RvciArIFwiIC5kcm9wem9uZS1pdGVtc1wiLFxuICAgICAgICBjbGlja2FibGU6IFwiLmRyb3B6b25lLXNlbGVjdFwiLCAvLyBEZWZpbmUgdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBjbGljayB0cmlnZ2VyIHRvIHNlbGVjdCBmaWxlcy5cbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwiYWRkZWRmaWxlXCIsIGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgIGNvbnN0IGRyb3B6b25lSXRlbXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmRyb3B6b25lLWl0ZW0nKTtcbiAgICAgICAgZHJvcHpvbmVJdGVtcy5mb3JFYWNoKGRyb3B6b25lSXRlbSA9PiB7XG4gICAgICAgICAgICBkcm9wem9uZUl0ZW0uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwidG90YWx1cGxvYWRwcm9ncmVzc1wiLCBmdW5jdGlvbiAocHJvZ3Jlc3MpIHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NCYXJzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcm9ncmVzcy1iYXInKTtcbiAgICAgICAgcHJvZ3Jlc3NCYXJzLmZvckVhY2gocHJvZ3Jlc3NCYXIgPT4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwic2VuZGluZ1wiLCBmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAvLyBTaG93IHRoZSB0b3RhbCBwcm9ncmVzcyBiYXIgd2hlbiB1cGxvYWQgc3RhcnRzXG4gICAgICAgIGNvbnN0IHByb2dyZXNzQmFycyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcucHJvZ3Jlc3MtYmFyJyk7XG4gICAgICAgIHByb2dyZXNzQmFycy5mb3JFYWNoKHByb2dyZXNzQmFyID0+IHtcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0eWxlLm9wYWNpdHkgPSBcIjFcIjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkcm9wem9uZS5vbihcImNvbXBsZXRlXCIsIGZ1bmN0aW9uIChwcm9ncmVzcykge1xuICAgICAgICBjb25zdCBwcm9ncmVzc0JhcnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmR6LWNvbXBsZXRlJyk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9ncmVzc0JhcnMuZm9yRWFjaChwcm9ncmVzc0JhciA9PiB7XG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIucXVlcnlTZWxlY3RvcignLnByb2dyZXNzLWJhcicpLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MnKS5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICB9KTtcblxuICAgIGRyb3B6b25lLm9uKFwicmVtb3ZlZGZpbGVcIiwgYXN5bmMgZmlsZSA9PiB7XG4gICAgICAgIGF3YWl0IHJlbW92ZUF0dGFjaG1lbnQoaWQsIGZpbGUpO1xuICAgIH0pO1xuXG4gICAgaWYoY29udGFpbmVyLmRhdGFzZXQuYXR0YWNobWVudHMpIHtcbiAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBKU09OLnBhcnNlKGNvbnRhaW5lci5kYXRhc2V0LmF0dGFjaG1lbnRzKTtcblxuICAgICAgICBhdHRhY2htZW50cz8uZm9yRWFjaChhdHRhY2htZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tGaWxlID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGF0dGFjaG1lbnQubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBhdHRhY2htZW50LnNpemUsXG4gICAgICAgICAgICAgICAgdHlwZTogYXR0YWNobWVudC5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBhY2NlcHRlZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRyb3B6b25lLmZpbGVzLnB1c2gobW9ja0ZpbGUpO1xuICAgICAgICAgICAgZHJvcHpvbmUuZW1pdChcImFkZGVkZmlsZVwiLCBtb2NrRmlsZSk7XG4gICAgICAgICAgICBkcm9wem9uZS5lbWl0KFwiY29tcGxldGVcIiwgbW9ja0ZpbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJvcHpvbmU7XG59XG5cbmV4cG9ydCBjb25zdCBjb21wb3NlRW1haWwgPSBhc3luYyAodG8sIHN1YmplY3QsIGJvZHkpID0+IHtcbiAgICBpZCA9IEd1aWQubmV3R3VpZCgpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21vZGFsLXBsYWNlaG9sZGVyXCIpO1xuICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChcIi9jb21wb3NlLWVtYWlsXCIpO1xuXG4gICAgY29uc3QgbW9kYWxIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhkYXRhLCAndGV4dC9odG1sJyk7XG4gICAgcGxhY2Vob2xkZXJFbC5hcHBlbmQoLi4ubW9kYWxIdG1sLmJvZHkuY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZGFsRWwgPSBwbGFjZWhvbGRlckVsLnF1ZXJ5U2VsZWN0b3IoXCIubW9kYWxcIik7XG4gICAgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsRWwpO1xuXG4gICAgY29uc3QgcmVjaXBpZW50c0VsID0gcGxhY2Vob2xkZXJFbC5xdWVyeVNlbGVjdG9yKFwiI1RvXCIpO1xuICAgIHN1YmplY3RFbCA9IHBsYWNlaG9sZGVyRWwucXVlcnlTZWxlY3RvcihcIiNTdWJqZWN0XCIpO1xuXG4gICAgc3ViamVjdEVsLnZhbHVlID0gc3ViamVjdCA/PyBcIlwiO1xuXG4gICAgaW5pdFRhZ2lmeShyZWNpcGllbnRzRWwsIHRvKTtcbiAgICBpbml0RWRpdG9yKG1vZGFsRWwsIFwiI2VkaXRvclwiKVxuICAgIGF0dGFjaG1lbnREcm9wem9uZSA9IGluaXREcm9wem9uZShcIiNhdHRhY2htZW50X2Ryb3B6b25lXCIsIGlkKTtcblxuICAgIHBsYWNlaG9sZGVyRWwucXVlcnlTZWxlY3RvcihcIiNzZW5kLWVtYWlsXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgTm90aWZpY2F0aW9ucy5jb25maXJtLmZpcmUoeyB0ZXh0OiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzZW5kIHRoZSBlbWFpbD9cIiB9KVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNDb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2F2ZUVtYWlsKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcGxhY2Vob2xkZXJFbC5xdWVyeVNlbGVjdG9yKFwiI2FkdmFuY2VkX2VkaXRvclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhd2FpdCBzYXZlRW1haWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgbW9kYWwuc2hvdygpO1xuXG4gICAgbW9kYWxFbC5hZGRFdmVudExpc3RlbmVyKCdoaWRlLmJzLm1vZGFsJywgZSA9PiB7XG4gICAgICAgIHBsYWNlaG9sZGVyRWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGFnaWZ5ID0gbnVsbDtcbiAgICAgICAgZWRpdG9yID0gbnVsbDtcbiAgICB9KTtcbn1cblxuLy8jcmVnaW9uIEVkaXRvclxuY29uc3QgaW5pdEVkaXRvciA9IChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XG5cbiAgICAvLyBJbml0IGVkaXRvclxuICAgIGNvbnN0IGVkaXRvckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcbiAgICBlZGl0b3IgPSBDS0VkaXRvci5DbGFzc2ljRWRpdG9yXG4gICAgICAgIC5jcmVhdGUoZWRpdG9yRWwsIHtcbiAgICAgICAgICAgICAgICB0b29sYmFyOiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnaGVhZGluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnfCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYm9sZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaXRhbGljJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbmRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ291dGRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaWdubWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnfCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGluaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYnVsbGV0ZWRMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdudW1iZXJlZExpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Jsb2NrUXVvdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2hvcml6b250YWxMaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbnNlcnRUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAudGhlbihlID0+IHtcbiAgICAgICAgICAgIGVkaXRvciA9IGU7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSk7XG59O1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIFRhZ2lmeVxuXG5jb25zdCBpbml0VGFnaWZ5ID0gKGVsLCB0bykgPT4ge1xuXG4gICAgdGFnaWZ5ID0gbWVtYmVyU2VhcmNoVGFnaWZ5KFwiI1RvXCIsIHRydWUpO1xuICAgIHRhZ2lmeS53aGl0ZWxpc3QgPSB0bztcbiAgICB0YWdpZnkuYWRkVGFncyh0byk7XG59O1xuXG4vLyNlbmRyZWdpb25cblxuY29uc3Qgc2F2ZUVtYWlsID0gYXN5bmMgKHNlbmRFbWFpbCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBlZGl0b3IuZ2V0RGF0YSgpO1xuICAgIGNvbnN0IHN1YmplY3QgPSBzdWJqZWN0RWwudmFsdWU7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRhZ2lmeS52YWx1ZS5tYXAoeCA9PiAoe3ZhbHVlOiB4LnZhbHVlLCB0ZXh0OiB4LnRleHR9KSk7XG5cbiAgICBpZihzZW5kRW1haWwgJiYgcmVjaXBpZW50cy5sZW5ndGggPD0gMCl7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHBhcnRpY2lwYW50IGJlZm9yZSBzZW5kaW5nLlwiIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlbmRFbWFpbCAmJiBzdWJqZWN0Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHN1YmplY3QuXCIgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihzZW5kRW1haWwgJiYgYm9keS5sZW5ndGggPD0gMSl7XG4gICAgICAgIE5vdGlmaWNhdGlvbnMuc2hvd1dhcm5pbmcoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIG1lc3NhZ2UgYm9keS5cIiB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgICAgaWQsXG4gICAgICAgIHN1YmplY3QsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgIHN0YXR1czogc2VuZEVtYWlsID8gXCJRdWV1ZWRcIiA6IFwiRHJhZnRcIlxuICAgIH07XG5cbiAgICBGcmVlemVVSS5GcmVlemUoKTtcblxuICAgIHRyeXtcbiAgICAgICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXV0aEFwaS5wdXQoYC9hcGkvZW1haWxzLyR7aWR9YCwgdmFsdWVzKTtcblxuICAgICAgICBpZihzZW5kRW1haWwpe1xuICAgICAgICAgICAgRnJlZXplVUkuVW5GcmVlemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYC9hZG1pbi9lbWFpbHMvY29tcG9zZS8ke2lkfWA7XG4gICAgICAgIH1cbiAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93U3VjY2Vzcyh7IG1lc3NhZ2U6IFwiWW91ciBlbWFpbCBoYXMgYmVlbiBzZW50LlwiIH0pO1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdHJhY2tFeGNlcHRpb24oZXJyKTtcbiAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhIHByb2JsZW0gc2F2aW5nIHRoZSBlbWFpbC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIiB9KTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIEZyZWV6ZVVJLlVuRnJlZXplKCk7XG4gICAgfVxufVxuXG5jb25zdCByZW1vdmVBdHRhY2htZW50ID0gYXN5bmMgKGlkLCBmaWxlKSA9PiB7XG5cbiAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBhdXRoQXBpLmRlbGV0ZShgL2FwaS9lbWFpbHMvYXR0YWNobWVudHMvJHtpZH1gLCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWVcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coZGF0YSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVtYWlscztcbiIsImV4cG9ydCBjb25zdCB0cmFja0V4Y2VwdGlvbiA9IChlcnIpID0+IHtcbiAgICBpZiAodHlwZW9mIGFwcEluc2lnaHRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhcHBJbnNpZ2h0cy50cmFja0V4Y2VwdGlvbihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgfVxufVxuIiwi77u/ZXhwb3J0IGNsYXNzIEZyZWV6ZVVJIHtcblxuICAgIHN0YXRpYyBpc0Zyb3plbiA9IGZhbHNlO1xuXG4gICAgc3RhdGljIEZyZWV6ZSA9IChvcHRpb25zKSA9PiB7XG5cbiAgICAgICAgaWYodGhpcy5pc0Zyb3plbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBmcmVlemVIdG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGZyZWV6ZUh0bWwuY2xhc3NMaXN0LmFkZCgnZnJlZXplLXVpJyk7XG5cbiAgICAgICAgbGV0IHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucz8uc2VsZWN0b3IpIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGZyZWV6ZUh0bWwuc2V0QXR0cmlidXRlKCdkYXRhLXRleHQnLCBvcHRpb25zPy50ZXh0IHx8ICdQbGVhc2Ugd2FpdCcpO1xuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zPy5zZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGZyZWV6ZUh0bWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICB0aGlzLmlzRnJvemVuID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChmcmVlemVIdG1sKTtcbiAgICB9O1xuXG4gICAgc3RhdGljIFVuRnJlZXplID0gKCkgPT4ge1xuICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mcmVlemUtdWknKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtdW5mcmVlemluZycpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy11bmZyZWV6aW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Zyb3plbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiZXhwb3J0IGNsYXNzIEd1aWQge1xuICAgIHN0YXRpYyBuZXdHdWlkKCkge1xuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICBsZXQgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJcbmV4cG9ydCBjb25zdCBub1Jlc3VsdHNUZW1wbGF0ZSA9IChtZXNzYWdlLCBjbGFzc0xpc3QpID0+IHtcbiAgICByZXR1cm4gXCJcIiArXG4gICAgICAgIFwiPGRpdiBjbGFzcz1cXFwiYWxlcnQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXFxcIj5cXG5cIiArXG4gICAgICAgIFwiICAgPGkgY2xhc3M9XFxcImJpIGJpLWluZm8tY2lyY2xlIGZzLTRoeCBtZS01XFxcIj48L2k+XFxuXCIgK1xuICAgICAgICBcIiAgIDxkaXYgY2xhc3M9XFxcImQtZmxleCBmbGV4LWNvbHVtblxcXCI+XFxuXCIgK1xuICAgICAgICBcIiAgICAgICA8c3BhbiBjbGFzcz1cXFwiZnMtNlxcXCI+XCIgKyBtZXNzYWdlICsgXCI8L3NwYW4+XFxuXCIgK1xuICAgICAgICBcIiAgIDwvZGl2PlxcblwiICtcbiAgICAgICAgXCI8L2Rpdj5cXG5cIjtcbn1cblxuZXhwb3J0IGNsYXNzIEhhbmRsZWJhcnNIZWxwZXJzIHtcbiAgICBzdGF0aWMgaW5pdCgpe1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0cyA9IHtcbiAgICAgICAgICAgIHNob3J0OiBcIkREIE1NTSBZWSBAIEhIOm1tXCIsXG4gICAgICAgICAgICBsb25nOiBcImRkZGQgREQuTU0uWVlZWSBISDptbVwiXG4gICAgICAgIH07XG5cbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignaWZFcXVhbHMnLCBmdW5jdGlvbiAodmFsdWUxLCB2YWx1ZTIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignaWZOb3RFcXVhbHMnLCBmdW5jdGlvbiAodmFsdWUxLCB2YWx1ZTIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZTEgPT09IHZhbHVlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mbih0aGlzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcihcImZvcm1hdERhdGVcIiwgZnVuY3Rpb24gKGRhdGV0aW1lLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmIChtb21lbnQpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBkYXRlRm9ybWF0c1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGV0aW1lKS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKFwiZm9ybWF0Q3VycmVuY3lcIiwgZnVuY3Rpb24gKHZhbHVlKSB7XG5cbiAgICAgICAgICAgIGlmKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGlmKE51bWJlci5pc05hTih2YWx1ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKS50b0ZpeGVkKDIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyKFwiaWZHcmVhdGVyVGhhblwiLCBmdW5jdGlvbiAodmFsdWUxLCB2YWx1ZTIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZTEgPiB2YWx1ZTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mbih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoXCJ1bmxlc3NPYmplY3RFbXB0eVwiLCBmdW5jdGlvbiAob2JqLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRoZSA9IHRoaXM7XG4gICAgICAgICAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGUpO1xuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmKG9ialtpdGVtXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGhhc1ZhbHVlID8gb3B0aW9ucy5mbih0aGUpIDogb3B0aW9ucy5pbnZlcnNlKHRoZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfTtcbn1cbiIsIi8vIExvY2FsU3RvcmFnZVNlcnZpY2UuanNcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuXG4gICAgc3RhdGljIHNldFRva2VuKHRva2VuT2JqKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidG9rZW5cIiwgdG9rZW5PYmouYWNjZXNzX3Rva2VuKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJleHBpcmVzXCIsIHRva2VuT2JqLmV4cGlyZXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidG9rZW5cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGNsZWFyVG9rZW4oKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidG9rZW5cIik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiZXhwaXJhdGlvblwiKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge0ZyZWV6ZVVJfSBmcm9tIFwiLi9mcmVlemUtdWlcIjtcbmltcG9ydCB7dHJhY2tFeGNlcHRpb259IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHtOb3RpZmljYXRpb25zfSBmcm9tIFwiLi9ub3RpZmljYXRpb25zXCI7XG5cbmV4cG9ydCBjb25zdCBzZXRNb2RhbENvbnRlbnQgPSAoaHRtbCkgPT4ge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbW9kYWwtcGxhY2Vob2xkZXJcIik7XG4gICAgcGxhY2Vob2xkZXJFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7IC8vIENsZWFyIGp1c3QgaW4gY2FzZSBpdCBoYXMgYW4gb2xkIG1vZGFsIGluIGl0XG5cbiAgICBjb25zdCBtb2RhbEh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICBwbGFjZWhvbGRlckVsZW1lbnQuYXBwZW5kKC4uLm1vZGFsSHRtbC5ib2R5LmNoaWxkcmVuKTtcbiAgICBjb25zdCBtb2RhbEVsID0gcGxhY2Vob2xkZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubW9kYWxcIik7XG5cbiAgICBjb25zdCBtb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwobW9kYWxFbCk7XG4gICAgbW9kYWwuc2hvdygpO1xuXG4gICAgcmV0dXJuIG1vZGFsO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0QWpheE1vZGFsQ29udGVudCA9IGFzeW5jIHVybCA9PiB7XG5cbiAgICB0cnkge1xuICAgICAgICBGcmVlemVVSS5GcmVlemUoKTtcblxuICAgICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQodXJsKTtcblxuICAgICAgICByZXR1cm4gc2V0TW9kYWxDb250ZW50KGRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRyYWNrRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgTm90aWZpY2F0aW9ucy5zaG93RXJyb3IoeyBtZXNzYWdlOiBcIlRoZXJlIHdhcyBhIHByb2JsZW0gb3BlbmluZyB0aGUgbW9kYWwuXCIgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgRnJlZXplVUkuVW5GcmVlemUoKTtcbiAgICB9XG59XG5cbmNvbnN0IE1vZGFscyA9IGZ1bmN0aW9uICgpIHtcblxuICAgIGNvbnN0IGhhbmRsZU1vZGFsTGF1bmNoQ2xpY2sgPSBhc3luYyBlbCA9PntcbiAgICAgICAgY29uc3QgdXJsID0gZWwuaHJlZjtcblxuICAgICAgICBhd2FpdCBzZXRBamF4TW9kYWxDb250ZW50KHVybCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8vIFB1YmxpYyBmdW5jdGlvbnNcbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0LmNsb3Nlc3QoXCJhW2RhdGEtYnMtdG9nZ2xlPVxcXCJhamF4LW1vZGFsXFxcIl1cIilcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZU1vZGFsTGF1bmNoQ2xpY2sodGFyZ2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufSgpO1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbHM7XG4iLCLvu79leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9ucyB7XG5cbiAgICBzdGF0aWMgbm90aWZpY2F0aW9uQ29va2llTmFtZSA9IFwiLmNsdWJwYWwudG9hc3RcIjtcbiAgICBzdGF0aWMgYWxlcnRDb29raWVOYW1lID0gXCIuY2x1YnBhbC5hbGVydFwiO1xuXG4gICAgc3RhdGljIGluaXQoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25Db29raWUgPSBOb3RpZmljYXRpb25zLmdldENvb2tpZShOb3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbkNvb2tpZU5hbWUpO1xuICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbkNvb2tpZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IE5vdGlmaWNhdGlvbnMucGFyc2VRdWVyeShub3RpZmljYXRpb25Db29raWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbXCJtZXNzYWdlXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlKHttZXNzYWdlOiB2YWx1ZXNbXCJtZXNzYWdlXCJdLCB0eXBlOiB2YWx1ZXNbXCJ0eXBlXCJdfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5zZXRDb29raWUoTm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb25Db29raWVOYW1lLCBcIlwiLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhbGVydENvb2tpZSA9IE5vdGlmaWNhdGlvbnMuZ2V0Q29va2llKE5vdGlmaWNhdGlvbnMuYWxlcnRDb29raWVOYW1lKTtcbiAgICAgICAgICAgIGlmIChhbGVydENvb2tpZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IE5vdGlmaWNhdGlvbnMucGFyc2VRdWVyeShhbGVydENvb2tpZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlc1tcIm1lc3NhZ2VcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9ucy5hbGVydC5maXJlKHsgdGl0bGU6IHZhbHVlc1tcInRpdGxlXCJdLCBodG1sOiB2YWx1ZXNbXCJtZXNzYWdlXCJdfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbnMuc2V0Q29va2llKE5vdGlmaWNhdGlvbnMuYWxlcnRDb29raWVOYW1lLCBcIlwiLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXROb3RpZmljYXRpb25Db29raWUodGl0bGUpIHtcbiAgICAgICAgTm90aWZpY2F0aW9ucy5zZXRDb29raWUoYnRvYShgbWVzc2FnZT0ke3RpdGxlfSZ0eXBlPXN1Y2Nlc3NgKSwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gVGhlIG1lc3NhZ2UgZm9yIHRoZSBub3RpZmljYXRpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudGl0bGVdIC0gQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHRoZSBub3RpZmljYXRpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGltZW91dF0gLSBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc2hvdyB0aGUgbm90aWZpY2F0aW9uLiBTZXQgdG8gMCB0byBub3QgYXV0by1oaWRlLlxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93U3VjY2VzcyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9IFwic3VjY2Vzc1wiO1xuXG4gICAgICAgIHNob3dNZXNzYWdlKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWVzc2FnZSAtIFRoZSBtZXNzYWdlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnRpdGxlXSAtIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXRdIC0gVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNob3cgdGhlIG5vdGlmaWNhdGlvbi4gU2V0IHRvIDAgdG8gbm90IGF1dG8taGlkZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0Vycm9yID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gXCJlcnJvclwiO1xuXG4gICAgICAgIHNob3dNZXNzYWdlKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWVzc2FnZSAtIFRoZSBtZXNzYWdlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnRpdGxlXSAtIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXRdIC0gVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHNob3cgdGhlIG5vdGlmaWNhdGlvbi4gU2V0IHRvIDAgdG8gbm90IGF1dG8taGlkZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd1dhcm5pbmcgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBcIndhcm5pbmdcIjtcblxuICAgICAgICBzaG93TWVzc2FnZShvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aXRsZV0gLSBBbiBvcHRpb25hbCB0aXRsZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0XSAtIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzaG93IHRoZSBub3RpZmljYXRpb24uIFNldCB0byAwIHRvIG5vdCBhdXRvLWhpZGUuXG4gICAgICovXG4gICAgc3RhdGljIHNob3dJbmZvID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gXCJ3YXJuaW5nXCI7XG5cbiAgICAgICAgc2hvd01lc3NhZ2Uob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbmZpcm0gPSBTd2FsPy5taXhpbih7XG4gICAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxuICAgICAgICBzaG93RGVueUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgIGN1c3RvbUNsYXNzOiB7XG4gICAgICAgICAgICBhY3Rpb25zOiBcImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiLFxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJweC0xMCBidG4gYnRuLXByaW1hcnkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiLFxuICAgICAgICAgICAgZGVueUJ1dHRvbjogXCJweC0xMCBidG4gYnRuLWRhbmdlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIsXG4gICAgICAgICAgICBpbnB1dDogJydcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZSBmcy0zXCI+PC9pPiBZZXMnLFxuICAgICAgICBkZW55QnV0dG9uVGV4dDogJzxpIGNsYXNzPVwiYmkgYmkteC1jaXJjbGUgZnMtM1wiPjwvaT4gTm8nLFxuICAgIH0pO1xuXG4gICAgc3RhdGljIGFsZXJ0ID0gU3dhbC5taXhpbih7XG4gICAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxuICAgICAgICBzaG93RGVueUJ1dHRvbjogZmFsc2UsXG4gICAgICAgIHJldmVyc2VCdXR0b25zOiBmYWxzZSxcbiAgICAgICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDBcIixcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwicHgtMTAgYnRuIGJ0bi1saWdodC1wcmltYXJ5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIixcbiAgICAgICAgICAgIGlucHV0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ09LISdcbiAgICB9KTtcblxuICAgIHN0YXRpYyBzZXRDb29raWUoY29va2llTmFtZSwgdmFsdWUsIG1pbnV0ZXMpIHtcbiAgICAgICAgbGV0IGV4cGlyZXMgPSBcIlwiO1xuICAgICAgICBpZiAobWludXRlcykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAobWludXRlcyAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llTmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Q29va2llKGNvb2tpZU5hbWUpIHtcbiAgICAgICAgbGV0IG5hbWVFUSA9IGNvb2tpZU5hbWUgKyBcIj1cIjtcbiAgICAgICAgbGV0IGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjID0gY2FbaV07XG4gICAgICAgICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT09ICcgJykgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLCBjLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhdG9iKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZVF1ZXJ5KHF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGxldCBxdWVyeSA9IHt9O1xuICAgICAgICBsZXQgcGFpcnMgPSAocXVlcnlTdHJpbmdbMF0gPT09ICc/JyA/IHF1ZXJ5U3RyaW5nLnN1YnN0cigxKSA6IHF1ZXJ5U3RyaW5nKS5zcGxpdCgnJicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcGFpciA9IHBhaXJzW2ldLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBxdWVyeVtkZWNvZGVVUklDb21wb25lbnQocGFpclswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG59XG5cbmxldCBjb250YWluZXI7XG5cbmNvbnN0IGFsZXJ0VGVtcGxhdGUgPSBIYW5kbGViYXJzLmNvbXBpbGUoYFxuICAgIDxkaXY+XG4gICAgICAgIHt7I2lmIHRpdGxlfX1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZzLTUgZnctYm9sZCBtYi0yXCI+e3t0aXRsZX19PC9kaXY+XG4gICAgICAgIHt7L2lmfX1cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZnMtNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XG4gICAgICAgICAgICAgICAge3ttZXNzYWdlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJjbG9zZVwiIGhyZWY9XCIjXCI+PGkgY2xhc3M9XCJiaS14IGZzLTJ4IHRleHQtZ3JheS01MDBcIj48L2k+PC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj48ZGl2IGNsYXNzPVwidGltZXItcHJvZ3Jlc3MtYmFyIHctNTBcIjwvZGl2PlxuICAgIDwvZGl2PlxuYCk7XG5cbmNvbnN0IGVuc3VyZUNvbnRhaW5lciA9ICgpID0+IHtcbiAgICBpZihjb250YWluZXIpXG4gICAgICAgIHJldHVybiBjb250YWluZXI7XG5cbiAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGNvbnRhaW5lci5pZCA9IFwic25hY2tiYXJcIjtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBmb3IgdGhlIG5vdGlmaWNhdGlvblxuICogQHBhcmFtIHsoXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZXJyb3JcIiB8IFwiaW5mb1wiKX0gb3B0aW9ucy50eXBlIC0gVGhlIHR5cGUgb2Ygbm90aWZpY2F0aW9uIHRvIGRpc3BsYXkuIE9wdGlvbnMgYXJlIHN1Y2Nlc3MsIHdhcm5pbmcsIGVycm9yLCBpbmZvLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnRpdGxlXSAtIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB0aGUgbm90aWZpY2F0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudGltZW91dF0gLSBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc2hvdyB0aGUgbm90aWZpY2F0aW9uLiBTZXQgdG8gMCB0byBub3QgYXV0by1oaWRlLlxuICovXG5cbmNvbnN0IHNob3dNZXNzYWdlID0gKG9wdGlvbnMpID0+IHtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQgPz8gNTAwMDtcblxuICAgIGNvbnN0IGFsZXJ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBhbGVydC5pbm5lckhUTUwgPSBhbGVydFRlbXBsYXRlKG9wdGlvbnMpO1xuXG4gICAgZW5zdXJlQ29udGFpbmVyKCkuYXBwZW5kQ2hpbGQoYWxlcnQpO1xuICAgIGFsZXJ0LmNsYXNzTmFtZSA9IGBzbmFjayAke29wdGlvbnMudHlwZX0gc2hvd2A7XG5cbiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGFsZXJ0LnF1ZXJ5U2VsZWN0b3IoXCJhLmNsb3NlXCIpO1xuICAgIGNsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaGlkZUFsZXJ0KCk7XG4gICAgfSk7XG5cbiAgICBpZih0aW1lb3V0ID4gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KGhpZGVBbGVydCwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGlkZUFsZXJ0KCkge1xuICAgICAgICBhbGVydC5yZW1vdmUoKTtcbiAgICB9XG59O1xuXG4iLCJjb25zdCBUYWJzID0gKGVsKSA9PiB7XG5cbiAgICBpZighZWwpe1xuICAgICAgICBjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBUYWJzIHdpdGhvdXQgYW4gZWxlbWVudC5cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1vcmVEcm9wZG93biA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJsaS5kcm9wZG93blwiKTtcbiAgICBjb25zdCBtb3JlTWVudSA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJsaS5kcm9wZG93biAuZHJvcGRvd24tbWVudVwiKTtcbiAgICBjb25zdCB0YWJzID0gZWwucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IGxpOm5vdCguZHJvcGRvd24pXCIpO1xuICAgIGNvbnN0IG1heFdpZHRoID0gZ2V0TWF4V2lkdGgoZWwpO1xuXG4gICAgZm9yKGxldCBpID0gdGFicy5sZW5ndGggLTE7IGkgPj0gMDsgaS0tKXtcbiAgICAgICAgY29uc3QgdGFiID0gdGFic1tpXTtcblxuICAgICAgICBpZihlbC5zY3JvbGxXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgICAgICB0YWIuY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcbiAgICAgICAgICAgIG1vcmVEcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW9yZU1lbnUuaW5uZXJIVE1MID0gXCJcIjtcbiAgICBjb25zdCBoaWRkZW5JdGVtcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaS5kLW5vbmU6bm90KC5kcm9wZG93bilcIik7XG4gICAgaGlkZGVuSXRlbXMuZm9yRWFjaChoaWRkZW5JdGVtID0+IHtcblxuICAgICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICAgICAgY29uc3QgbGluayA9IGhpZGRlbkl0ZW0ucXVlcnlTZWxlY3RvcihcImFcIik7XG4gICAgICAgIGxpbmsuY2xhc3NOYW1lID0gXCJkcm9wZG93bi1pdGVtIHRleHQtZ3JheS01MDAgZnctYm9sZCBmcy01IHAtNVwiO1xuXG4gICAgICAgIGxpLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBtb3JlTWVudS5hcHBlbmQobGkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNYXhXaWR0aChlbCkge1xuXG4gICAgY29uc3QgcGFyZW50UHJvcGVydGllcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VJbnQocGFyZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1sZWZ0XCIpKTtcbiAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUludChwYXJlbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXJpZ2h0XCIpKTtcblxuICAgIHJldHVybiBlbC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYnNcbiIsImltcG9ydCB7ZGVib3VuY2V9IGZyb20gXCIuL2RlYm91bmNlXCI7XG5cbmV4cG9ydCBjb25zdCBtZW1iZXJTZWFyY2hUYWdpZnkgPSAoc2VsZWN0b3IsIGVuYWJsZVNtYXJ0R3JvdXBzLCBvcHRpb25zKSA9PiB7XG5cbiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEEgdGFnaWZ5IGluc3RhbmNlIGNhbm5vdCBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIG5vIGVsZW1lbnQgd2l0aCB0aGUgc2VsZWN0b3IgXCIke3NlbGVjdG9yfVwiIGNvdWxkIGJlIGZvdW5kLmApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHdoaXRlbGlzdCA9IFtdO1xuICAgIGlmIChpbnB1dC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHdoaXRlbGlzdCA9IEpTT04ucGFyc2UoaW5wdXQudmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICB0YWdUZXh0UHJvcDogXCJ0ZXh0XCIsXG4gICAgICAgIGVuZm9yY2VXaGl0ZWxpc3Q6IHRydWUsXG4gICAgICAgIHdoaXRlbGlzdDogd2hpdGVsaXN0LFxuICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgZHJvcGRvd246IHtcbiAgICAgICAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVkOiAxLFxuICAgICAgICAgICAgY2xhc3NuYW1lOiBcInVzZXJzLWxpc3RcIixcbiAgICAgICAgICAgIHNlYXJjaEtleXM6IFtcInRleHRcIl1cbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICB0YWc6IG1lbWJlclRlbXBsYXRlLFxuICAgICAgICAgICAgZHJvcGRvd25JdGVtOiBtZW1iZXJTdWdnZXN0aW9uVGVtcGxhdGVcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0YWdpZnkgPSBuZXcgVGFnaWZ5KGlucHV0LCB7Li4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnN9KTtcblxuICAgIHRhZ2lmeS5vbihcImlucHV0XCIsIGRlYm91bmNlKGFzeW5jIChlKSA9PiB7XG4gICAgICAgIHRhZ2lmeS53aGl0ZWxpc3QgPSBudWxsO1xuICAgICAgICB0YWdpZnkubG9hZGluZyh0cnVlKTtcblxuICAgICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoYC9tZW1iZXJzP3Rlcm09JHtlLmRldGFpbC52YWx1ZX0mc21hcnRHcm91cHM9JHtlbmFibGVTbWFydEdyb3Vwc31gKTtcbiAgICAgICAgdGFnaWZ5LndoaXRlbGlzdCA9IGRhdGEucmVzdWx0cztcbiAgICAgICAgdGFnaWZ5XG4gICAgICAgICAgICAubG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgIC5kcm9wZG93bi5zaG93KGUuZGV0YWlsLnZhbHVlKTtcbiAgICB9LCAzMDApKTtcblxuICAgIHJldHVybiB0YWdpZnk7XG59XG5cbmV4cG9ydCBjb25zdCBhamF4VGFnaWZ5ID0gKHNlbGVjdG9yLCB1cmwpID0+IHtcblxuICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZighaW5wdXQpe1xuICAgICAgICBjb25zb2xlLndhcm4oYEEgdGFnaWZ5IGluc3RhbmNlIGNhbm5vdCBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIG5vIGVsZW1lbnQgd2l0aCB0aGUgc2VsZWN0b3IgXCIke3NlbGVjdG9yfVwiIGNvdWxkIGJlIGZvdW5kLmApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHdoaXRlbGlzdCA9IFtdO1xuICAgIGlmKGlucHV0LnZhbHVlLmxlbmd0aCA+IDApe1xuICAgICAgICB3aGl0ZWxpc3QgPSBKU09OLnBhcnNlKGlucHV0LnZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWdpZnkgPSBuZXcgVGFnaWZ5KGlucHV0LCB7XG4gICAgICAgIHRhZ1RleHRQcm9wOiBcInRleHRcIixcbiAgICAgICAgd2hpdGVsaXN0OiB3aGl0ZWxpc3QsXG4gICAgICAgIGVuZm9yY2VXaGl0ZWxpc3Q6IHRydWUsXG4gICAgICAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgICAgICBkcm9wZG93bjoge1xuICAgICAgICAgICAgbWFwVmFsdWVUbzogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlZDogMSxcbiAgICAgICAgICAgIGNsYXNzbmFtZTogXCJ0YWdpZnktbGlzdFwiLFxuICAgICAgICAgICAgc2VhcmNoS2V5czogW1widGV4dFwiXVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGFnaWZ5Lm9uKFwiaW5wdXRcIiwgZGVib3VuY2UoYXN5bmMgKGUpID0+IHtcbiAgICAgICAgdGFnaWZ5LndoaXRlbGlzdCA9IG51bGw7XG4gICAgICAgIHRhZ2lmeS5sb2FkaW5nKHRydWUpO1xuXG4gICAgICAgIGNvbnN0IHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChgJHt1cmx9JnRlcm09JHtlLmRldGFpbC52YWx1ZX1gKTtcbiAgICAgICAgdGFnaWZ5LndoaXRlbGlzdCA9IGRhdGEucmVzdWx0cztcbiAgICAgICAgdGFnaWZ5XG4gICAgICAgICAgICAubG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgIC5kcm9wZG93bi5zaG93KGUuZGV0YWlsLnZhbHVlKTtcbiAgICB9LCAzMDApKTtcblxuICAgIHJldHVybiB0YWdpZnk7XG59O1xuXG5leHBvcnQgY29uc3Qgd2hpdGVsaXN0VGFnaWZ5ID0gKHNlbGVjdG9yLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBpZighZWwpXG4gICAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICB3aGl0ZWxpc3Q6IGVsLmRhdGFzZXQud2hpdGVsaXN0SXRlbXMgPyBKU09OLnBhcnNlKGVsLmRhdGFzZXQud2hpdGVsaXN0SXRlbXMpIDogXCJcIixcbiAgICAgICAgZW5mb3JjZVdoaXRlbGlzdDogdHJ1ZSxcbiAgICAgICAgb3JpZ2luYWxJbnB1dFZhbHVlRm9ybWF0OiB2YWx1ZXNBcnIgPT4gdmFsdWVzQXJyLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpLmpvaW4oJywnKSxcbiAgICAgICAgZHJvcGRvd246IHtcbiAgICAgICAgICAgIG1heEl0ZW1zOiAyMCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IDAsXG4gICAgICAgICAgICBjbGFzc25hbWU6IFwidGFncy1sb29rXCIsXG4gICAgICAgICAgICBjbG9zZU9uU2VsZWN0OiBmYWxzZVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgVGFnaWZ5KGVsLCB7Li4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnN9KTtcbn1cblxuLy8jcmVnaW9uIFRlbXBsYXRlc1xuXG5mdW5jdGlvbiBtZW1iZXJUZW1wbGF0ZSh0YWdEYXRhKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgPHRhZyB0aXRsZT1cIiR7dGFnRGF0YS50ZXh0fVwiIGNvbnRlbnRlZGl0YWJsZT0nZmFsc2UnIHNwZWxsY2hlY2s9J2ZhbHNlJyB0YWJJbmRleD1cIi0xXCIgY2xhc3M9XCIke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lcy50YWd9IHB5LTNcIiAke3RoaXMuZ2V0QXR0cmlidXRlcyh0YWdEYXRhKX0+XG4gICAgICAgICAgICA8eCB0aXRsZT0nJyBjbGFzcz0ndGFnaWZ5X190YWdfX3JlbW92ZUJ0bicgcm9sZT0nYnV0dG9uJyBhcmlhLWxhYmVsPSdyZW1vdmUgdGFnJz48L3g+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSd0YWdpZnlfX3RhZy10ZXh0Jz4ke3RhZ0RhdGEudGV4dH08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90YWc+XG4gICAgYDtcbn1cblxuZnVuY3Rpb24gbWVtYmVyU3VnZ2VzdGlvblRlbXBsYXRlKHRhZ0RhdGEpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2ICR7dGhpcy5nZXRBdHRyaWJ1dGVzKHRhZ0RhdGEpfSBjbGFzcz0ndGFnaWZ5X19kcm9wZG93bl9faXRlbSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyJ1xuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPiR7dGFnRGF0YS50ZXh0fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbi8vI2VuZHJlZ2lvbiBUZW1wbGF0ZXNcblxuIiwiZXhwb3J0IGNvbnN0IGluaXRUb29sdGlwcyA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgdG9vbHRpcFRyaWdnZXJMaXN0ID0gZWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiXScpXG5cbiAgICBpZih0b29sdGlwVHJpZ2dlckxpc3QpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50b29sdGlwVHJpZ2dlckxpc3RdLm1hcCh0b29sdGlwVHJpZ2dlckVsID0+IG5ldyBib290c3RyYXAuVG9vbHRpcCh0b29sdGlwVHJpZ2dlckVsKSk7XG4gICAgfVxufTtcbiIsImV4cG9ydCBjbGFzcyBWYWxpZGF0aW9ue1xuICAgIHN0YXRpYyBnZXREZWZhdWx0VmFsaWRhdG9yKGZvcm0pIHtcblxuICAgICAgICByZXR1cm4gRm9ybVZhbGlkYXRpb24uZm9ybVZhbGlkYXRpb24oZm9ybSwge1xuICAgICAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgICAgIHRyaWdnZXI6IG5ldyBGb3JtVmFsaWRhdGlvbi5wbHVnaW5zLlRyaWdnZXIoKSxcbiAgICAgICAgICAgICAgICBib290c3RyYXA6IG5ldyBGb3JtVmFsaWRhdGlvbi5wbHVnaW5zLkJvb3RzdHJhcDUoe1xuICAgICAgICAgICAgICAgICAgICByb3dTZWxlY3RvcjogJy5mdi1yb3cnLFxuICAgICAgICAgICAgICAgICAgICBlbGVJbnZhbGlkQ2xhc3M6ICdiZy1saWdodC1kYW5nZXIgaXMtaW52YWxpZCcsXG4gICAgICAgICAgICAgICAgICAgIGVsZVZhbGlkQ2xhc3M6ICcnXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpdmU6IG5ldyBGb3JtVmFsaWRhdGlvbi5wbHVnaW5zLkRlY2xhcmF0aXZlKHtodG1sNUlucHV0OiB0cnVlfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpc2FibGVCdXR0b24oYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbj8uc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgYnV0dG9uPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWt0LWluZGljYXRvclwiLCBcIm9uXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlbmFibGVCdXR0b24oYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbj8ucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICAgIGJ1dHRvbj8ucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1rdC1pbmRpY2F0b3JcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHZhbGlkYXRlRm9ybShlLCB2YWxpZGF0b3IsIHN1Ym1pdHRlcikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgZm9ybSA9IHZhbGlkYXRvci5mb3JtO1xuICAgICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB2YWxpZGF0b3IudmFsaWRhdGUoKS50aGVuKHN0YXR1cyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1ZhbGlkJykge1xuICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLmRpc2FibGVCdXR0b24oc3VibWl0dGVyIHx8IGUuc3VibWl0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyB2YWxpZGF0ZUZvcm1XaXRoUmVDYXB0Y2hhKGUsIHZhbGlkYXRvciwgc3VibWl0dGVyKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb25zdCBmb3JtID0gdmFsaWRhdG9yLmZvcm07XG4gICAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHZhbGlkYXRvci52YWxpZGF0ZSgpLnRoZW4oZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdWYWxpZCcpIHtcblxuICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLmRpc2FibGVCdXR0b24oc3VibWl0dGVyIHx8IGUuc3VibWl0dGVyKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNhcHRjaGFJbnB1dCA9IGZvcm0ucXVlcnlTZWxlY3RvcihcIiNSZWNhcHRjaGFSZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l0ZUtleSA9IHJlY2FwdGNoYUlucHV0LmRhdGFzZXQuc2l0ZUtleTtcblxuICAgICAgICAgICAgICAgICAgICBncmVjYXB0Y2hhLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHJlY2FwdGNoYUlucHV0LmRhdGFzZXQuYWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JlY2FwdGNoYS5leGVjdXRlKHNpdGVLZXksIHthY3Rpb246IGFjdGlvbn0pLnRoZW4oZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjYXB0Y2hhSW5wdXQudmFsdWUgPSB0b2tlbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0Zvcm1FcnJvcihlcnJvclRleHQsIGVycm9yVGl0bGUpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Vycm9yLWFsZXJ0XCIpO1xuICAgICAgICBpZighZXJyb3JDb250YWluZXIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZXJyb3JDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiZmxleFwiO1xuICAgICAgICBlcnJvckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmFsZXJ0LXRleHRcIikuaW5uZXJIVE1MID0gZXJyb3JUZXh0O1xuICAgIH1cblxuICAgIHN0YXRpYyBoaWRlRm9ybUVycm9yKCkge1xuICAgICAgICBjb25zdCBlcnJvckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZXJyb3ItYWxlcnRcIik7XG4gICAgICAgIGlmICghZXJyb3JDb250YWluZXIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZXJyb3JDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzcztcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZDtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG5cbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheTtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIC8vIElFIDggaGFzIGEgYnJva2VuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0aGF0IG9ubHkgd29ya3Mgb24gRE9NIG9iamVjdHMuXG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24ob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgZGVmaW5lKEl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBkZWZpbmUoR3AsIFwiY29uc3RydWN0b3JcIiwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwgR2VuZXJhdG9yRnVuY3Rpb24pO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShcbiAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCxcbiAgICBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgKTtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKTtcbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIik7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG5cbiAgZGVmaW5lKEdwLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCBpbiBtb2Rlcm4gZW5naW5lc1xuICAvLyB3ZSBjYW4gZXhwbGljaXRseSBhY2Nlc3MgZ2xvYmFsVGhpcy4gSW4gb2xkZXIgZW5naW5lcyB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIl19"}