/*! * reveal.js 4.5.0 * https://revealjs.com * MIT licensed * * Copyright (C) 2011-2023 Hakim El Hattab, https://hakim.se */ !(function (e, t) { "object" == typeof exports && "undefined" != typeof module ? (module.exports = t()) : "function" == typeof define && define.amd ? define(t) : ((e = "undefined" != typeof globalThis ? globalThis : e || self).Reveal = t()); })(this, function () { "use strict"; const e = (e, t) => { for (let i in t) e[i] = t[i]; return e; }, t = (e, t) => Array.from(e.querySelectorAll(t)), i = (e, t, i) => { i ? e.classList.add(t) : e.classList.remove(t); }, n = (e) => { if ("string" == typeof e) { if ("null" === e) return null; if ("true" === e) return !0; if ("false" === e) return !1; if (e.match(/^-?[\d\.]+$/)) return parseFloat(e); } return e; }, s = (e, t) => { e.style.transform = t; }, a = (e, t) => { let i = e.matches || e.matchesSelector || e.msMatchesSelector; return !(!i || !i.call(e, t)); }, o = (e, t) => { if ("function" == typeof e.closest) return e.closest(t); for (; e; ) { if (a(e, t)) return e; e = e.parentNode; } return null; }, r = (e, t, i, n = "") => { let s = e.querySelectorAll("." + i); for (let t = 0; t < s.length; t++) { let i = s[t]; if (i.parentNode === e) return i; } let a = document.createElement(t); return (a.className = i), (a.innerHTML = n), e.appendChild(a), a; }, l = (e) => { let t = document.createElement("style"); return ( (t.type = "text/css"), e && e.length > 0 && (t.styleSheet ? (t.styleSheet.cssText = e) : t.appendChild(document.createTextNode(e))), document.head.appendChild(t), t ); }, d = () => { let e = {}; location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi, (t) => { e[t.split("=").shift()] = t.split("=").pop(); }); for (let t in e) { let i = e[t]; e[t] = n(unescape(i)); } return void 0 !== e.dependencies && delete e.dependencies, e; }, c = (e, t = 0) => { if (e) { let i, n = e.style.height; return ( (e.style.height = "0px"), (e.parentNode.style.height = "auto"), (i = t - e.parentNode.offsetHeight), (e.style.height = n + "px"), e.parentNode.style.removeProperty("height"), i ); } return t; }, h = { mp4: "video/mp4", m4a: "video/mp4", ogv: "video/ogg", mpeg: "video/mpeg", webm: "video/webm", }, u = navigator.userAgent, g = /(iphone|ipod|ipad|android)/gi.test(u) || ("MacIntel" === navigator.platform && navigator.maxTouchPoints > 1); /chrome/i.test(u) && /edge/i.test(u); const v = /android/gi.test(u); var p = {}; Object.defineProperty(p, "__esModule", { value: !0 }); var m = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }, f = (p.default = (function (e) { if (e) { var t = function (e) { return [].slice.call(e); }, i = 0, n = 1, s = 2, a = 3, o = [], r = null, l = "requestAnimationFrame" in e ? function () { e.cancelAnimationFrame(r), (r = e.requestAnimationFrame(function () { return c( o.filter(function (e) { return e.dirty && e.active; }) ); })); } : function () {}, d = function (e) { return function () { o.forEach(function (t) { return (t.dirty = e); }), l(); }; }, c = function (e) { e .filter(function (e) { return !e.styleComputed; }) .forEach(function (e) { e.styleComputed = v(e); }), e.filter(p).forEach(f); var t = e.filter(g); t.forEach(u), t.forEach(function (e) { f(e), h(e); }), t.forEach(b); }, h = function (e) { return (e.dirty = i); }, u = function (e) { (e.availableWidth = e.element.parentNode.clientWidth), (e.currentWidth = e.element.scrollWidth), (e.previousFontSize = e.currentFontSize), (e.currentFontSize = Math.min( Math.max( e.minSize, (e.availableWidth / e.currentWidth) * e.previousFontSize ), e.maxSize )), (e.whiteSpace = e.multiLine && e.currentFontSize === e.minSize ? "normal" : "nowrap"); }, g = function (e) { return ( e.dirty !== s || (e.dirty === s && e.element.parentNode.clientWidth !== e.availableWidth) ); }, v = function (t) { var i = e.getComputedStyle(t.element, null); (t.currentFontSize = parseFloat(i.getPropertyValue("font-size"))), (t.display = i.getPropertyValue("display")), (t.whiteSpace = i.getPropertyValue("white-space")); }, p = function (e) { var t = !1; return ( !e.preStyleTestCompleted && (/inline-/.test(e.display) || ((t = !0), (e.display = "inline-block")), "nowrap" !== e.whiteSpace && ((t = !0), (e.whiteSpace = "nowrap")), (e.preStyleTestCompleted = !0), t) ); }, f = function (e) { (e.element.style.whiteSpace = e.whiteSpace), (e.element.style.display = e.display), (e.element.style.fontSize = e.currentFontSize + "px"); }, b = function (e) { e.element.dispatchEvent( new CustomEvent("fit", { detail: { oldValue: e.previousFontSize, newValue: e.currentFontSize, scaleFactor: e.currentFontSize / e.previousFontSize, }, }) ); }, y = function (e, t) { return function () { (e.dirty = t), e.active && l(); }; }, w = function (e) { return function () { (o = o.filter(function (t) { return t.element !== e.element; })), e.observeMutations && e.observer.disconnect(), (e.element.style.whiteSpace = e.originalStyle.whiteSpace), (e.element.style.display = e.originalStyle.display), (e.element.style.fontSize = e.originalStyle.fontSize); }; }, E = function (e) { return function () { e.active || ((e.active = !0), l()); }; }, R = function (e) { return function () { return (e.active = !1); }; }, S = function (e) { e.observeMutations && ((e.observer = new MutationObserver(y(e, n))), e.observer.observe(e.element, e.observeMutations)); }, A = { minSize: 16, maxSize: 512, multiLine: !0, observeMutations: "MutationObserver" in e && { subtree: !0, childList: !0, characterData: !0, }, }, k = null, L = function () { e.clearTimeout(k), (k = e.setTimeout(d(s), P.observeWindowDelay)); }, C = ["resize", "orientationchange"]; return ( Object.defineProperty(P, "observeWindow", { set: function (t) { var i = (t ? "add" : "remove") + "EventListener"; C.forEach(function (t) { e[i](t, L); }); }, }), (P.observeWindow = !0), (P.observeWindowDelay = 100), (P.fitAll = d(a)), P ); } function x(e, t) { var i = m({}, A, t), n = e.map(function (e) { var t = m({}, i, { element: e, active: !0 }); return ( (function (e) { (e.originalStyle = { whiteSpace: e.element.style.whiteSpace, display: e.element.style.display, fontSize: e.element.style.fontSize, }), S(e), (e.newbie = !0), (e.dirty = !0), o.push(e); })(t), { element: e, fit: y(t, a), unfreeze: E(t), freeze: R(t), unsubscribe: w(t), } ); }); return l(), n; } function P(e) { var i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return "string" == typeof e ? x(t(document.querySelectorAll(e)), i) : x([e], i)[0]; } })("undefined" == typeof window ? null : window)); class b { constructor(e) { (this.Reveal = e), (this.startEmbeddedIframe = this.startEmbeddedIframe.bind(this)); } shouldPreload(e) { let t = this.Reveal.getConfig().preloadIframes; return "boolean" != typeof t && (t = e.hasAttribute("data-preload")), t; } load(e, i = {}) { (e.style.display = this.Reveal.getConfig().display), t( e, "img[data-src], video[data-src], audio[data-src], iframe[data-src]" ).forEach((e) => { ("IFRAME" !== e.tagName || this.shouldPreload(e)) && (e.setAttribute("src", e.getAttribute("data-src")), e.setAttribute("data-lazy-loaded", ""), e.removeAttribute("data-src")); }), t(e, "video, audio").forEach((e) => { let i = 0; t(e, "source[data-src]").forEach((e) => { e.setAttribute("src", e.getAttribute("data-src")), e.removeAttribute("data-src"), e.setAttribute("data-lazy-loaded", ""), (i += 1); }), g && "VIDEO" === e.tagName && e.setAttribute("playsinline", ""), i > 0 && e.load(); }); let n = e.slideBackgroundElement; if (n) { n.style.display = "block"; let t = e.slideBackgroundContentElement, s = e.getAttribute("data-background-iframe"); if (!1 === n.hasAttribute("data-loaded")) { n.setAttribute("data-loaded", "true"); let a = e.getAttribute("data-background-image"), o = e.getAttribute("data-background-video"), r = e.hasAttribute("data-background-video-loop"), l = e.hasAttribute("data-background-video-muted"); if (a) /^data:/.test(a.trim()) ? (t.style.backgroundImage = `url(${a.trim()})`) : (t.style.backgroundImage = a .split(",") .map( (e) => `url(${((e = "") => encodeURI(e) .replace(/%5B/g, "[") .replace(/%5D/g, "]") .replace( /[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}` ))(decodeURI(e.trim()))})` ) .join(",")); else if (o && !this.Reveal.isSpeakerNotes()) { let e = document.createElement("video"); r && e.setAttribute("loop", ""), l && (e.muted = !0), g && ((e.muted = !0), e.setAttribute("playsinline", "")), o.split(",").forEach((t) => { let i = ((e = "") => h[e.split(".").pop()])(t); e.innerHTML += i ? `` : ``; }), t.appendChild(e); } else if (s && !0 !== i.excludeIframes) { let e = document.createElement("iframe"); e.setAttribute("allowfullscreen", ""), e.setAttribute("mozallowfullscreen", ""), e.setAttribute("webkitallowfullscreen", ""), e.setAttribute("allow", "autoplay"), e.setAttribute("data-src", s), (e.style.width = "100%"), (e.style.height = "100%"), (e.style.maxHeight = "100%"), (e.style.maxWidth = "100%"), t.appendChild(e); } } let a = t.querySelector("iframe[data-src]"); a && this.shouldPreload(n) && !/autoplay=(1|true|yes)/gi.test(s) && a.getAttribute("src") !== s && a.setAttribute("src", s); } this.layout(e); } layout(e) { Array.from(e.querySelectorAll(".r-fit-text")).forEach((e) => { f(e, { minSize: 24, maxSize: 0.8 * this.Reveal.getConfig().height, observeMutations: !1, observeWindow: !1, }); }); } unload(e) { e.style.display = "none"; let i = this.Reveal.getSlideBackground(e); i && ((i.style.display = "none"), t(i, "iframe[src]").forEach((e) => { e.removeAttribute("src"); })), t( e, "video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]" ).forEach((e) => { e.setAttribute("data-src", e.getAttribute("src")), e.removeAttribute("src"); }), t(e, "video[data-lazy-loaded] source[src], audio source[src]").forEach( (e) => { e.setAttribute("data-src", e.getAttribute("src")), e.removeAttribute("src"); } ); } formatEmbeddedContent() { let e = (e, i, n) => { t( this.Reveal.getSlidesElement(), "iframe[" + e + '*="' + i + '"]' ).forEach((t) => { let i = t.getAttribute(e); i && -1 === i.indexOf(n) && t.setAttribute(e, i + (/\?/.test(i) ? "&" : "?") + n); }); }; e("src", "youtube.com/embed/", "enablejsapi=1"), e("data-src", "youtube.com/embed/", "enablejsapi=1"), e("src", "player.vimeo.com/", "api=1"), e("data-src", "player.vimeo.com/", "api=1"); } startEmbeddedContent(e) { e && !this.Reveal.isSpeakerNotes() && (t(e, 'img[src$=".gif"]').forEach((e) => { e.setAttribute("src", e.getAttribute("src")); }), t(e, "video, audio").forEach((e) => { if (o(e, ".fragment") && !o(e, ".fragment.visible")) return; let t = this.Reveal.getConfig().autoPlayMedia; if ( ("boolean" != typeof t && (t = e.hasAttribute("data-autoplay") || !!o(e, ".slide-background")), t && "function" == typeof e.play) ) if (e.readyState > 1) this.startEmbeddedMedia({ target: e }); else if (g) { let t = e.play(); t && "function" == typeof t.catch && !1 === e.controls && t.catch(() => { (e.controls = !0), e.addEventListener("play", () => { e.controls = !1; }); }); } else e.removeEventListener("loadeddata", this.startEmbeddedMedia), e.addEventListener("loadeddata", this.startEmbeddedMedia); }), t(e, "iframe[src]").forEach((e) => { (o(e, ".fragment") && !o(e, ".fragment.visible")) || this.startEmbeddedIframe({ target: e }); }), t(e, "iframe[data-src]").forEach((e) => { (o(e, ".fragment") && !o(e, ".fragment.visible")) || (e.getAttribute("src") !== e.getAttribute("data-src") && (e.removeEventListener("load", this.startEmbeddedIframe), e.addEventListener("load", this.startEmbeddedIframe), e.setAttribute("src", e.getAttribute("data-src")))); })); } startEmbeddedMedia(e) { let t = !!o(e.target, "html"), i = !!o(e.target, ".present"); t && i && ((e.target.currentTime = 0), e.target.play()), e.target.removeEventListener("loadeddata", this.startEmbeddedMedia); } startEmbeddedIframe(e) { let t = e.target; if (t && t.contentWindow) { let i = !!o(e.target, "html"), n = !!o(e.target, ".present"); if (i && n) { let e = this.Reveal.getConfig().autoPlayMedia; "boolean" != typeof e && (e = t.hasAttribute("data-autoplay") || !!o(t, ".slide-background")), /youtube\.com\/embed\//.test(t.getAttribute("src")) && e ? t.contentWindow.postMessage( '{"event":"command","func":"playVideo","args":""}', "*" ) : /player\.vimeo\.com\//.test(t.getAttribute("src")) && e ? t.contentWindow.postMessage('{"method":"play"}', "*") : t.contentWindow.postMessage("slide:start", "*"); } } } stopEmbeddedContent(i, n = {}) { (n = e({ unloadIframes: !0 }, n)), i && i.parentNode && (t(i, "video, audio").forEach((e) => { e.hasAttribute("data-ignore") || "function" != typeof e.pause || (e.setAttribute("data-paused-by-reveal", ""), e.pause()); }), t(i, "iframe").forEach((e) => { e.contentWindow && e.contentWindow.postMessage("slide:stop", "*"), e.removeEventListener("load", this.startEmbeddedIframe); }), t(i, 'iframe[src*="youtube.com/embed/"]').forEach((e) => { !e.hasAttribute("data-ignore") && e.contentWindow && "function" == typeof e.contentWindow.postMessage && e.contentWindow.postMessage( '{"event":"command","func":"pauseVideo","args":""}', "*" ); }), t(i, 'iframe[src*="player.vimeo.com/"]').forEach((e) => { !e.hasAttribute("data-ignore") && e.contentWindow && "function" == typeof e.contentWindow.postMessage && e.contentWindow.postMessage('{"method":"pause"}', "*"); }), !0 === n.unloadIframes && t(i, "iframe[data-src]").forEach((e) => { e.setAttribute("src", "about:blank"), e.removeAttribute("src"); })); } } class y { constructor(e) { this.Reveal = e; } render() { (this.element = document.createElement("div")), (this.element.className = "slide-number"), this.Reveal.getRevealElement().appendChild(this.element); } configure(e, t) { let i = "none"; e.slideNumber && !this.Reveal.isPrintingPDF() && ("all" === e.showSlideNumber || ("speaker" === e.showSlideNumber && this.Reveal.isSpeakerNotes())) && (i = "block"), (this.element.style.display = i); } update() { this.Reveal.getConfig().slideNumber && this.element && (this.element.innerHTML = this.getSlideNumber()); } getSlideNumber(e = this.Reveal.getCurrentSlide()) { let t, i = this.Reveal.getConfig(), n = "h.v"; if ("function" == typeof i.slideNumber) t = i.slideNumber(e); else { "string" == typeof i.slideNumber && (n = i.slideNumber), /c/.test(n) || 1 !== this.Reveal.getHorizontalSlides().length || (n = "c"); let s = e && "uncounted" === e.dataset.visibility ? 0 : 1; switch (((t = []), n)) { case "c": t.push(this.Reveal.getSlidePastCount(e) + s); break; case "c/t": t.push( this.Reveal.getSlidePastCount(e) + s, "/", this.Reveal.getTotalSlides() ); break; default: let i = this.Reveal.getIndices(e); t.push(i.h + s); let a = "h/v" === n ? "/" : "."; this.Reveal.isVerticalSlide(e) && t.push(a, i.v + 1); } } let s = "#" + this.Reveal.location.getHash(e); return this.formatNumber(t[0], t[1], t[2], s); } formatNumber(e, t, i, n = "#" + this.Reveal.location.getHash()) { return "number" != typeof i || isNaN(i) ? `\n\t\t\t\t\t${e}\n\t\t\t\t\t` : `\n\t\t\t\t\t${e}\n\t\t\t\t\t${t}\n\t\t\t\t\t${i}\n\t\t\t\t\t`; } destroy() { this.element.remove(); } } class w { constructor(e) { (this.Reveal = e), (this.onInput = this.onInput.bind(this)), (this.onBlur = this.onBlur.bind(this)), (this.onKeyDown = this.onKeyDown.bind(this)); } render() { (this.element = document.createElement("div")), (this.element.className = "jump-to-slide"), (this.jumpInput = document.createElement("input")), (this.jumpInput.type = "text"), (this.jumpInput.className = "jump-to-slide-input"), (this.jumpInput.placeholder = "Jump to slide"), this.jumpInput.addEventListener("input", this.onInput), this.jumpInput.addEventListener("keydown", this.onKeyDown), this.jumpInput.addEventListener("blur", this.onBlur), this.element.appendChild(this.jumpInput); } show() { (this.indicesOnShow = this.Reveal.getIndices()), this.Reveal.getRevealElement().appendChild(this.element), this.jumpInput.focus(); } hide() { this.isVisible() && (this.element.remove(), (this.jumpInput.value = ""), clearTimeout(this.jumpTimeout), delete this.jumpTimeout); } isVisible() { return !!this.element.parentNode; } jump() { clearTimeout(this.jumpTimeout), delete this.jumpTimeout; const e = this.jumpInput.value.trim(""); let t = this.Reveal.location.getIndicesFromHash(e, { oneBasedIndex: !0 }); return ( !t && /\S+/i.test(e) && e.length > 1 && (t = this.search(e)), t && "" !== e ? (this.Reveal.slide(t.h, t.v, t.f), !0) : (this.Reveal.slide( this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f ), !1) ); } jumpAfter(e) { clearTimeout(this.jumpTimeout), (this.jumpTimeout = setTimeout(() => this.jump(), e)); } search(e) { const t = new RegExp("\\b" + e.trim() + "\\b", "i"), i = this.Reveal.getSlides().find((e) => t.test(e.innerText)); return i ? this.Reveal.getIndices(i) : null; } cancel() { this.Reveal.slide( this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f ), this.hide(); } confirm() { this.jump(), this.hide(); } destroy() { this.jumpInput.removeEventListener("input", this.onInput), this.jumpInput.removeEventListener("keydown", this.onKeyDown), this.jumpInput.removeEventListener("blur", this.onBlur), this.element.remove(); } onKeyDown(e) { 13 === e.keyCode ? this.confirm() : 27 === e.keyCode && (this.cancel(), e.stopImmediatePropagation()); } onInput(e) { this.jumpAfter(200); } onBlur() { setTimeout(() => this.hide(), 1); } } const E = (e) => { let t = e.match(/^#([0-9a-f]{3})$/i); if (t && t[1]) return ( (t = t[1]), { r: 17 * parseInt(t.charAt(0), 16), g: 17 * parseInt(t.charAt(1), 16), b: 17 * parseInt(t.charAt(2), 16), } ); let i = e.match(/^#([0-9a-f]{6})$/i); if (i && i[1]) return ( (i = i[1]), { r: parseInt(i.slice(0, 2), 16), g: parseInt(i.slice(2, 4), 16), b: parseInt(i.slice(4, 6), 16), } ); let n = e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i); if (n) return { r: parseInt(n[1], 10), g: parseInt(n[2], 10), b: parseInt(n[3], 10), }; let s = e.match( /^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i ); return s ? { r: parseInt(s[1], 10), g: parseInt(s[2], 10), b: parseInt(s[3], 10), a: parseFloat(s[4]), } : null; }; class R { constructor(e) { this.Reveal = e; } render() { (this.element = document.createElement("div")), (this.element.className = "backgrounds"), this.Reveal.getRevealElement().appendChild(this.element); } create() { (this.element.innerHTML = ""), this.element.classList.add("no-transition"), this.Reveal.getHorizontalSlides().forEach((e) => { let i = this.createBackground(e, this.element); t(e, "section").forEach((e) => { this.createBackground(e, i), i.classList.add("stack"); }); }), this.Reveal.getConfig().parallaxBackgroundImage ? ((this.element.style.backgroundImage = 'url("' + this.Reveal.getConfig().parallaxBackgroundImage + '")'), (this.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize), (this.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat), (this.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition), setTimeout(() => { this.Reveal.getRevealElement().classList.add( "has-parallax-background" ); }, 1)) : ((this.element.style.backgroundImage = ""), this.Reveal.getRevealElement().classList.remove( "has-parallax-background" )); } createBackground(e, t) { let i = document.createElement("div"); i.className = "slide-background " + e.className.replace(/present|past|future/, ""); let n = document.createElement("div"); return ( (n.className = "slide-background-content"), i.appendChild(n), t.appendChild(i), (e.slideBackgroundElement = i), (e.slideBackgroundContentElement = n), this.sync(e), i ); } sync(e) { const t = e.slideBackgroundElement, i = e.slideBackgroundContentElement, n = { background: e.getAttribute("data-background"), backgroundSize: e.getAttribute("data-background-size"), backgroundImage: e.getAttribute("data-background-image"), backgroundVideo: e.getAttribute("data-background-video"), backgroundIframe: e.getAttribute("data-background-iframe"), backgroundColor: e.getAttribute("data-background-color"), backgroundGradient: e.getAttribute("data-background-gradient"), backgroundRepeat: e.getAttribute("data-background-repeat"), backgroundPosition: e.getAttribute("data-background-position"), backgroundTransition: e.getAttribute("data-background-transition"), backgroundOpacity: e.getAttribute("data-background-opacity"), }, s = e.hasAttribute("data-preload"); e.classList.remove("has-dark-background"), e.classList.remove("has-light-background"), t.removeAttribute("data-loaded"), t.removeAttribute("data-background-hash"), t.removeAttribute("data-background-size"), t.removeAttribute("data-background-transition"), (t.style.backgroundColor = ""), (i.style.backgroundSize = ""), (i.style.backgroundRepeat = ""), (i.style.backgroundPosition = ""), (i.style.backgroundImage = ""), (i.style.opacity = ""), (i.innerHTML = ""), n.background && (/^(http|file|\/\/)/gi.test(n.background) || /\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\s]|$)/gi.test(n.background) ? e.setAttribute("data-background-image", n.background) : (t.style.background = n.background)), (n.background || n.backgroundColor || n.backgroundGradient || n.backgroundImage || n.backgroundVideo || n.backgroundIframe) && t.setAttribute( "data-background-hash", n.background + n.backgroundSize + n.backgroundImage + n.backgroundVideo + n.backgroundIframe + n.backgroundColor + n.backgroundGradient + n.backgroundRepeat + n.backgroundPosition + n.backgroundTransition + n.backgroundOpacity ), n.backgroundSize && t.setAttribute("data-background-size", n.backgroundSize), n.backgroundColor && (t.style.backgroundColor = n.backgroundColor), n.backgroundGradient && (t.style.backgroundImage = n.backgroundGradient), n.backgroundTransition && t.setAttribute("data-background-transition", n.backgroundTransition), s && t.setAttribute("data-preload", ""), n.backgroundSize && (i.style.backgroundSize = n.backgroundSize), n.backgroundRepeat && (i.style.backgroundRepeat = n.backgroundRepeat), n.backgroundPosition && (i.style.backgroundPosition = n.backgroundPosition), n.backgroundOpacity && (i.style.opacity = n.backgroundOpacity); let a = n.backgroundColor; if (!a || !E(a)) { let e = window.getComputedStyle(t); e && e.backgroundColor && (a = e.backgroundColor); } if (a) { const t = E(a); t && 0 !== t.a && ("string" == typeof (o = a) && (o = E(o)), (o ? (299 * o.r + 587 * o.g + 114 * o.b) / 1e3 : null) < 128 ? e.classList.add("has-dark-background") : e.classList.add("has-light-background")); } var o; } update(e = !1) { let i = this.Reveal.getCurrentSlide(), n = this.Reveal.getIndices(), s = null, a = this.Reveal.getConfig().rtl ? "future" : "past", o = this.Reveal.getConfig().rtl ? "past" : "future"; if ( (Array.from(this.element.childNodes).forEach((i, r) => { i.classList.remove("past", "present", "future"), r < n.h ? i.classList.add(a) : r > n.h ? i.classList.add(o) : (i.classList.add("present"), (s = i)), (e || r === n.h) && t(i, ".slide-background").forEach((e, t) => { e.classList.remove("past", "present", "future"), t < n.v ? e.classList.add("past") : t > n.v ? e.classList.add("future") : (e.classList.add("present"), r === n.h && (s = e)); }); }), this.previousBackground && this.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ), } ), s) ) { this.Reveal.slideContent.startEmbeddedContent(s); let e = s.querySelector(".slide-background-content"); if (e) { let t = e.style.backgroundImage || ""; /\.gif/i.test(t) && ((e.style.backgroundImage = ""), window.getComputedStyle(e).opacity, (e.style.backgroundImage = t)); } let t = this.previousBackground ? this.previousBackground.getAttribute("data-background-hash") : null, i = s.getAttribute("data-background-hash"); i && i === t && s !== this.previousBackground && this.element.classList.add("no-transition"), (this.previousBackground = s); } i && ["has-light-background", "has-dark-background"].forEach((e) => { i.classList.contains(e) ? this.Reveal.getRevealElement().classList.add(e) : this.Reveal.getRevealElement().classList.remove(e); }, this), setTimeout(() => { this.element.classList.remove("no-transition"); }, 1); } updateParallax() { let e = this.Reveal.getIndices(); if (this.Reveal.getConfig().parallaxBackgroundImage) { let t, i, n = this.Reveal.getHorizontalSlides(), s = this.Reveal.getVerticalSlides(), a = this.element.style.backgroundSize.split(" "); 1 === a.length ? (t = i = parseInt(a[0], 10)) : ((t = parseInt(a[0], 10)), (i = parseInt(a[1], 10))); let o, r, l = this.element.offsetWidth, d = n.length; (o = "number" == typeof this.Reveal.getConfig().parallaxBackgroundHorizontal ? this.Reveal.getConfig().parallaxBackgroundHorizontal : d > 1 ? (t - l) / (d - 1) : 0), (r = o * e.h * -1); let c, h, u = this.element.offsetHeight, g = s.length; (c = "number" == typeof this.Reveal.getConfig().parallaxBackgroundVertical ? this.Reveal.getConfig().parallaxBackgroundVertical : (i - u) / (g - 1)), (h = g > 0 ? c * e.v : 0), (this.element.style.backgroundPosition = r + "px " + -h + "px"); } } destroy() { this.element.remove(); } } const S = ".slides section", A = ".slides>section", k = ".slides>section.present>section", L = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener|showPreview/, C = /fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/; let x = 0; class P { constructor(e) { this.Reveal = e; } run(e, t) { this.reset(); let i = this.Reveal.getSlides(), n = i.indexOf(t), s = i.indexOf(e); if ( e.hasAttribute("data-auto-animate") && t.hasAttribute("data-auto-animate") && e.getAttribute("data-auto-animate-id") === t.getAttribute("data-auto-animate-id") && !(n > s ? t : e).hasAttribute("data-auto-animate-restart") ) { this.autoAnimateStyleSheet = this.autoAnimateStyleSheet || l(); let i = this.getAutoAnimateOptions(t); (e.dataset.autoAnimate = "pending"), (t.dataset.autoAnimate = "pending"), (i.slideDirection = n > s ? "forward" : "backward"); let a = "none" === e.style.display; a && (e.style.display = this.Reveal.getConfig().display); let o = this.getAutoAnimatableElements(e, t).map((e) => this.autoAnimateElements(e.from, e.to, e.options || {}, i, x++) ); if ( (a && (e.style.display = "none"), "false" !== t.dataset.autoAnimateUnmatched && !0 === this.Reveal.getConfig().autoAnimateUnmatched) ) { let e = 0.8 * i.duration, n = 0.2 * i.duration; this.getUnmatchedAutoAnimateElements(t).forEach((e) => { let t = this.getAutoAnimateOptions(e, i), n = "unmatched"; (t.duration === i.duration && t.delay === i.delay) || ((n = "unmatched-" + x++), o.push( `[data-auto-animate="running"] [data-auto-animate-target="${n}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }` )), (e.dataset.autoAnimateTarget = n); }, this), o.push( `[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${n}s; }` ); } (this.autoAnimateStyleSheet.innerHTML = o.join("")), requestAnimationFrame(() => { this.autoAnimateStyleSheet && (getComputedStyle(this.autoAnimateStyleSheet).fontWeight, (t.dataset.autoAnimate = "running")); }), this.Reveal.dispatchEvent({ type: "autoanimate", data: { fromSlide: e, toSlide: t, sheet: this.autoAnimateStyleSheet, }, }); } } reset() { t( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=""])' ).forEach((e) => { e.dataset.autoAnimate = ""; }), t(this.Reveal.getRevealElement(), "[data-auto-animate-target]").forEach( (e) => { delete e.dataset.autoAnimateTarget; } ), this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode && (this.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet ), (this.autoAnimateStyleSheet = null)); } autoAnimateElements(e, t, i, n, s) { (e.dataset.autoAnimateTarget = ""), (t.dataset.autoAnimateTarget = s); let a = this.getAutoAnimateOptions(t, n); void 0 !== i.delay && (a.delay = i.delay), void 0 !== i.duration && (a.duration = i.duration), void 0 !== i.easing && (a.easing = i.easing); let o = this.getAutoAnimatableProperties("from", e, i), r = this.getAutoAnimatableProperties("to", t, i); if ( t.classList.contains("fragment") && (delete r.styles.opacity, e.classList.contains("fragment")) ) { (e.className.match(C) || [""])[0] === (t.className.match(C) || [""])[0] && "forward" === n.slideDirection && t.classList.add("visible", "disabled"); } if (!1 !== i.translate || !1 !== i.scale) { let e = this.Reveal.getScale(), t = { x: (o.x - r.x) / e, y: (o.y - r.y) / e, scaleX: o.width / r.width, scaleY: o.height / r.height, }; (t.x = Math.round(1e3 * t.x) / 1e3), (t.y = Math.round(1e3 * t.y) / 1e3), (t.scaleX = Math.round(1e3 * t.scaleX) / 1e3), (t.scaleX = Math.round(1e3 * t.scaleX) / 1e3); let n = !1 !== i.translate && (0 !== t.x || 0 !== t.y), s = !1 !== i.scale && (0 !== t.scaleX || 0 !== t.scaleY); if (n || s) { let e = []; n && e.push(`translate(${t.x}px, ${t.y}px)`), s && e.push(`scale(${t.scaleX}, ${t.scaleY})`), (o.styles.transform = e.join(" ")), (o.styles["transform-origin"] = "top left"), (r.styles.transform = "none"); } } for (let e in r.styles) { const t = r.styles[e], i = o.styles[e]; t === i ? delete r.styles[e] : (!0 === t.explicitValue && (r.styles[e] = t.value), !0 === i.explicitValue && (o.styles[e] = i.value)); } let l = "", d = Object.keys(r.styles); if (d.length > 0) { (o.styles.transition = "none"), (r.styles.transition = `all ${a.duration}s ${a.easing} ${a.delay}s`), (r.styles["transition-property"] = d.join(", ")), (r.styles["will-change"] = d.join(", ")), (l = '[data-auto-animate-target="' + s + '"] {' + Object.keys(o.styles) .map((e) => e + ": " + o.styles[e] + " !important;") .join("") + '}[data-auto-animate="running"] [data-auto-animate-target="' + s + '"] {' + Object.keys(r.styles) .map((e) => e + ": " + r.styles[e] + " !important;") .join("") + "}"); } return l; } getAutoAnimateOptions(t, i) { let n = { easing: this.Reveal.getConfig().autoAnimateEasing, duration: this.Reveal.getConfig().autoAnimateDuration, delay: 0, }; if (((n = e(n, i)), t.parentNode)) { let e = o(t.parentNode, "[data-auto-animate-target]"); e && (n = this.getAutoAnimateOptions(e, n)); } return ( t.dataset.autoAnimateEasing && (n.easing = t.dataset.autoAnimateEasing), t.dataset.autoAnimateDuration && (n.duration = parseFloat(t.dataset.autoAnimateDuration)), t.dataset.autoAnimateDelay && (n.delay = parseFloat(t.dataset.autoAnimateDelay)), n ); } getAutoAnimatableProperties(e, t, i) { let n = this.Reveal.getConfig(), s = { styles: [] }; if (!1 !== i.translate || !1 !== i.scale) { let e; if ("function" == typeof i.measure) e = i.measure(t); else if (n.center) e = t.getBoundingClientRect(); else { let i = this.Reveal.getScale(); e = { x: t.offsetLeft * i, y: t.offsetTop * i, width: t.offsetWidth * i, height: t.offsetHeight * i, }; } (s.x = e.x), (s.y = e.y), (s.width = e.width), (s.height = e.height); } const a = getComputedStyle(t); return ( (i.styles || n.autoAnimateStyles).forEach((t) => { let i; "string" == typeof t && (t = { property: t }), void 0 !== t.from && "from" === e ? (i = { value: t.from, explicitValue: !0 }) : void 0 !== t.to && "to" === e ? (i = { value: t.to, explicitValue: !0 }) : ("line-height" === t.property && (i = parseFloat(a["line-height"]) / parseFloat(a["font-size"])), isNaN(i) && (i = a[t.property])), "" !== i && (s.styles[t.property] = i); }), s ); } getAutoAnimatableElements(e, t) { let i = ( "function" == typeof this.Reveal.getConfig().autoAnimateMatcher ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs ).call(this, e, t), n = []; return i.filter((e, t) => { if (-1 === n.indexOf(e.to)) return n.push(e.to), !0; }); } getAutoAnimatePairs(e, t) { let i = []; const n = "h1, h2, h3, h4, h5, h6, p, li"; return ( this.findAutoAnimateMatches( i, e, t, "[data-id]", (e) => e.nodeName + ":::" + e.getAttribute("data-id") ), this.findAutoAnimateMatches( i, e, t, n, (e) => e.nodeName + ":::" + e.innerText ), this.findAutoAnimateMatches( i, e, t, "img, video, iframe", (e) => e.nodeName + ":::" + (e.getAttribute("src") || e.getAttribute("data-src")) ), this.findAutoAnimateMatches( i, e, t, "pre", (e) => e.nodeName + ":::" + e.innerText ), i.forEach((e) => { a(e.from, n) ? (e.options = { scale: !1 }) : a(e.from, "pre") && ((e.options = { scale: !1, styles: ["width", "height"] }), this.findAutoAnimateMatches( i, e.from, e.to, ".hljs .hljs-ln-code", (e) => e.textContent, { scale: !1, styles: [], measure: this.getLocalBoundingBox.bind(this), } ), this.findAutoAnimateMatches( i, e.from, e.to, ".hljs .hljs-ln-line[data-line-number]", (e) => e.getAttribute("data-line-number"), { scale: !1, styles: ["width"], measure: this.getLocalBoundingBox.bind(this), } )); }, this), i ); } getLocalBoundingBox(e) { const t = this.Reveal.getScale(); return { x: Math.round(e.offsetLeft * t * 100) / 100, y: Math.round(e.offsetTop * t * 100) / 100, width: Math.round(e.offsetWidth * t * 100) / 100, height: Math.round(e.offsetHeight * t * 100) / 100, }; } findAutoAnimateMatches(e, t, i, n, s, a) { let o = {}, r = {}; [].slice.call(t.querySelectorAll(n)).forEach((e, t) => { const i = s(e); "string" == typeof i && i.length && ((o[i] = o[i] || []), o[i].push(e)); }), [].slice.call(i.querySelectorAll(n)).forEach((t, i) => { const n = s(t); let l; if (((r[n] = r[n] || []), r[n].push(t), o[n])) { const e = r[n].length - 1, t = o[n].length - 1; o[n][e] ? ((l = o[n][e]), (o[n][e] = null)) : o[n][t] && ((l = o[n][t]), (o[n][t] = null)); } l && e.push({ from: l, to: t, options: a }); }); } getUnmatchedAutoAnimateElements(e) { return [].slice.call(e.children).reduce((e, t) => { const i = t.querySelector("[data-auto-animate-target]"); return ( t.hasAttribute("data-auto-animate-target") || i || e.push(t), t.querySelector("[data-auto-animate-target]") && (e = e.concat(this.getUnmatchedAutoAnimateElements(t))), e ); }, []); } } class N { constructor(e) { this.Reveal = e; } configure(e, t) { !1 === e.fragments ? this.disable() : !1 === t.fragments && this.enable(); } disable() { t(this.Reveal.getSlidesElement(), ".fragment").forEach((e) => { e.classList.add("visible"), e.classList.remove("current-fragment"); }); } enable() { t(this.Reveal.getSlidesElement(), ".fragment").forEach((e) => { e.classList.remove("visible"), e.classList.remove("current-fragment"); }); } availableRoutes() { let e = this.Reveal.getCurrentSlide(); if (e && this.Reveal.getConfig().fragments) { let t = e.querySelectorAll(".fragment:not(.disabled)"), i = e.querySelectorAll(".fragment:not(.disabled):not(.visible)"); return { prev: t.length - i.length > 0, next: !!i.length }; } return { prev: !1, next: !1 }; } sort(e, t = !1) { e = Array.from(e); let i = [], n = [], s = []; e.forEach((e) => { if (e.hasAttribute("data-fragment-index")) { let t = parseInt(e.getAttribute("data-fragment-index"), 10); i[t] || (i[t] = []), i[t].push(e); } else n.push([e]); }), (i = i.concat(n)); let a = 0; return ( i.forEach((e) => { e.forEach((e) => { s.push(e), e.setAttribute("data-fragment-index", a); }), a++; }), !0 === t ? i : s ); } sortAll() { this.Reveal.getHorizontalSlides().forEach((e) => { let i = t(e, "section"); i.forEach((e, t) => { this.sort(e.querySelectorAll(".fragment")); }, this), 0 === i.length && this.sort(e.querySelectorAll(".fragment")); }); } update(e, t) { let i = { shown: [], hidden: [] }, n = this.Reveal.getCurrentSlide(); if ( n && this.Reveal.getConfig().fragments && (t = t || this.sort(n.querySelectorAll(".fragment"))).length ) { let s = 0; if ("number" != typeof e) { let t = this.sort(n.querySelectorAll(".fragment.visible")).pop(); t && (e = parseInt(t.getAttribute("data-fragment-index") || 0, 10)); } Array.from(t).forEach((t, n) => { if ( (t.hasAttribute("data-fragment-index") && (n = parseInt(t.getAttribute("data-fragment-index"), 10)), (s = Math.max(s, n)), n <= e) ) { let s = t.classList.contains("visible"); t.classList.add("visible"), t.classList.remove("current-fragment"), n === e && (this.Reveal.announceStatus(this.Reveal.getStatusText(t)), t.classList.add("current-fragment"), this.Reveal.slideContent.startEmbeddedContent(t)), s || (i.shown.push(t), this.Reveal.dispatchEvent({ target: t, type: "visible", bubbles: !1, })); } else { let e = t.classList.contains("visible"); t.classList.remove("visible"), t.classList.remove("current-fragment"), e && (this.Reveal.slideContent.stopEmbeddedContent(t), i.hidden.push(t), this.Reveal.dispatchEvent({ target: t, type: "hidden", bubbles: !1, })); } }), (e = "number" == typeof e ? e : -1), (e = Math.max(Math.min(e, s), -1)), n.setAttribute("data-fragment", e); } return i; } sync(e = this.Reveal.getCurrentSlide()) { return this.sort(e.querySelectorAll(".fragment")); } goto(e, t = 0) { let i = this.Reveal.getCurrentSlide(); if (i && this.Reveal.getConfig().fragments) { let n = this.sort(i.querySelectorAll(".fragment:not(.disabled)")); if (n.length) { if ("number" != typeof e) { let t = this.sort( i.querySelectorAll(".fragment:not(.disabled).visible") ).pop(); e = t ? parseInt(t.getAttribute("data-fragment-index") || 0, 10) : -1; } e += t; let s = this.update(e, n); return ( s.hidden.length && this.Reveal.dispatchEvent({ type: "fragmenthidden", data: { fragment: s.hidden[0], fragments: s.hidden }, }), s.shown.length && this.Reveal.dispatchEvent({ type: "fragmentshown", data: { fragment: s.shown[0], fragments: s.shown }, }), this.Reveal.controls.update(), this.Reveal.progress.update(), this.Reveal.getConfig().fragmentInURL && this.Reveal.location.writeURL(), !(!s.shown.length && !s.hidden.length) ); } } return !1; } next() { return this.goto(null, 1); } prev() { return this.goto(null, -1); } } class M { constructor(e) { (this.Reveal = e), (this.active = !1), (this.onSlideClicked = this.onSlideClicked.bind(this)); } activate() { if (this.Reveal.getConfig().overview && !this.isActive()) { (this.active = !0), this.Reveal.getRevealElement().classList.add("overview"), this.Reveal.cancelAutoSlide(), this.Reveal.getSlidesElement().appendChild( this.Reveal.getBackgroundsElement() ), t(this.Reveal.getRevealElement(), S).forEach((e) => { e.classList.contains("stack") || e.addEventListener("click", this.onSlideClicked, !0); }); const e = 70, i = this.Reveal.getComputedSlideSize(); (this.overviewSlideWidth = i.width + e), (this.overviewSlideHeight = i.height + e), this.Reveal.getConfig().rtl && (this.overviewSlideWidth = -this.overviewSlideWidth), this.Reveal.updateSlidesVisibility(), this.layout(), this.update(), this.Reveal.layout(); const n = this.Reveal.getIndices(); this.Reveal.dispatchEvent({ type: "overviewshown", data: { indexh: n.h, indexv: n.v, currentSlide: this.Reveal.getCurrentSlide(), }, }); } } layout() { this.Reveal.getHorizontalSlides().forEach((e, i) => { e.setAttribute("data-index-h", i), s(e, "translate3d(" + i * this.overviewSlideWidth + "px, 0, 0)"), e.classList.contains("stack") && t(e, "section").forEach((e, t) => { e.setAttribute("data-index-h", i), e.setAttribute("data-index-v", t), s( e, "translate3d(0, " + t * this.overviewSlideHeight + "px, 0)" ); }); }), Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach( (e, i) => { s(e, "translate3d(" + i * this.overviewSlideWidth + "px, 0, 0)"), t(e, ".slide-background").forEach((e, t) => { s( e, "translate3d(0, " + t * this.overviewSlideHeight + "px, 0)" ); }); } ); } update() { const e = Math.min(window.innerWidth, window.innerHeight), t = Math.max(e / 5, 150) / e, i = this.Reveal.getIndices(); this.Reveal.transformSlides({ overview: [ "scale(" + t + ")", "translateX(" + -i.h * this.overviewSlideWidth + "px)", "translateY(" + -i.v * this.overviewSlideHeight + "px)", ].join(" "), }); } deactivate() { if (this.Reveal.getConfig().overview) { (this.active = !1), this.Reveal.getRevealElement().classList.remove("overview"), this.Reveal.getRevealElement().classList.add("overview-deactivating"), setTimeout(() => { this.Reveal.getRevealElement().classList.remove( "overview-deactivating" ); }, 1), this.Reveal.getRevealElement().appendChild( this.Reveal.getBackgroundsElement() ), t(this.Reveal.getRevealElement(), S).forEach((e) => { s(e, ""), e.removeEventListener("click", this.onSlideClicked, !0); }), t(this.Reveal.getBackgroundsElement(), ".slide-background").forEach( (e) => { s(e, ""); } ), this.Reveal.transformSlides({ overview: "" }); const e = this.Reveal.getIndices(); this.Reveal.slide(e.h, e.v), this.Reveal.layout(), this.Reveal.cueAutoSlide(), this.Reveal.dispatchEvent({ type: "overviewhidden", data: { indexh: e.h, indexv: e.v, currentSlide: this.Reveal.getCurrentSlide(), }, }); } } toggle(e) { "boolean" == typeof e ? e ? this.activate() : this.deactivate() : this.isActive() ? this.deactivate() : this.activate(); } isActive() { return this.active; } onSlideClicked(e) { if (this.isActive()) { e.preventDefault(); let t = e.target; for (; t && !t.nodeName.match(/section/gi); ) t = t.parentNode; if ( t && !t.classList.contains("disabled") && (this.deactivate(), t.nodeName.match(/section/gi)) ) { let e = parseInt(t.getAttribute("data-index-h"), 10), i = parseInt(t.getAttribute("data-index-v"), 10); this.Reveal.slide(e, i); } } } } class I { constructor(e) { (this.Reveal = e), (this.shortcuts = {}), (this.bindings = {}), (this.onDocumentKeyDown = this.onDocumentKeyDown.bind(this)), (this.onDocumentKeyPress = this.onDocumentKeyPress.bind(this)); } configure(e, t) { "linear" === e.navigationMode ? ((this.shortcuts["→ , ↓ , SPACE , N , L , J"] = "Next slide"), (this.shortcuts["← , ↑ , P , H , K"] = "Previous slide")) : ((this.shortcuts["N , SPACE"] = "Next slide"), (this.shortcuts["P , Shift SPACE"] = "Previous slide"), (this.shortcuts["← , H"] = "Navigate left"), (this.shortcuts["→ , L"] = "Navigate right"), (this.shortcuts["↑ , K"] = "Navigate up"), (this.shortcuts["↓ , J"] = "Navigate down")), (this.shortcuts["Alt + ←/↑/→/↓"] = "Navigate without fragments"), (this.shortcuts["Shift + ←/↑/→/↓"] = "Jump to first/last slide"), (this.shortcuts["B , ."] = "Pause"), (this.shortcuts.F = "Fullscreen"), (this.shortcuts.G = "Jump to slide"), (this.shortcuts["ESC, O"] = "Slide overview"); } bind() { document.addEventListener("keydown", this.onDocumentKeyDown, !1), document.addEventListener("keypress", this.onDocumentKeyPress, !1); } unbind() { document.removeEventListener("keydown", this.onDocumentKeyDown, !1), document.removeEventListener("keypress", this.onDocumentKeyPress, !1); } addKeyBinding(e, t) { "object" == typeof e && e.keyCode ? (this.bindings[e.keyCode] = { callback: t, key: e.key, description: e.description, }) : (this.bindings[e] = { callback: t, key: null, description: null }); } removeKeyBinding(e) { delete this.bindings[e]; } triggerKey(e) { this.onDocumentKeyDown({ keyCode: e }); } registerKeyboardShortcut(e, t) { this.shortcuts[e] = t; } getShortcuts() { return this.shortcuts; } getBindings() { return this.bindings; } onDocumentKeyPress(e) { e.shiftKey && 63 === e.charCode && this.Reveal.toggleHelp(); } onDocumentKeyDown(e) { let t = this.Reveal.getConfig(); if ( "function" == typeof t.keyboardCondition && !1 === t.keyboardCondition(e) ) return !0; if ("focused" === t.keyboardCondition && !this.Reveal.isFocused()) return !0; let i = e.keyCode, n = !this.Reveal.isAutoSliding(); this.Reveal.onUserInput(e); let s = document.activeElement && !0 === document.activeElement.isContentEditable, a = document.activeElement && document.activeElement.tagName && /input|textarea/i.test(document.activeElement.tagName), o = document.activeElement && document.activeElement.className && /speaker-notes/i.test(document.activeElement.className), r = !( (-1 !== [32, 37, 38, 39, 40, 78, 80].indexOf(e.keyCode) && e.shiftKey) || e.altKey ) && (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey); if (s || a || o || r) return; let l, d = [66, 86, 190, 191]; if ("object" == typeof t.keyboard) for (l in t.keyboard) "togglePause" === t.keyboard[l] && d.push(parseInt(l, 10)); if (this.Reveal.isPaused() && -1 === d.indexOf(i)) return !1; let c = "linear" === t.navigationMode || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides(), h = !1; if ("object" == typeof t.keyboard) for (l in t.keyboard) if (parseInt(l, 10) === i) { let i = t.keyboard[l]; "function" == typeof i ? i.apply(null, [e]) : "string" == typeof i && "function" == typeof this.Reveal[i] && this.Reveal[i].call(), (h = !0); } if (!1 === h) for (l in this.bindings) if (parseInt(l, 10) === i) { let t = this.bindings[l].callback; "function" == typeof t ? t.apply(null, [e]) : "string" == typeof t && "function" == typeof this.Reveal[t] && this.Reveal[t].call(), (h = !0); } !1 === h && ((h = !0), 80 === i || 33 === i ? this.Reveal.prev({ skipFragments: e.altKey }) : 78 === i || 34 === i ? this.Reveal.next({ skipFragments: e.altKey }) : 72 === i || 37 === i ? e.shiftKey ? this.Reveal.slide(0) : !this.Reveal.overview.isActive() && c ? this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.left({ skipFragments: e.altKey }) : 76 === i || 39 === i ? e.shiftKey ? this.Reveal.slide(this.Reveal.getHorizontalSlides().length - 1) : !this.Reveal.overview.isActive() && c ? this.Reveal.next({ skipFragments: e.altKey }) : this.Reveal.right({ skipFragments: e.altKey }) : 75 === i || 38 === i ? e.shiftKey ? this.Reveal.slide(void 0, 0) : !this.Reveal.overview.isActive() && c ? this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.up({ skipFragments: e.altKey }) : 74 === i || 40 === i ? e.shiftKey ? this.Reveal.slide(void 0, Number.MAX_VALUE) : !this.Reveal.overview.isActive() && c ? this.Reveal.next({ skipFragments: e.altKey }) : this.Reveal.down({ skipFragments: e.altKey }) : 36 === i ? this.Reveal.slide(0) : 35 === i ? this.Reveal.slide(this.Reveal.getHorizontalSlides().length - 1) : 32 === i ? (this.Reveal.overview.isActive() && this.Reveal.overview.deactivate(), e.shiftKey ? this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.next({ skipFragments: e.altKey })) : 58 === i || 59 === i || 66 === i || 86 === i || 190 === i || 191 === i ? this.Reveal.togglePause() : 70 === i ? ((e) => { let t = (e = e || document.documentElement).requestFullscreen || e.webkitRequestFullscreen || e.webkitRequestFullScreen || e.mozRequestFullScreen || e.msRequestFullscreen; t && t.apply(e); })( t.embedded ? this.Reveal.getViewportElement() : document.documentElement ) : 65 === i ? t.autoSlideStoppable && this.Reveal.toggleAutoSlide(n) : 71 === i ? t.jumpToSlide && this.Reveal.toggleJumpToSlide() : (h = !1)), h ? e.preventDefault && e.preventDefault() : (27 !== i && 79 !== i) || (!1 === this.Reveal.closeOverlay() && this.Reveal.overview.toggle(), e.preventDefault && e.preventDefault()), this.Reveal.cueAutoSlide(); } } class T { constructor(e) { var t, i, n; (n = 1e3), (i = "MAX_REPLACE_STATE_FREQUENCY") in (t = this) ? Object.defineProperty(t, i, { value: n, enumerable: !0, configurable: !0, writable: !0, }) : (t[i] = n), (this.Reveal = e), (this.writeURLTimeout = 0), (this.replaceStateTimestamp = 0), (this.onWindowHashChange = this.onWindowHashChange.bind(this)); } bind() { window.addEventListener("hashchange", this.onWindowHashChange, !1); } unbind() { window.removeEventListener("hashchange", this.onWindowHashChange, !1); } getIndicesFromHash(e = window.location.hash, t = {}) { let i = e.replace(/^#\/?/, ""), n = i.split("/"); if (/^[0-9]*$/.test(n[0]) || !i.length) { const e = this.Reveal.getConfig(); let i, s = e.hashOneBasedIndex || t.oneBasedIndex ? 1 : 0, a = parseInt(n[0], 10) - s || 0, o = parseInt(n[1], 10) - s || 0; return ( e.fragmentInURL && ((i = parseInt(n[2], 10)), isNaN(i) && (i = void 0)), { h: a, v: o, f: i } ); } { let e, t; /\/[-\d]+$/g.test(i) && ((t = parseInt(i.split("/").pop(), 10)), (t = isNaN(t) ? void 0 : t), (i = i.split("/").shift())); try { e = document.getElementById(decodeURIComponent(i)); } catch (e) {} if (e) return { ...this.Reveal.getIndices(e), f: t }; } return null; } readURL() { const e = this.Reveal.getIndices(), t = this.getIndicesFromHash(); t ? (t.h === e.h && t.v === e.v && void 0 === t.f) || this.Reveal.slide(t.h, t.v, t.f) : this.Reveal.slide(e.h || 0, e.v || 0); } writeURL(e) { let t = this.Reveal.getConfig(), i = this.Reveal.getCurrentSlide(); if ((clearTimeout(this.writeURLTimeout), "number" == typeof e)) this.writeURLTimeout = setTimeout(this.writeURL, e); else if (i) { let e = this.getHash(); t.history ? (window.location.hash = e) : t.hash && ("/" === e ? this.debouncedReplaceState( window.location.pathname + window.location.search ) : this.debouncedReplaceState("#" + e)); } } replaceState(e) { window.history.replaceState(null, null, e), (this.replaceStateTimestamp = Date.now()); } debouncedReplaceState(e) { clearTimeout(this.replaceStateTimeout), Date.now() - this.replaceStateTimestamp > this.MAX_REPLACE_STATE_FREQUENCY ? this.replaceState(e) : (this.replaceStateTimeout = setTimeout( () => this.replaceState(e), this.MAX_REPLACE_STATE_FREQUENCY )); } getHash(e) { let t = "/", i = e || this.Reveal.getCurrentSlide(), n = i ? i.getAttribute("id") : null; n && (n = encodeURIComponent(n)); let s = this.Reveal.getIndices(e); if ( (this.Reveal.getConfig().fragmentInURL || (s.f = void 0), "string" == typeof n && n.length) ) (t = "/" + n), s.f >= 0 && (t += "/" + s.f); else { let e = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0; (s.h > 0 || s.v > 0 || s.f >= 0) && (t += s.h + e), (s.v > 0 || s.f >= 0) && (t += "/" + (s.v + e)), s.f >= 0 && (t += "/" + s.f); } return t; } onWindowHashChange(e) { this.readURL(); } } class D { constructor(e) { (this.Reveal = e), (this.onNavigateLeftClicked = this.onNavigateLeftClicked.bind(this)), (this.onNavigateRightClicked = this.onNavigateRightClicked.bind(this)), (this.onNavigateUpClicked = this.onNavigateUpClicked.bind(this)), (this.onNavigateDownClicked = this.onNavigateDownClicked.bind(this)), (this.onNavigatePrevClicked = this.onNavigatePrevClicked.bind(this)), (this.onNavigateNextClicked = this.onNavigateNextClicked.bind(this)); } render() { const e = this.Reveal.getConfig().rtl, i = this.Reveal.getRevealElement(); (this.element = document.createElement("aside")), (this.element.className = "controls"), (this.element.innerHTML = `\n\t\t\t\n\t\t\t\n\t\t\t`), this.Reveal.getRevealElement().appendChild(this.element), (this.controlsLeft = t(i, ".navigate-left")), (this.controlsRight = t(i, ".navigate-right")), (this.controlsUp = t(i, ".navigate-up")), (this.controlsDown = t(i, ".navigate-down")), (this.controlsPrev = t(i, ".navigate-prev")), (this.controlsNext = t(i, ".navigate-next")), (this.controlsRightArrow = this.element.querySelector(".navigate-right")), (this.controlsLeftArrow = this.element.querySelector(".navigate-left")), (this.controlsDownArrow = this.element.querySelector(".navigate-down")); } configure(e, t) { (this.element.style.display = e.controls ? "block" : "none"), this.element.setAttribute("data-controls-layout", e.controlsLayout), this.element.setAttribute( "data-controls-back-arrows", e.controlsBackArrows ); } bind() { let e = ["touchstart", "click"]; v && (e = ["touchstart"]), e.forEach((e) => { this.controlsLeft.forEach((t) => t.addEventListener(e, this.onNavigateLeftClicked, !1) ), this.controlsRight.forEach((t) => t.addEventListener(e, this.onNavigateRightClicked, !1) ), this.controlsUp.forEach((t) => t.addEventListener(e, this.onNavigateUpClicked, !1) ), this.controlsDown.forEach((t) => t.addEventListener(e, this.onNavigateDownClicked, !1) ), this.controlsPrev.forEach((t) => t.addEventListener(e, this.onNavigatePrevClicked, !1) ), this.controlsNext.forEach((t) => t.addEventListener(e, this.onNavigateNextClicked, !1) ); }); } unbind() { ["touchstart", "click"].forEach((e) => { this.controlsLeft.forEach((t) => t.removeEventListener(e, this.onNavigateLeftClicked, !1) ), this.controlsRight.forEach((t) => t.removeEventListener(e, this.onNavigateRightClicked, !1) ), this.controlsUp.forEach((t) => t.removeEventListener(e, this.onNavigateUpClicked, !1) ), this.controlsDown.forEach((t) => t.removeEventListener(e, this.onNavigateDownClicked, !1) ), this.controlsPrev.forEach((t) => t.removeEventListener(e, this.onNavigatePrevClicked, !1) ), this.controlsNext.forEach((t) => t.removeEventListener(e, this.onNavigateNextClicked, !1) ); }); } update() { let e = this.Reveal.availableRoutes(); [ ...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext, ].forEach((e) => { e.classList.remove("enabled", "fragmented"), e.setAttribute("disabled", "disabled"); }), e.left && this.controlsLeft.forEach((e) => { e.classList.add("enabled"), e.removeAttribute("disabled"); }), e.right && this.controlsRight.forEach((e) => { e.classList.add("enabled"), e.removeAttribute("disabled"); }), e.up && this.controlsUp.forEach((e) => { e.classList.add("enabled"), e.removeAttribute("disabled"); }), e.down && this.controlsDown.forEach((e) => { e.classList.add("enabled"), e.removeAttribute("disabled"); }), (e.left || e.up) && this.controlsPrev.forEach((e) => { e.classList.add("enabled"), e.removeAttribute("disabled"); }), (e.right || e.down) && this.controlsNext.forEach((e) => { e.classList.add("enabled"), e.removeAttribute("disabled"); }); let t = this.Reveal.getCurrentSlide(); if (t) { let e = this.Reveal.fragments.availableRoutes(); e.prev && this.controlsPrev.forEach((e) => { e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled"); }), e.next && this.controlsNext.forEach((e) => { e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled"); }), this.Reveal.isVerticalSlide(t) ? (e.prev && this.controlsUp.forEach((e) => { e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled"); }), e.next && this.controlsDown.forEach((e) => { e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled"); })) : (e.prev && this.controlsLeft.forEach((e) => { e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled"); }), e.next && this.controlsRight.forEach((e) => { e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled"); })); } if (this.Reveal.getConfig().controlsTutorial) { let t = this.Reveal.getIndices(); !this.Reveal.hasNavigatedVertically() && e.down ? this.controlsDownArrow.classList.add("highlight") : (this.controlsDownArrow.classList.remove("highlight"), this.Reveal.getConfig().rtl ? !this.Reveal.hasNavigatedHorizontally() && e.left && 0 === t.v ? this.controlsLeftArrow.classList.add("highlight") : this.controlsLeftArrow.classList.remove("highlight") : !this.Reveal.hasNavigatedHorizontally() && e.right && 0 === t.v ? this.controlsRightArrow.classList.add("highlight") : this.controlsRightArrow.classList.remove("highlight")); } } destroy() { this.unbind(), this.element.remove(); } onNavigateLeftClicked(e) { e.preventDefault(), this.Reveal.onUserInput(), "linear" === this.Reveal.getConfig().navigationMode ? this.Reveal.prev() : this.Reveal.left(); } onNavigateRightClicked(e) { e.preventDefault(), this.Reveal.onUserInput(), "linear" === this.Reveal.getConfig().navigationMode ? this.Reveal.next() : this.Reveal.right(); } onNavigateUpClicked(e) { e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.up(); } onNavigateDownClicked(e) { e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.down(); } onNavigatePrevClicked(e) { e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.prev(); } onNavigateNextClicked(e) { e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.next(); } } class F { constructor(e) { (this.Reveal = e), (this.onProgressClicked = this.onProgressClicked.bind(this)); } render() { (this.element = document.createElement("div")), (this.element.className = "progress"), this.Reveal.getRevealElement().appendChild(this.element), (this.bar = document.createElement("span")), this.element.appendChild(this.bar); } configure(e, t) { this.element.style.display = e.progress ? "block" : "none"; } bind() { this.Reveal.getConfig().progress && this.element && this.element.addEventListener("click", this.onProgressClicked, !1); } unbind() { this.Reveal.getConfig().progress && this.element && this.element.removeEventListener("click", this.onProgressClicked, !1); } update() { if (this.Reveal.getConfig().progress && this.bar) { let e = this.Reveal.getProgress(); this.Reveal.getTotalSlides() < 2 && (e = 0), (this.bar.style.transform = "scaleX(" + e + ")"); } } getMaxWidth() { return this.Reveal.getRevealElement().offsetWidth; } onProgressClicked(e) { this.Reveal.onUserInput(e), e.preventDefault(); let t = this.Reveal.getSlides(), i = t.length, n = Math.floor((e.clientX / this.getMaxWidth()) * i); this.Reveal.getConfig().rtl && (n = i - n); let s = this.Reveal.getIndices(t[n]); this.Reveal.slide(s.h, s.v); } destroy() { this.element.remove(); } } class z { constructor(e) { (this.Reveal = e), (this.lastMouseWheelStep = 0), (this.cursorHidden = !1), (this.cursorInactiveTimeout = 0), (this.onDocumentCursorActive = this.onDocumentCursorActive.bind(this)), (this.onDocumentMouseScroll = this.onDocumentMouseScroll.bind(this)); } configure(e, t) { e.mouseWheel ? (document.addEventListener( "DOMMouseScroll", this.onDocumentMouseScroll, !1 ), document.addEventListener( "mousewheel", this.onDocumentMouseScroll, !1 )) : (document.removeEventListener( "DOMMouseScroll", this.onDocumentMouseScroll, !1 ), document.removeEventListener( "mousewheel", this.onDocumentMouseScroll, !1 )), e.hideInactiveCursor ? (document.addEventListener( "mousemove", this.onDocumentCursorActive, !1 ), document.addEventListener( "mousedown", this.onDocumentCursorActive, !1 )) : (this.showCursor(), document.removeEventListener( "mousemove", this.onDocumentCursorActive, !1 ), document.removeEventListener( "mousedown", this.onDocumentCursorActive, !1 )); } showCursor() { this.cursorHidden && ((this.cursorHidden = !1), (this.Reveal.getRevealElement().style.cursor = "")); } hideCursor() { !1 === this.cursorHidden && ((this.cursorHidden = !0), (this.Reveal.getRevealElement().style.cursor = "none")); } destroy() { this.showCursor(), document.removeEventListener( "DOMMouseScroll", this.onDocumentMouseScroll, !1 ), document.removeEventListener( "mousewheel", this.onDocumentMouseScroll, !1 ), document.removeEventListener( "mousemove", this.onDocumentCursorActive, !1 ), document.removeEventListener( "mousedown", this.onDocumentCursorActive, !1 ); } onDocumentCursorActive(e) { this.showCursor(), clearTimeout(this.cursorInactiveTimeout), (this.cursorInactiveTimeout = setTimeout( this.hideCursor.bind(this), this.Reveal.getConfig().hideCursorTime )); } onDocumentMouseScroll(e) { if (Date.now() - this.lastMouseWheelStep > 1e3) { this.lastMouseWheelStep = Date.now(); let t = e.detail || -e.wheelDelta; t > 0 ? this.Reveal.next() : t < 0 && this.Reveal.prev(); } } } const H = (e, t) => { const i = document.createElement("script"); (i.type = "text/javascript"), (i.async = !1), (i.defer = !1), (i.src = e), "function" == typeof t && ((i.onload = i.onreadystatechange = (e) => { ("load" === e.type || /loaded|complete/.test(i.readyState)) && ((i.onload = i.onreadystatechange = i.onerror = null), t()); }), (i.onerror = (e) => { (i.onload = i.onreadystatechange = i.onerror = null), t(new Error("Failed loading script: " + i.src + "\n" + e)); })); const n = document.querySelector("head"); n.insertBefore(i, n.lastChild); }; class B { constructor(e) { (this.Reveal = e), (this.state = "idle"), (this.registeredPlugins = {}), (this.asyncDependencies = []); } load(e, t) { return ( (this.state = "loading"), e.forEach(this.registerPlugin.bind(this)), new Promise((e) => { let i = [], n = 0; if ( (t.forEach((e) => { (e.condition && !e.condition()) || (e.async ? this.asyncDependencies.push(e) : i.push(e)); }), i.length) ) { n = i.length; const t = (t) => { t && "function" == typeof t.callback && t.callback(), 0 == --n && this.initPlugins().then(e); }; i.forEach((e) => { "string" == typeof e.id ? (this.registerPlugin(e), t(e)) : "string" == typeof e.src ? H(e.src, () => t(e)) : (console.warn("Unrecognized plugin format", e), t()); }); } else this.initPlugins().then(e); }) ); } initPlugins() { return new Promise((e) => { let t = Object.values(this.registeredPlugins), i = t.length; if (0 === i) this.loadAsync().then(e); else { let n, s = () => { 0 == --i ? this.loadAsync().then(e) : n(); }, a = 0; (n = () => { let e = t[a++]; if ("function" == typeof e.init) { let t = e.init(this.Reveal); t && "function" == typeof t.then ? t.then(s) : s(); } else s(); }), n(); } }); } loadAsync() { return ( (this.state = "loaded"), this.asyncDependencies.length && this.asyncDependencies.forEach((e) => { H(e.src, e.callback); }), Promise.resolve() ); } registerPlugin(e) { 2 === arguments.length && "string" == typeof arguments[0] ? ((e = arguments[1]).id = arguments[0]) : "function" == typeof e && (e = e()); let t = e.id; "string" != typeof t ? console.warn("Unrecognized plugin format; can't find plugin.id", e) : void 0 === this.registeredPlugins[t] ? ((this.registeredPlugins[t] = e), "loaded" === this.state && "function" == typeof e.init && e.init(this.Reveal)) : console.warn( 'reveal.js: "' + t + '" plugin has already been registered' ); } hasPlugin(e) { return !!this.registeredPlugins[e]; } getPlugin(e) { return this.registeredPlugins[e]; } getRegisteredPlugins() { return this.registeredPlugins; } destroy() { Object.values(this.registeredPlugins).forEach((e) => { "function" == typeof e.destroy && e.destroy(); }), (this.registeredPlugins = {}), (this.asyncDependencies = []); } } class O { constructor(e) { this.Reveal = e; } async setupPDF() { const e = this.Reveal.getConfig(), i = t(this.Reveal.getRevealElement(), S), n = e.slideNumber && /all|print/i.test(e.showSlideNumber), s = this.Reveal.getComputedSlideSize( window.innerWidth, window.innerHeight ), a = Math.floor(s.width * (1 + e.margin)), o = Math.floor(s.height * (1 + e.margin)), r = s.width, d = s.height; await new Promise(requestAnimationFrame), l("@page{size:" + a + "px " + o + "px; margin: 0px;}"), l( ".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: " + r + "px; max-height:" + d + "px}" ), document.documentElement.classList.add("print-pdf"), (document.body.style.width = a + "px"), (document.body.style.height = o + "px"); const c = document.querySelector(".reveal-viewport"); let h; if (c) { const e = window.getComputedStyle(c); e && e.background && (h = e.background); } await new Promise(requestAnimationFrame), this.Reveal.layoutSlideContents(r, d), await new Promise(requestAnimationFrame); const u = i.map((e) => e.scrollHeight), g = [], v = i[0].parentNode; let p = 1; i.forEach(function (i, s) { if (!1 === i.classList.contains("stack")) { let l = (a - r) / 2, c = (o - d) / 2; const v = u[s]; let m = Math.max(Math.ceil(v / o), 1); (m = Math.min(m, e.pdfMaxPagesPerSlide)), ((1 === m && e.center) || i.classList.contains("center")) && (c = Math.max((o - v) / 2, 0)); const f = document.createElement("div"); if ( (g.push(f), (f.className = "pdf-page"), (f.style.height = (o + e.pdfPageHeightOffset) * m + "px"), h && (f.style.background = h), f.appendChild(i), (i.style.left = l + "px"), (i.style.top = c + "px"), (i.style.width = r + "px"), this.Reveal.slideContent.layout(i), i.slideBackgroundElement && f.insertBefore(i.slideBackgroundElement, i), e.showNotes) ) { const t = this.Reveal.getSlideNotes(i); if (t) { const i = 8, n = "string" == typeof e.showNotes ? e.showNotes : "inline", s = document.createElement("div"); s.classList.add("speaker-notes"), s.classList.add("speaker-notes-pdf"), s.setAttribute("data-layout", n), (s.innerHTML = t), "separate-page" === n ? g.push(s) : ((s.style.left = i + "px"), (s.style.bottom = i + "px"), (s.style.width = a - 2 * i + "px"), f.appendChild(s)); } } if (n) { const e = document.createElement("div"); e.classList.add("slide-number"), e.classList.add("slide-number-pdf"), (e.innerHTML = p++), f.appendChild(e); } if (e.pdfSeparateFragments) { const e = this.Reveal.fragments.sort( f.querySelectorAll(".fragment"), !0 ); let t; e.forEach(function (e, i) { t && t.forEach(function (e) { e.classList.remove("current-fragment"); }), e.forEach(function (e) { e.classList.add("visible", "current-fragment"); }, this); const s = f.cloneNode(!0); if (n) { const e = i + 1; s.querySelector(".slide-number-pdf").innerHTML += "." + e; } g.push(s), (t = e); }, this), e.forEach(function (e) { e.forEach(function (e) { e.classList.remove("visible", "current-fragment"); }); }); } else t(f, ".fragment:not(.fade-out)").forEach(function (e) { e.classList.add("visible"); }); } }, this), await new Promise(requestAnimationFrame), g.forEach((e) => v.appendChild(e)), this.Reveal.slideContent.layout(this.Reveal.getSlidesElement()), this.Reveal.dispatchEvent({ type: "pdf-ready" }); } isPrintingPDF() { return /print-pdf/gi.test(window.location.search); } } class q { constructor(e) { (this.Reveal = e), (this.touchStartX = 0), (this.touchStartY = 0), (this.touchStartCount = 0), (this.touchCaptured = !1), (this.onPointerDown = this.onPointerDown.bind(this)), (this.onPointerMove = this.onPointerMove.bind(this)), (this.onPointerUp = this.onPointerUp.bind(this)), (this.onTouchStart = this.onTouchStart.bind(this)), (this.onTouchMove = this.onTouchMove.bind(this)), (this.onTouchEnd = this.onTouchEnd.bind(this)); } bind() { let e = this.Reveal.getRevealElement(); "onpointerdown" in window ? (e.addEventListener("pointerdown", this.onPointerDown, !1), e.addEventListener("pointermove", this.onPointerMove, !1), e.addEventListener("pointerup", this.onPointerUp, !1)) : window.navigator.msPointerEnabled ? (e.addEventListener("MSPointerDown", this.onPointerDown, !1), e.addEventListener("MSPointerMove", this.onPointerMove, !1), e.addEventListener("MSPointerUp", this.onPointerUp, !1)) : (e.addEventListener("touchstart", this.onTouchStart, !1), e.addEventListener("touchmove", this.onTouchMove, !1), e.addEventListener("touchend", this.onTouchEnd, !1)); } unbind() { let e = this.Reveal.getRevealElement(); e.removeEventListener("pointerdown", this.onPointerDown, !1), e.removeEventListener("pointermove", this.onPointerMove, !1), e.removeEventListener("pointerup", this.onPointerUp, !1), e.removeEventListener("MSPointerDown", this.onPointerDown, !1), e.removeEventListener("MSPointerMove", this.onPointerMove, !1), e.removeEventListener("MSPointerUp", this.onPointerUp, !1), e.removeEventListener("touchstart", this.onTouchStart, !1), e.removeEventListener("touchmove", this.onTouchMove, !1), e.removeEventListener("touchend", this.onTouchEnd, !1); } isSwipePrevented(e) { if (a(e, "video, audio")) return !0; for (; e && "function" == typeof e.hasAttribute; ) { if (e.hasAttribute("data-prevent-swipe")) return !0; e = e.parentNode; } return !1; } onTouchStart(e) { if (this.isSwipePrevented(e.target)) return !0; (this.touchStartX = e.touches[0].clientX), (this.touchStartY = e.touches[0].clientY), (this.touchStartCount = e.touches.length); } onTouchMove(e) { if (this.isSwipePrevented(e.target)) return !0; let t = this.Reveal.getConfig(); if (this.touchCaptured) v && e.preventDefault(); else { this.Reveal.onUserInput(e); let i = e.touches[0].clientX, n = e.touches[0].clientY; if (1 === e.touches.length && 2 !== this.touchStartCount) { let s = this.Reveal.availableRoutes({ includeFragments: !0 }), a = i - this.touchStartX, o = n - this.touchStartY; a > 40 && Math.abs(a) > Math.abs(o) ? ((this.touchCaptured = !0), "linear" === t.navigationMode ? t.rtl ? this.Reveal.next() : this.Reveal.prev() : this.Reveal.left()) : a < -40 && Math.abs(a) > Math.abs(o) ? ((this.touchCaptured = !0), "linear" === t.navigationMode ? t.rtl ? this.Reveal.prev() : this.Reveal.next() : this.Reveal.right()) : o > 40 && s.up ? ((this.touchCaptured = !0), "linear" === t.navigationMode ? this.Reveal.prev() : this.Reveal.up()) : o < -40 && s.down && ((this.touchCaptured = !0), "linear" === t.navigationMode ? this.Reveal.next() : this.Reveal.down()), t.embedded ? (this.touchCaptured || this.Reveal.isVerticalSlide()) && e.preventDefault() : e.preventDefault(); } } } onTouchEnd(e) { this.touchCaptured = !1; } onPointerDown(e) { (e.pointerType !== e.MSPOINTER_TYPE_TOUCH && "touch" !== e.pointerType) || ((e.touches = [{ clientX: e.clientX, clientY: e.clientY }]), this.onTouchStart(e)); } onPointerMove(e) { (e.pointerType !== e.MSPOINTER_TYPE_TOUCH && "touch" !== e.pointerType) || ((e.touches = [{ clientX: e.clientX, clientY: e.clientY }]), this.onTouchMove(e)); } onPointerUp(e) { (e.pointerType !== e.MSPOINTER_TYPE_TOUCH && "touch" !== e.pointerType) || ((e.touches = [{ clientX: e.clientX, clientY: e.clientY }]), this.onTouchEnd(e)); } } const U = "focus", j = "blur"; class W { constructor(e) { (this.Reveal = e), (this.onRevealPointerDown = this.onRevealPointerDown.bind(this)), (this.onDocumentPointerDown = this.onDocumentPointerDown.bind(this)); } configure(e, t) { e.embedded ? this.blur() : (this.focus(), this.unbind()); } bind() { this.Reveal.getConfig().embedded && this.Reveal.getRevealElement().addEventListener( "pointerdown", this.onRevealPointerDown, !1 ); } unbind() { this.Reveal.getRevealElement().removeEventListener( "pointerdown", this.onRevealPointerDown, !1 ), document.removeEventListener( "pointerdown", this.onDocumentPointerDown, !1 ); } focus() { this.state !== U && (this.Reveal.getRevealElement().classList.add("focused"), document.addEventListener( "pointerdown", this.onDocumentPointerDown, !1 )), (this.state = U); } blur() { this.state !== j && (this.Reveal.getRevealElement().classList.remove("focused"), document.removeEventListener( "pointerdown", this.onDocumentPointerDown, !1 )), (this.state = j); } isFocused() { return this.state === U; } destroy() { this.Reveal.getRevealElement().classList.remove("focused"); } onRevealPointerDown(e) { this.focus(); } onDocumentPointerDown(e) { let t = o(e.target, ".reveal"); (t && t === this.Reveal.getRevealElement()) || this.blur(); } } class K { constructor(e) { this.Reveal = e; } render() { (this.element = document.createElement("div")), (this.element.className = "speaker-notes"), this.element.setAttribute("data-prevent-swipe", ""), this.element.setAttribute("tabindex", "0"), this.Reveal.getRevealElement().appendChild(this.element); } configure(e, t) { e.showNotes && this.element.setAttribute( "data-layout", "string" == typeof e.showNotes ? e.showNotes : "inline" ); } update() { this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.print.isPrintingPDF() && (this.element.innerHTML = this.getSlideNotes() || 'No notes on this slide.'); } updateVisibility() { this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.print.isPrintingPDF() ? this.Reveal.getRevealElement().classList.add("show-notes") : this.Reveal.getRevealElement().classList.remove("show-notes"); } hasNotes() { return ( this.Reveal.getSlidesElement().querySelectorAll( "[data-notes], aside.notes" ).length > 0 ); } isSpeakerNotesWindow() { return !!window.location.search.match(/receiver/gi); } getSlideNotes(e = this.Reveal.getCurrentSlide()) { if (e.hasAttribute("data-notes")) return e.getAttribute("data-notes"); let t = e.querySelectorAll("aside.notes"); return t ? Array.from(t) .map((e) => e.innerHTML) .join("\n") : null; } destroy() { this.element.remove(); } } class V { constructor(e, t) { (this.diameter = 100), (this.diameter2 = this.diameter / 2), (this.thickness = 6), (this.playing = !1), (this.progress = 0), (this.progressOffset = 1), (this.container = e), (this.progressCheck = t), (this.canvas = document.createElement("canvas")), (this.canvas.className = "playback"), (this.canvas.width = this.diameter), (this.canvas.height = this.diameter), (this.canvas.style.width = this.diameter2 + "px"), (this.canvas.style.height = this.diameter2 + "px"), (this.context = this.canvas.getContext("2d")), this.container.appendChild(this.canvas), this.render(); } setPlaying(e) { const t = this.playing; (this.playing = e), !t && this.playing ? this.animate() : this.render(); } animate() { const e = this.progress; (this.progress = this.progressCheck()), e > 0.8 && this.progress < 0.2 && (this.progressOffset = this.progress), this.render(), this.playing && requestAnimationFrame(this.animate.bind(this)); } render() { let e = this.playing ? this.progress : 0, t = this.diameter2 - this.thickness, i = this.diameter2, n = this.diameter2, s = 28; this.progressOffset += 0.1 * (1 - this.progressOffset); const a = -Math.PI / 2 + e * (2 * Math.PI), o = -Math.PI / 2 + this.progressOffset * (2 * Math.PI); this.context.save(), this.context.clearRect(0, 0, this.diameter, this.diameter), this.context.beginPath(), this.context.arc(i, n, t + 4, 0, 2 * Math.PI, !1), (this.context.fillStyle = "rgba( 0, 0, 0, 0.4 )"), this.context.fill(), this.context.beginPath(), this.context.arc(i, n, t, 0, 2 * Math.PI, !1), (this.context.lineWidth = this.thickness), (this.context.strokeStyle = "rgba( 255, 255, 255, 0.2 )"), this.context.stroke(), this.playing && (this.context.beginPath(), this.context.arc(i, n, t, o, a, !1), (this.context.lineWidth = this.thickness), (this.context.strokeStyle = "#fff"), this.context.stroke()), this.context.translate(i - 14, n - 14), this.playing ? ((this.context.fillStyle = "#fff"), this.context.fillRect(0, 0, 10, s), this.context.fillRect(18, 0, 10, s)) : (this.context.beginPath(), this.context.translate(4, 0), this.context.moveTo(0, 0), this.context.lineTo(24, 14), this.context.lineTo(0, s), (this.context.fillStyle = "#fff"), this.context.fill()), this.context.restore(); } on(e, t) { this.canvas.addEventListener(e, t, !1); } off(e, t) { this.canvas.removeEventListener(e, t, !1); } destroy() { (this.playing = !1), this.canvas.parentNode && this.container.removeChild(this.canvas); } } var $ = { width: 960, height: 700, margin: 0.04, minScale: 0.2, maxScale: 2, controls: !0, controlsTutorial: !0, controlsLayout: "bottom-right", controlsBackArrows: "faded", progress: !0, slideNumber: !1, showSlideNumber: "all", hashOneBasedIndex: !1, hash: !1, respondToHashChanges: !0, jumpToSlide: !0, history: !1, keyboard: !0, keyboardCondition: null, disableLayout: !1, overview: !0, center: !0, touch: !0, loop: !1, rtl: !1, navigationMode: "default", shuffle: !1, fragments: !0, fragmentInURL: !0, embedded: !1, help: !0, pause: !0, showNotes: !1, showHiddenSlides: !1, autoPlayMedia: null, preloadIframes: null, autoAnimate: !0, autoAnimateMatcher: null, autoAnimateEasing: "ease", autoAnimateDuration: 1, autoAnimateUnmatched: !0, autoAnimateStyles: [ "opacity", "color", "background-color", "padding", "font-size", "line-height", "letter-spacing", "border-width", "border-color", "border-radius", "outline", "outline-offset", ], autoSlide: 0, autoSlideStoppable: !0, autoSlideMethod: null, defaultTiming: null, mouseWheel: !1, previewLinks: !1, postMessage: !0, postMessageEvents: !1, focusBodyOnPageVisibilityChange: !0, transition: "slide", transitionSpeed: "default", backgroundTransition: "fade", parallaxBackgroundImage: "", parallaxBackgroundSize: "", parallaxBackgroundRepeat: "", parallaxBackgroundPosition: "", parallaxBackgroundHorizontal: null, parallaxBackgroundVertical: null, pdfMaxPagesPerSlide: Number.POSITIVE_INFINITY, pdfSeparateFragments: !0, pdfPageHeightOffset: -1, viewDistance: 3, mobileViewDistance: 2, display: "block", hideInactiveCursor: !0, hideCursorTime: 5e3, sortFragmentsOnSync: !0, dependencies: [], plugins: [], }; const X = "4.5.0"; function Y(a, l) { arguments.length < 2 && ((l = arguments[0]), (a = document.querySelector(".reveal"))); const h = {}; let u, v, p, m, f, E = {}, C = !1, x = { hasNavigatedHorizontally: !1, hasNavigatedVertically: !1 }, H = [], U = 1, j = { layout: "", overview: "" }, Y = {}, _ = "idle", J = 0, G = 0, Q = -1, Z = !1, ee = new b(h), te = new y(h), ie = new w(h), ne = new P(h), se = new R(h), ae = new N(h), oe = new M(h), re = new I(h), le = new T(h), de = new D(h), ce = new F(h), he = new z(h), ue = new B(h), ge = new O(h), ve = new W(h), pe = new q(h), me = new K(h); function fe(e) { if (!a) throw 'Unable to find presentation root (
).'; if (((Y.wrapper = a), (Y.slides = a.querySelector(".slides")), !Y.slides)) throw 'Unable to find slides container (
).'; return ( (E = { ...$, ...E, ...l, ...e, ...d() }), be(), window.addEventListener("load", We, !1), ue.load(E.plugins, E.dependencies).then(ye), new Promise((e) => h.on("ready", e)) ); } function be() { !0 === E.embedded ? (Y.viewport = o(a, ".reveal-viewport") || a) : ((Y.viewport = document.body), document.documentElement.classList.add("reveal-full-page")), Y.viewport.classList.add("reveal-viewport"); } function ye() { (C = !0), we(), Ee(), Ce(), ke(), Le(), lt(), xe(), le.readURL(), se.update(!0), setTimeout(() => { Y.slides.classList.remove("no-transition"), Y.wrapper.classList.add("ready"), Fe({ type: "ready", data: { indexh: u, indexv: v, currentSlide: m }, }); }, 1), ge.isPrintingPDF() && (Ne(), "complete" === document.readyState ? ge.setupPDF() : window.addEventListener("load", () => { ge.setupPDF(); })); } function we() { E.showHiddenSlides || t(Y.wrapper, 'section[data-visibility="hidden"]').forEach((e) => { e.parentNode.removeChild(e); }); } function Ee() { Y.slides.classList.add("no-transition"), g ? Y.wrapper.classList.add("no-hover") : Y.wrapper.classList.remove("no-hover"), se.render(), te.render(), ie.render(), de.render(), ce.render(), me.render(), (Y.pauseOverlay = r( Y.wrapper, "div", "pause-overlay", E.controls ? '' : null )), (Y.statusElement = Re()), Y.wrapper.setAttribute("role", "application"); } function Re() { let e = Y.wrapper.querySelector(".aria-status"); return ( e || ((e = document.createElement("div")), (e.style.position = "absolute"), (e.style.height = "1px"), (e.style.width = "1px"), (e.style.overflow = "hidden"), (e.style.clip = "rect( 1px, 1px, 1px, 1px )"), e.classList.add("aria-status"), e.setAttribute("aria-live", "polite"), e.setAttribute("aria-atomic", "true"), Y.wrapper.appendChild(e)), e ); } function Se(e) { Y.statusElement.textContent = e; } function Ae(e) { let t = ""; if (3 === e.nodeType) t += e.textContent; else if (1 === e.nodeType) { let i = e.getAttribute("aria-hidden"), n = "none" === window.getComputedStyle(e).display; "true" === i || n || Array.from(e.childNodes).forEach((e) => { t += Ae(e); }); } return (t = t.trim()), "" === t ? "" : t + " "; } function ke() { setInterval(() => { (0 === Y.wrapper.scrollTop && 0 === Y.wrapper.scrollLeft) || ((Y.wrapper.scrollTop = 0), (Y.wrapper.scrollLeft = 0)); }, 1e3); } function Le() { document.addEventListener("fullscreenchange", $t), document.addEventListener("webkitfullscreenchange", $t); } function Ce() { E.postMessage && window.addEventListener("message", Ut, !1); } function xe(t) { const n = { ...E }; if (("object" == typeof t && e(E, t), !1 === h.isReady())) return; const s = Y.wrapper.querySelectorAll(S).length; Y.wrapper.classList.remove(n.transition), Y.wrapper.classList.add(E.transition), Y.wrapper.setAttribute("data-transition-speed", E.transitionSpeed), Y.wrapper.setAttribute( "data-background-transition", E.backgroundTransition ), Y.viewport.style.setProperty("--slide-width", E.width + "px"), Y.viewport.style.setProperty("--slide-height", E.height + "px"), E.shuffle && dt(), i(Y.wrapper, "embedded", E.embedded), i(Y.wrapper, "rtl", E.rtl), i(Y.wrapper, "center", E.center), !1 === E.pause && Ze(), E.previewLinks ? (He(), Be("[data-preview-link=false]")) : (Be(), He("[data-preview-link]:not([data-preview-link=false])")), ne.reset(), f && (f.destroy(), (f = null)), s > 1 && E.autoSlide && E.autoSlideStoppable && ((f = new V(Y.wrapper, () => Math.min(Math.max((Date.now() - Q) / J, 0), 1) )), f.on("click", Yt), (Z = !1)), "default" !== E.navigationMode ? Y.wrapper.setAttribute("data-navigation-mode", E.navigationMode) : Y.wrapper.removeAttribute("data-navigation-mode"), me.configure(E, n), ve.configure(E, n), he.configure(E, n), de.configure(E, n), ce.configure(E, n), re.configure(E, n), ae.configure(E, n), te.configure(E, n), ot(); } function Pe() { window.addEventListener("resize", Kt, !1), E.touch && pe.bind(), E.keyboard && re.bind(), E.progress && ce.bind(), E.respondToHashChanges && le.bind(), de.bind(), ve.bind(), Y.slides.addEventListener("click", Wt, !1), Y.slides.addEventListener("transitionend", jt, !1), Y.pauseOverlay.addEventListener("click", Ze, !1), E.focusBodyOnPageVisibilityChange && document.addEventListener("visibilitychange", Vt, !1); } function Ne() { pe.unbind(), ve.unbind(), re.unbind(), de.unbind(), ce.unbind(), le.unbind(), window.removeEventListener("resize", Kt, !1), Y.slides.removeEventListener("click", Wt, !1), Y.slides.removeEventListener("transitionend", jt, !1), Y.pauseOverlay.removeEventListener("click", Ze, !1); } function Me() { Ne(), Mt(), Be(), me.destroy(), ve.destroy(), ue.destroy(), he.destroy(), de.destroy(), ce.destroy(), se.destroy(), te.destroy(), ie.destroy(), document.removeEventListener("fullscreenchange", $t), document.removeEventListener("webkitfullscreenchange", $t), document.removeEventListener("visibilitychange", Vt, !1), window.removeEventListener("message", Ut, !1), window.removeEventListener("load", We, !1), Y.pauseOverlay && Y.pauseOverlay.remove(), Y.statusElement && Y.statusElement.remove(), document.documentElement.classList.remove("reveal-full-page"), Y.wrapper.classList.remove( "ready", "center", "has-horizontal-slides", "has-vertical-slides" ), Y.wrapper.removeAttribute("data-transition-speed"), Y.wrapper.removeAttribute("data-background-transition"), Y.viewport.classList.remove("reveal-viewport"), Y.viewport.style.removeProperty("--slide-width"), Y.viewport.style.removeProperty("--slide-height"), Y.slides.style.removeProperty("width"), Y.slides.style.removeProperty("height"), Y.slides.style.removeProperty("zoom"), Y.slides.style.removeProperty("left"), Y.slides.style.removeProperty("top"), Y.slides.style.removeProperty("bottom"), Y.slides.style.removeProperty("right"), Y.slides.style.removeProperty("transform"), Array.from(Y.wrapper.querySelectorAll(S)).forEach((e) => { e.style.removeProperty("display"), e.style.removeProperty("top"), e.removeAttribute("hidden"), e.removeAttribute("aria-hidden"); }); } function Ie(e, t, i) { a.addEventListener(e, t, i); } function Te(e, t, i) { a.removeEventListener(e, t, i); } function De(e) { "string" == typeof e.layout && (j.layout = e.layout), "string" == typeof e.overview && (j.overview = e.overview), j.layout ? s(Y.slides, j.layout + " " + j.overview) : s(Y.slides, j.overview); } function Fe({ target: t = Y.wrapper, type: i, data: n, bubbles: s = !0 }) { let a = document.createEvent("HTMLEvents", 1, 2); return ( a.initEvent(i, s, !0), e(a, n), t.dispatchEvent(a), t === Y.wrapper && ze(i), a ); } function ze(t, i) { if (E.postMessageEvents && window.parent !== window.self) { let n = { namespace: "reveal", eventName: t, state: xt() }; e(n, i), window.parent.postMessage(JSON.stringify(n), "*"); } } function He(e = "a") { Array.from(Y.wrapper.querySelectorAll(e)).forEach((e) => { /^(http|www)/gi.test(e.getAttribute("href")) && e.addEventListener("click", Xt, !1); }); } function Be(e = "a") { Array.from(Y.wrapper.querySelectorAll(e)).forEach((e) => { /^(http|www)/gi.test(e.getAttribute("href")) && e.removeEventListener("click", Xt, !1); }); } function Oe(e) { je(), (Y.overlay = document.createElement("div")), Y.overlay.classList.add("overlay"), Y.overlay.classList.add("overlay-preview"), Y.wrapper.appendChild(Y.overlay), (Y.overlay.innerHTML = `
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site's policy (x-frame-options).\n\t\t\t\t\n\t\t\t
`), Y.overlay.querySelector("iframe").addEventListener( "load", (e) => { Y.overlay.classList.add("loaded"); }, !1 ), Y.overlay.querySelector(".close").addEventListener( "click", (e) => { je(), e.preventDefault(); }, !1 ), Y.overlay.querySelector(".external").addEventListener( "click", (e) => { je(); }, !1 ); } function qe(e) { "boolean" == typeof e ? (e ? Ue() : je()) : Y.overlay ? je() : Ue(); } function Ue() { if (E.help) { je(), (Y.overlay = document.createElement("div")), Y.overlay.classList.add("overlay"), Y.overlay.classList.add("overlay-help"), Y.wrapper.appendChild(Y.overlay); let e = '

Keyboard Shortcuts


', t = re.getShortcuts(), i = re.getBindings(); e += ""; for (let i in t) e += ``; for (let t in i) i[t].key && i[t].description && (e += ``); (e += "
KEYACTION
${i}${t[i]}
${i[t].key}${i[t].description}
"), (Y.overlay.innerHTML = `\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${e}
\n\t\t\t\t
\n\t\t\t`), Y.overlay.querySelector(".close").addEventListener( "click", (e) => { je(), e.preventDefault(); }, !1 ); } } function je() { return ( !!Y.overlay && (Y.overlay.parentNode.removeChild(Y.overlay), (Y.overlay = null), !0) ); } function We() { if (Y.wrapper && !ge.isPrintingPDF()) { if (!E.disableLayout) { g && !E.embedded && document.documentElement.style.setProperty( "--vh", 0.01 * window.innerHeight + "px" ); const e = Ve(), t = U; Ke(E.width, E.height), (Y.slides.style.width = e.width + "px"), (Y.slides.style.height = e.height + "px"), (U = Math.min( e.presentationWidth / e.width, e.presentationHeight / e.height )), (U = Math.max(U, E.minScale)), (U = Math.min(U, E.maxScale)), 1 === U ? ((Y.slides.style.zoom = ""), (Y.slides.style.left = ""), (Y.slides.style.top = ""), (Y.slides.style.bottom = ""), (Y.slides.style.right = ""), De({ layout: "" })) : ((Y.slides.style.zoom = ""), (Y.slides.style.left = "50%"), (Y.slides.style.top = "50%"), (Y.slides.style.bottom = "auto"), (Y.slides.style.right = "auto"), De({ layout: "translate(-50%, -50%) scale(" + U + ")" })); const i = Array.from(Y.wrapper.querySelectorAll(S)); for (let t = 0, n = i.length; t < n; t++) { const n = i[t]; "none" !== n.style.display && (E.center || n.classList.contains("center") ? n.classList.contains("stack") ? (n.style.top = 0) : (n.style.top = Math.max((e.height - n.scrollHeight) / 2, 0) + "px") : (n.style.top = "")); } t !== U && Fe({ type: "resize", data: { oldScale: t, scale: U, size: e } }); } Y.viewport.style.setProperty("--slide-scale", U), ce.update(), se.updateParallax(), oe.isActive() && oe.update(); } } function Ke(e, i) { t(Y.slides, "section > .stretch, section > .r-stretch").forEach((t) => { let n = c(t, i); if (/(img|video)/gi.test(t.nodeName)) { const i = t.naturalWidth || t.videoWidth, s = t.naturalHeight || t.videoHeight, a = Math.min(e / i, n / s); (t.style.width = i * a + "px"), (t.style.height = s * a + "px"); } else (t.style.width = e + "px"), (t.style.height = n + "px"); }); } function Ve(e, t) { let i = E.width, n = E.height; E.disableLayout && ((i = Y.slides.offsetWidth), (n = Y.slides.offsetHeight)); const s = { width: i, height: n, presentationWidth: e || Y.wrapper.offsetWidth, presentationHeight: t || Y.wrapper.offsetHeight, }; return ( (s.presentationWidth -= s.presentationWidth * E.margin), (s.presentationHeight -= s.presentationHeight * E.margin), "string" == typeof s.width && /%$/.test(s.width) && (s.width = (parseInt(s.width, 10) / 100) * s.presentationWidth), "string" == typeof s.height && /%$/.test(s.height) && (s.height = (parseInt(s.height, 10) / 100) * s.presentationHeight), s ); } function $e(e, t) { "object" == typeof e && "function" == typeof e.setAttribute && e.setAttribute("data-previous-indexv", t || 0); } function Xe(e) { if ( "object" == typeof e && "function" == typeof e.setAttribute && e.classList.contains("stack") ) { const t = e.hasAttribute("data-start-indexv") ? "data-start-indexv" : "data-previous-indexv"; return parseInt(e.getAttribute(t) || 0, 10); } return 0; } function Ye(e = m) { return e && e.parentNode && !!e.parentNode.nodeName.match(/section/i); } function _e() { return !(!m || !Ye(m)) && !m.nextElementSibling; } function Je() { return 0 === u && 0 === v; } function Ge() { return ( !!m && !m.nextElementSibling && (!Ye(m) || !m.parentNode.nextElementSibling) ); } function Qe() { if (E.pause) { const e = Y.wrapper.classList.contains("paused"); Mt(), Y.wrapper.classList.add("paused"), !1 === e && Fe({ type: "paused" }); } } function Ze() { const e = Y.wrapper.classList.contains("paused"); Y.wrapper.classList.remove("paused"), Nt(), e && Fe({ type: "resumed" }); } function et(e) { "boolean" == typeof e ? (e ? Qe() : Ze()) : tt() ? Ze() : Qe(); } function tt() { return Y.wrapper.classList.contains("paused"); } function it(e) { "boolean" == typeof e ? e ? ie.show() : ie.hide() : ie.isVisible() ? ie.hide() : ie.show(); } function nt(e) { "boolean" == typeof e ? (e ? Tt() : It()) : Z ? Tt() : It(); } function st() { return !(!J || Z); } function at(e, t, i, n) { if ( Fe({ type: "beforeslidechange", data: { indexh: void 0 === e ? u : e, indexv: void 0 === t ? v : t, origin: n, }, }).defaultPrevented ) return; p = m; const s = Y.wrapper.querySelectorAll(A); if (0 === s.length) return; void 0 !== t || oe.isActive() || (t = Xe(s[e])), p && p.parentNode && p.parentNode.classList.contains("stack") && $e(p.parentNode, v); const a = H.concat(); H.length = 0; let o = u || 0, r = v || 0; (u = ct(A, void 0 === e ? u : e)), (v = ct(k, void 0 === t ? v : t)); let l = u !== o || v !== r; l || (p = null); let d = s[u], c = d.querySelectorAll("section"); m = c[v] || d; let h = !1; l && p && m && !oe.isActive() && (p.hasAttribute("data-auto-animate") && m.hasAttribute("data-auto-animate") && p.getAttribute("data-auto-animate-id") === m.getAttribute("data-auto-animate-id") && !(u > o || v > r ? m : p).hasAttribute("data-auto-animate-restart") && ((h = !0), Y.slides.classList.add("disable-slide-transitions")), (_ = "running")), gt(), We(), oe.isActive() && oe.update(), void 0 !== i && ae.goto(i), p && p !== m && (p.classList.remove("present"), p.setAttribute("aria-hidden", "true"), Je() && setTimeout(() => { Et().forEach((e) => { $e(e, 0); }); }, 0)); e: for (let e = 0, t = H.length; e < t; e++) { for (let t = 0; t < a.length; t++) if (a[t] === H[e]) { a.splice(t, 1); continue e; } Y.viewport.classList.add(H[e]), Fe({ type: H[e] }); } for (; a.length; ) Y.viewport.classList.remove(a.pop()); l && Fe({ type: "slidechanged", data: { indexh: u, indexv: v, previousSlide: p, currentSlide: m, origin: n, }, }), (!l && p) || (ee.stopEmbeddedContent(p), ee.startEmbeddedContent(m)), requestAnimationFrame(() => { Se(Ae(m)); }), ce.update(), de.update(), me.update(), se.update(), se.updateParallax(), te.update(), ae.update(), le.writeURL(), Nt(), h && (setTimeout(() => { Y.slides.classList.remove("disable-slide-transitions"); }, 0), E.autoAnimate && ne.run(p, m)); } function ot() { Ne(), Pe(), We(), (J = E.autoSlide), Nt(), se.create(), le.writeURL(), !0 === E.sortFragmentsOnSync && ae.sortAll(), de.update(), ce.update(), gt(), me.update(), me.updateVisibility(), se.update(!0), te.update(), ee.formatEmbeddedContent(), !1 === E.autoPlayMedia ? ee.stopEmbeddedContent(m, { unloadIframes: !1 }) : ee.startEmbeddedContent(m), oe.isActive() && oe.layout(); } function rt(e = m) { se.sync(e), ae.sync(e), ee.load(e), se.update(), me.update(); } function lt() { yt().forEach((e) => { t(e, "section").forEach((e, t) => { t > 0 && (e.classList.remove("present"), e.classList.remove("past"), e.classList.add("future"), e.setAttribute("aria-hidden", "true")); }); }); } function dt(e = yt()) { e.forEach((t, i) => { let n = e[Math.floor(Math.random() * e.length)]; n.parentNode === t.parentNode && t.parentNode.insertBefore(t, n); let s = t.querySelectorAll("section"); s.length && dt(s); }); } function ct(e, i) { let n = t(Y.wrapper, e), s = n.length, a = ge.isPrintingPDF(), o = !1, r = !1; if (s) { E.loop && (i >= s && (o = !0), (i %= s) < 0 && ((i = s + i), (r = !0))), (i = Math.max(Math.min(i, s - 1), 0)); for (let e = 0; e < s; e++) { let t = n[e], s = E.rtl && !Ye(t); t.classList.remove("past"), t.classList.remove("present"), t.classList.remove("future"), t.setAttribute("hidden", ""), t.setAttribute("aria-hidden", "true"), t.querySelector("section") && t.classList.add("stack"), a ? t.classList.add("present") : e < i ? (t.classList.add(s ? "future" : "past"), E.fragments && ht(t)) : e > i ? (t.classList.add(s ? "past" : "future"), E.fragments && ut(t)) : e === i && E.fragments && (o ? ut(t) : r && ht(t)); } let e = n[i], t = e.classList.contains("present"); e.classList.add("present"), e.removeAttribute("hidden"), e.removeAttribute("aria-hidden"), t || Fe({ target: e, type: "visible", bubbles: !1 }); let l = e.getAttribute("data-state"); l && (H = H.concat(l.split(" "))); } else i = 0; return i; } function ht(e) { t(e, ".fragment").forEach((e) => { e.classList.add("visible"), e.classList.remove("current-fragment"); }); } function ut(e) { t(e, ".fragment.visible").forEach((e) => { e.classList.remove("visible", "current-fragment"); }); } function gt() { let e, i, n = yt(), s = n.length; if (s && void 0 !== u) { let a = oe.isActive() ? 10 : E.viewDistance; g && (a = oe.isActive() ? 6 : E.mobileViewDistance), ge.isPrintingPDF() && (a = Number.MAX_VALUE); for (let o = 0; o < s; o++) { let r = n[o], l = t(r, "section"), d = l.length; if ( ((e = Math.abs((u || 0) - o) || 0), E.loop && (e = Math.abs(((u || 0) - o) % (s - a)) || 0), e < a ? ee.load(r) : ee.unload(r), d) ) { let t = Xe(r); for (let n = 0; n < d; n++) { let s = l[n]; (i = o === (u || 0) ? Math.abs((v || 0) - n) : Math.abs(n - t)), e + i < a ? ee.load(s) : ee.unload(s); } } } St() ? Y.wrapper.classList.add("has-vertical-slides") : Y.wrapper.classList.remove("has-vertical-slides"), Rt() ? Y.wrapper.classList.add("has-horizontal-slides") : Y.wrapper.classList.remove("has-horizontal-slides"); } } function vt({ includeFragments: e = !1 } = {}) { let t = Y.wrapper.querySelectorAll(A), i = Y.wrapper.querySelectorAll(k), n = { left: u > 0, right: u < t.length - 1, up: v > 0, down: v < i.length - 1, }; if ( (E.loop && (t.length > 1 && ((n.left = !0), (n.right = !0)), i.length > 1 && ((n.up = !0), (n.down = !0))), t.length > 1 && "linear" === E.navigationMode && ((n.right = n.right || n.down), (n.left = n.left || n.up)), !0 === e) ) { let e = ae.availableRoutes(); (n.left = n.left || e.prev), (n.up = n.up || e.prev), (n.down = n.down || e.next), (n.right = n.right || e.next); } if (E.rtl) { let e = n.left; (n.left = n.right), (n.right = e); } return n; } function pt(e = m) { let t = yt(), i = 0; e: for (let n = 0; n < t.length; n++) { let s = t[n], a = s.querySelectorAll("section"); for (let t = 0; t < a.length; t++) { if (a[t] === e) break e; "uncounted" !== a[t].dataset.visibility && i++; } if (s === e) break; !1 === s.classList.contains("stack") && "uncounted" !== s.dataset.visibility && i++; } return i; } function mt() { let e = kt(), t = pt(); if (m) { let e = m.querySelectorAll(".fragment"); if (e.length > 0) { let i = 0.9; t += (m.querySelectorAll(".fragment.visible").length / e.length) * i; } } return Math.min(t / (e - 1), 1); } function ft(e) { let i, n = u, s = v; if (e) { let i = Ye(e), a = i ? e.parentNode : e, o = yt(); (n = Math.max(o.indexOf(a), 0)), (s = void 0), i && (s = Math.max(t(e.parentNode, "section").indexOf(e), 0)); } if (!e && m) { if (m.querySelectorAll(".fragment").length > 0) { let e = m.querySelector(".current-fragment"); i = e && e.hasAttribute("data-fragment-index") ? parseInt(e.getAttribute("data-fragment-index"), 10) : m.querySelectorAll(".fragment.visible").length - 1; } } return { h: n, v: s, f: i }; } function bt() { return t( Y.wrapper, S + ':not(.stack):not([data-visibility="uncounted"])' ); } function yt() { return t(Y.wrapper, A); } function wt() { return t(Y.wrapper, ".slides>section>section"); } function Et() { return t(Y.wrapper, A + ".stack"); } function Rt() { return yt().length > 1; } function St() { return wt().length > 1; } function At() { return bt().map((e) => { let t = {}; for (let i = 0; i < e.attributes.length; i++) { let n = e.attributes[i]; t[n.name] = n.value; } return t; }); } function kt() { return bt().length; } function Lt(e, t) { let i = yt()[e], n = i && i.querySelectorAll("section"); return n && n.length && "number" == typeof t ? (n ? n[t] : void 0) : i; } function Ct(e, t) { let i = "number" == typeof e ? Lt(e, t) : e; if (i) return i.slideBackgroundElement; } function xt() { let e = ft(); return { indexh: e.h, indexv: e.v, indexf: e.f, paused: tt(), overview: oe.isActive(), }; } function Pt(e) { if ("object" == typeof e) { at(n(e.indexh), n(e.indexv), n(e.indexf)); let t = n(e.paused), i = n(e.overview); "boolean" == typeof t && t !== tt() && et(t), "boolean" == typeof i && i !== oe.isActive() && oe.toggle(i); } } function Nt() { if ((Mt(), m && !1 !== E.autoSlide)) { let e = m.querySelector(".current-fragment"); e || (e = m.querySelector(".fragment")); let i = e ? e.getAttribute("data-autoslide") : null, n = m.parentNode ? m.parentNode.getAttribute("data-autoslide") : null, s = m.getAttribute("data-autoslide"); i ? (J = parseInt(i, 10)) : s ? (J = parseInt(s, 10)) : n ? (J = parseInt(n, 10)) : ((J = E.autoSlide), 0 === m.querySelectorAll(".fragment").length && t(m, "video, audio").forEach((e) => { e.hasAttribute("data-autoplay") && J && (1e3 * e.duration) / e.playbackRate > J && (J = (1e3 * e.duration) / e.playbackRate + 1e3); })), !J || Z || tt() || oe.isActive() || (Ge() && !ae.availableRoutes().next && !0 !== E.loop) || ((G = setTimeout(() => { "function" == typeof E.autoSlideMethod ? E.autoSlideMethod() : Ot(), Nt(); }, J)), (Q = Date.now())), f && f.setPlaying(-1 !== G); } } function Mt() { clearTimeout(G), (G = -1); } function It() { J && !Z && ((Z = !0), Fe({ type: "autoslidepaused" }), clearTimeout(G), f && f.setPlaying(!1)); } function Tt() { J && Z && ((Z = !1), Fe({ type: "autoslideresumed" }), Nt()); } function Dt({ skipFragments: e = !1 } = {}) { (x.hasNavigatedHorizontally = !0), E.rtl ? (oe.isActive() || e || !1 === ae.next()) && vt().left && at(u + 1, "grid" === E.navigationMode ? v : void 0) : (oe.isActive() || e || !1 === ae.prev()) && vt().left && at(u - 1, "grid" === E.navigationMode ? v : void 0); } function Ft({ skipFragments: e = !1 } = {}) { (x.hasNavigatedHorizontally = !0), E.rtl ? (oe.isActive() || e || !1 === ae.prev()) && vt().right && at(u - 1, "grid" === E.navigationMode ? v : void 0) : (oe.isActive() || e || !1 === ae.next()) && vt().right && at(u + 1, "grid" === E.navigationMode ? v : void 0); } function zt({ skipFragments: e = !1 } = {}) { (oe.isActive() || e || !1 === ae.prev()) && vt().up && at(u, v - 1); } function Ht({ skipFragments: e = !1 } = {}) { (x.hasNavigatedVertically = !0), (oe.isActive() || e || !1 === ae.next()) && vt().down && at(u, v + 1); } function Bt({ skipFragments: e = !1 } = {}) { if (e || !1 === ae.prev()) if (vt().up) zt({ skipFragments: e }); else { let i; if ( ((i = E.rtl ? t(Y.wrapper, A + ".future").pop() : t(Y.wrapper, A + ".past").pop()), i && i.classList.contains("stack")) ) { let e = i.querySelectorAll("section").length - 1 || void 0; at(u - 1, e); } else Dt({ skipFragments: e }); } } function Ot({ skipFragments: e = !1 } = {}) { if ( ((x.hasNavigatedHorizontally = !0), (x.hasNavigatedVertically = !0), e || !1 === ae.next()) ) { let t = vt(); t.down && t.right && E.loop && _e() && (t.down = !1), t.down ? Ht({ skipFragments: e }) : E.rtl ? Dt({ skipFragments: e }) : Ft({ skipFragments: e }); } } function qt(e) { E.autoSlideStoppable && It(); } function Ut(e) { let t = e.data; if ( "string" == typeof t && "{" === t.charAt(0) && "}" === t.charAt(t.length - 1) && ((t = JSON.parse(t)), t.method && "function" == typeof h[t.method]) ) if (!1 === L.test(t.method)) { const e = h[t.method].apply(h, t.args); ze("callback", { method: t.method, result: e }); } else console.warn( 'reveal.js: "' + t.method + '" is is blacklisted from the postMessage API' ); } function jt(e) { "running" === _ && /section/gi.test(e.target.nodeName) && ((_ = "idle"), Fe({ type: "slidetransitionend", data: { indexh: u, indexv: v, previousSlide: p, currentSlide: m }, })); } function Wt(e) { const t = o(e.target, 'a[href^="#"]'); if (t) { const i = t.getAttribute("href"), n = le.getIndicesFromHash(i); n && (h.slide(n.h, n.v, n.f), e.preventDefault()); } } function Kt(e) { We(); } function Vt(e) { !1 === document.hidden && document.activeElement !== document.body && ("function" == typeof document.activeElement.blur && document.activeElement.blur(), document.body.focus()); } function $t(e) { (document.fullscreenElement || document.webkitFullscreenElement) === Y.wrapper && (e.stopImmediatePropagation(), setTimeout(() => { h.layout(), h.focus.focus(); }, 1)); } function Xt(e) { if (e.currentTarget && e.currentTarget.hasAttribute("href")) { let t = e.currentTarget.getAttribute("href"); t && (Oe(t), e.preventDefault()); } } function Yt(e) { Ge() && !1 === E.loop ? (at(0, 0), Tt()) : Z ? Tt() : It(); } const _t = { VERSION: X, initialize: fe, configure: xe, destroy: Me, sync: ot, syncSlide: rt, syncFragments: ae.sync.bind(ae), slide: at, left: Dt, right: Ft, up: zt, down: Ht, prev: Bt, next: Ot, navigateLeft: Dt, navigateRight: Ft, navigateUp: zt, navigateDown: Ht, navigatePrev: Bt, navigateNext: Ot, navigateFragment: ae.goto.bind(ae), prevFragment: ae.prev.bind(ae), nextFragment: ae.next.bind(ae), on: Ie, off: Te, addEventListener: Ie, removeEventListener: Te, layout: We, shuffle: dt, availableRoutes: vt, availableFragments: ae.availableRoutes.bind(ae), toggleHelp: qe, toggleOverview: oe.toggle.bind(oe), togglePause: et, toggleAutoSlide: nt, toggleJumpToSlide: it, isFirstSlide: Je, isLastSlide: Ge, isLastVerticalSlide: _e, isVerticalSlide: Ye, isPaused: tt, isAutoSliding: st, isSpeakerNotes: me.isSpeakerNotesWindow.bind(me), isOverview: oe.isActive.bind(oe), isFocused: ve.isFocused.bind(ve), isPrintingPDF: ge.isPrintingPDF.bind(ge), isReady: () => C, loadSlide: ee.load.bind(ee), unloadSlide: ee.unload.bind(ee), showPreview: Oe, hidePreview: je, addEventListeners: Pe, removeEventListeners: Ne, dispatchEvent: Fe, getState: xt, setState: Pt, getProgress: mt, getIndices: ft, getSlidesAttributes: At, getSlidePastCount: pt, getTotalSlides: kt, getSlide: Lt, getPreviousSlide: () => p, getCurrentSlide: () => m, getSlideBackground: Ct, getSlideNotes: me.getSlideNotes.bind(me), getSlides: bt, getHorizontalSlides: yt, getVerticalSlides: wt, hasHorizontalSlides: Rt, hasVerticalSlides: St, hasNavigatedHorizontally: () => x.hasNavigatedHorizontally, hasNavigatedVertically: () => x.hasNavigatedVertically, addKeyBinding: re.addKeyBinding.bind(re), removeKeyBinding: re.removeKeyBinding.bind(re), triggerKey: re.triggerKey.bind(re), registerKeyboardShortcut: re.registerKeyboardShortcut.bind(re), getComputedSlideSize: Ve, getScale: () => U, getConfig: () => E, getQueryHash: d, getSlidePath: le.getHash.bind(le), getRevealElement: () => a, getSlidesElement: () => Y.slides, getViewportElement: () => Y.viewport, getBackgroundsElement: () => se.element, registerPlugin: ue.registerPlugin.bind(ue), hasPlugin: ue.hasPlugin.bind(ue), getPlugin: ue.getPlugin.bind(ue), getPlugins: ue.getRegisteredPlugins.bind(ue), }; return ( e(h, { ..._t, announceStatus: Se, getStatusText: Ae, print: ge, focus: ve, progress: ce, controls: de, location: le, overview: oe, fragments: ae, slideContent: ee, slideNumber: te, onUserInput: qt, closeOverlay: je, updateSlidesVisibility: gt, layoutSlideContents: Ke, transformSlides: De, cueAutoSlide: Nt, cancelAutoSlide: Mt, }), _t ); } let _ = Y, J = []; return ( (_.initialize = (e) => ( Object.assign(_, new Y(document.querySelector(".reveal"), e)), J.map((e) => e(_)), _.initialize() )), [ "configure", "on", "off", "addEventListener", "removeEventListener", "registerPlugin", ].forEach((e) => { _[e] = (...t) => { J.push((i) => i[e].call(null, ...t)); }; }), (_.isReady = () => !1), (_.VERSION = X), _ ); }); //# sourceMappingURL=reveal.js.map