(function () {
"use strict";
const user = { token: null };
class ApiRequest {
constructor(useJSON, accept, error) {
this.useJSON = useJSON != undefined ? useJSON : true;
this._accept = accept;
this._error = error;
}
get(url) {
return this.createRequest("GET", url);
}
post(url, data) {
return this.createRequest("POST", url, data);
}
json(url, data) {
return this.createRequest("JSON", url, data);
}
put(url, data) {
return this.createRequest("PUT", url, data);
}
delete(url) {
return this.createRequest("DELETE", url);
}
createRequest(TYPE, url, data) {
const promise = new Promise((resolve, reject) => {
var useJSON = this.useJSON;
var xhr = new XMLHttpRequest();
xhr.open(TYPE, url, true);
xhr.onload = function () {
if (this.status >= 200 && this.status < 400) {
var resp = xhr.response;
if (useJSON) {
var json = JSON.parse(resp);
resolve(json);
} else resolve(resp);
} else {
reject({
status: this.status,
statusText: xhr.statusText,
});
}
};
xhr.onabort = reject;
xhr.ontimeout = reject;
xhr.onerror = function (e) {
reject({
status: this.status,
statusText: xhr.statusText,
});
};
try {
if (!!data) {
switch (TYPE) {
case "JSON":
xhr.setRequestHeader("Content-type", "application/json");
xhr.send(JSON.stringify(data));
break;
case "POST":
xhr.setRequestHeader(
"Content-type",
"application/x-www-form-urlencoded"
);
xhr.send(new URLSearchParams(data).toString());
break;
default:
break;
}
} else {
xhr.send();
}
} catch (err) {
reject(err);
}
});
promise.catch((e) => {
console.error(e);
});
if (!!this._accept) promise.then(this._accept, this._error);
return promise;
}
}
const jsonRequest = new ApiRequest(true);
const Config = {};
class RegistrationController {
constructor(el, data) {
this.el = el;
this.data = data;
this.init();
}
arrayLookup(array, searchValue) {
var returnVal = false;
var i;
for (i = 0; i < array.length; i++) {
if (array[i]["id"] == searchValue) {
returnVal = true;
break;
}
}
return returnVal;
}
init() {
if (this.data)
this.el.querySelector(".title").innerHTML = this.data.title
? this.data.title
: this.data.intro.title;
if (this.data && this.data.data) {
for (const item of this.data.data) {
let el = this.el.querySelector("." + item.id);
el.querySelector(".label").innerHTML = item.label;
}
}
/*if (Config.game_id == 902) {
var form = this.el.querySelector("form");
for (const el of form.querySelectorAll("input")) {
if (el.name == "birthdate") {
el.type = "date";
el.parentNode.classList.remove("authenticate");
}
}
}*/
}
show() {
this.el.classList.add("show");
return new Promise((resolve, reject) => {
var form = this.el.querySelector("form");
form.disabled = false;
form.classList.remove("locked");
form.onsubmit = (e) => {
e.preventDefault();
sendEvent(Config.game_id, Config.module, "form_submit");
var firstname = localStorage.getItem("screenup/firstname")
? localStorage.getItem("screenup/firstname")
: "";
var lastname = localStorage.getItem("screenup/lastname")
? localStorage.getItem("screenup/lastname")
: "";
var email = localStorage.getItem("screenup/email")
? localStorage.getItem("screenup/email")
: "";
var username = localStorage.getItem("screenup/username")
? localStorage.getItem("screenup/username")
: "";
var phone = localStorage.getItem("screenup/phone")
? localStorage.getItem("screenup/phone")
: "";
var birthdate = localStorage.getItem("screenup/birthdate")
? localStorage.getItem("screenup/birthdate")
: $("input[name='birthdate']")
? $("input[name='birthdate']").val()
: "";
localStorage.setItem("screenup/birthdate", birthdate);
var address = localStorage.getItem("screenup/address")
? localStorage.getItem("screenup/address")
: $("input[name='address']")
? $("input[name='address']").val()
: "";
localStorage.setItem("screenup/address", address);
var data = {
action: "add",
game_id: Config.game_id,
module: Config.module,
firstname: firstname,
lastname: lastname,
email: email,
username: username,
phone: phone,
birthdate: birthdate,
address: address,
access_token:
"cfab26c8ba825031524da0ceb880a9f9151d3be70c62004c0615d6aecd3c7d399f5f31b01211512e3ccebd701bfdd76c82f1791bb018f7f387d81fc514ad37fc",
};
for (const el of form.querySelectorAll("input")) {
data[el.name] = localStorage.getItem(`screenup/${el.name}`)
? localStorage.getItem(`screenup/${el.name}`)
: el.value;
if (Config.mode == "test") {
var chars = "abcdefghijklmnopqrstuvwxyz1234567890";
var string = "";
for (var ii = 0; ii < 15; ii++) {
string += chars[Math.floor(Math.random() * chars.length)];
}
string += "@gmail.com";
data[el.name] = string;
}
}
form.classList.add("locked");
jsonRequest.post(Config.api.registration, data).then((data) => {
form.classList.remove("locked");
if (data.status != 1 && Config.mode != "test") {
document.querySelector("form").classList.add("error");
if (data.message == "incomplete_session")
window.location = `/register${Config.game_id}`;
else
document.querySelector(".error-message").innerHTML = i18next.t(
`form.${data.message}`
);
} else {
resolve(data.message);
}
});
};
});
}
hide() {
this.el.classList.remove("show");
}
}
class RemoteController extends EventTarget {
constructor(el, data) {
super();
var remote = this;
this.el = el;
this.data = data;
this.currentQuestion = -1;
var buttons = this.el.querySelectorAll("button");
buttons.forEach(function (item) {
item.addEventListener("click", (e) => {
if (item.dataset.value) {
remote.selectAnswer(item.dataset.value);
}
});
});
}
selectAnswer(value) {
//if (value == "!" || this.data.gap > this.currentQuestion) return;
if (value == "!") return;
this.dispatchEvent(new CustomEvent("selected", { detail: value }));
}
show(status) {
this.current = status;
this.el.classList.add("show");
}
stop() {
this.selectAnswer("!");
}
hide() {
this.el.classList.remove("show");
}
}
class WaitController {
constructor(el, data) {
this.el = el;
this.messages = data;
}
setStatus(status, showLoader) {
if (this.status === status) return;
this.status = status;
if (status)
this.el.querySelector(".message").innerHTML = i18next.t(
"quiz." + status
); //this.messages[status];
}
show() {
this.el.classList.add("show");
document.querySelector(".wait .message").classList.add("show");
}
hide() {
this.el.classList.remove("show");
}
}
class QuizRemote {
constructor(el) {
this.el = el;
window.onload = (e) => document.body.classList.remove("preload");
}
init(config, dataurl) {
this.reset();
this.dataurl = dataurl;
Object.assign(Config, config);
this.topics = {
status: "screenup/" + Config.module + Config.game_id + "/status",
winner: "screenup/" + Config.module + Config.game_id + "/winner",
tries: "screenup/" + Config.module + Config.game_id + "/tries",
participation:
"screenup/" + Config.module + Config.game_id + "/participation",
session: "screenup/" + Config.module + Config.game_id + "/session",
win: "screenup/" + Config.module + Config.game_id + "/win",
ping: "screenup/" + Config.module + Config.game_id + "/ping"
};
}
async start() {
await jsonRequest.get(this.dataurl).then((data) => {
this.data = data[Config.local];
});
var broadcaster_code = this.data.broadcaster_code
? this.data.broadcaster_code.toLowerCase()
: this.data.intro.broadcaster_code;
var language = this.data.language ? this.data.language : this.data.info.language; // null
if (broadcaster_code) {
document.body.classList.add(broadcaster_code);
document.body.setAttribute("d-broadcaster_code", broadcaster_code);
}
if (language) {
document.body.classList.add(language);
document.body.setAttribute("d-language", language);
initializeI18n(language, true);
if (this.data.languages !== undefined) {
if (this.data.languages.split(",").length > 1) {
for (const lg of this.data.languages.split(",")) {
if (lg)
document.querySelector(
"#switcher"
).innerHTML += `
`;
}
}
}
}
if (Config.module == "scratch" || Config.module == "predictor") {
var background_color = this.data.intro.background_color
? this.data.intro.background_color
: "#000";
var background_secondary_color = this.data.intro
.background_secondary_color
? this.data.intro.background_secondary_color
: "transparent";
var background_third_color = this.data.intro.background_third_color
? this.data.intro.background_third_color
: "#FFF";
var primary_color = this.data.intro.primary_color
? this.data.intro.primary_color
: "#000";
var secondary_color = this.data.intro.secondary_color
? this.data.intro.secondary_color
: "#FFF";
var third_color = this.data.intro.third_color
? this.data.intro.third_color
: "#000";
var fourth_color = this.data.intro.fourth_color
? this.data.intro.fourth_color
: "#CCC";
var fifth_color = this.data.intro.fifth_color
? this.data.intro.fifth_color
: "#CCC";
var font_family = this.data.intro.font_family
? this.data.intro.font_family
: "";
var secondary_font_family = this.data.intro.secondary_font_family
? this.data.intro.secondary_font_family
: "";
} else {
var background_color = this.data.background_color
? this.data.background_color
: "#000";
var background_secondary_color = this.data.background_secondary_color
? this.data.background_secondary_color
: "transparent";
var background_third_color = this.data.background_third_color
? this.data.background_third_color
: "#FFF";
var primary_color = this.data.primary_color
? this.data.primary_color
: "#000";
var secondary_color = this.data.secondary_color
? this.data.secondary_color
: "#FFF";
var third_color = this.data.third_color
? this.data.third_color
: "#000";
var fourth_color = this.data.fourth_color
? this.data.fourth_color
: "#CCC";
var fifth_color = this.data.fifth_color
? this.data.fifth_color
: "#CCC";
var font_family = this.data.font_family ? this.data.font_family : "";
var secondary_font_family = this.data.secondary_font_family
? this.data.secondary_font_family
: "";
}
var body = document.querySelector("body");
if (background_color)
body.style.setProperty("--background-color", background_color);
if (background_secondary_color)
body.style.setProperty(
"--background-secondary-color",
background_secondary_color
);
if (background_third_color)
body.style.setProperty(
"--background-third-color",
background_third_color
);
if (primary_color)
body.style.setProperty("--primary-color", primary_color);
if (secondary_color)
body.style.setProperty("--secondary-color", secondary_color);
if (third_color) body.style.setProperty("--third-color", third_color);
if (fourth_color) body.style.setProperty("--fourth-color", fourth_color);
if (fifth_color) body.style.setProperty("--fifth-color", fifth_color);
if (font_family) body.style.setProperty("--font-family", font_family);
if (secondary_font_family)
body.style.setProperty(
"--secondary-font-family",
secondary_font_family
);
if (this.data.logo && this.data.logo != "") {
document.querySelector(".logo").src = this.data.logo;
document.querySelector(".logo").style.display = "block";
} else {
if (
this.data.intro &&
this.data.intro.header_logo &&
this.data.intro.header_logo != ""
) {
document.querySelector(".logo").src = this.data.intro.header_logo;
document.querySelector(".logo").style.display = "block";
} else {
document.querySelector(".logo").style.display = "none";
}
}
if (this.data.registration && this.data.registration.notice) {
document.querySelector("#notice").innerHTML =
this.data.registration.notice;
document.querySelector("#notice").style.display = "block";
}
if (
this.data !== undefined &&
this.data.quiz !== undefined &&
this.data.quiz[0] &&
document.querySelector(".question")
) {
document.querySelector(".question").innerHTML = this.data.quiz[0].label;
var answers = this.data.quiz[0].answers;
var labels = document.querySelectorAll("span.label");
labels.forEach(function (item, index) {
if (answers[index].label) item.innerHTML = answers[index].label;
else item.parentNode.style.display = "none";
});
}
if (
window.screen.width < 1024 &&
(this.data.mobile_image || this.data.home.mobile_image)
) {
document.body.style.backgroundImage = this.data.mobile_image
? "url(" + this.data.mobile_image + ")"
: this.data.home.mobile_image ? "url(" + this.data.home.mobile_image + ")" : "";
} else {
document.body.style.backgroundImage = this.data.form_image
? "url(" + this.data.form_image + ")"
: this.data.home.image ? "url(" + this.data.home.image + ")" : "";
}
if (!Config.game_id) {
console.error("Unavailable game_id:", Config.game_id);
}
this.checkInscription();
}
scrollTop() {
document.body.scrollTop = 0; // For Safari
document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
}
checkInscription() {
var url =
Config.module == "scratch" || Config.module == "predictor"
? "https://screenup.eu/api/bets.php"
: "https://screenup.eu/api/participations.php";
var data = {
game_id: Config.game_id,
module: Config.module,
action: "session",
access_token:
"cfab26c8ba825031524da0ceb880a9f9151d3be70c62004c0615d6aecd3c7d399f5f31b01211512e3ccebd701bfdd76c82f1791bb018f7f387d81fc514ad37fc",
};
jsonRequest.post(url, data).then((data) => {
user.quizz_session = localStorage.getItem(this.topics.session);
if (user.quizz_session == data.session_id) {
user.participationId = localStorage.getItem(
this.topics.participation
);
if (user.participationId) {
this.accessQuiz();
} else {
this.showRegistration();
}
} else {
user.quizz_session = data.session_id;
localStorage.removeItem(this.topics.participation);
localStorage.removeItem(this.topics.session);
if (
Config.module == "scratch" &&
localStorage.getItem(this.topics.tries) > 0
) {
this.accessQuiz();
} else {
this.showRegistration();
}
}
});
}
showRegistration() {
var el = this.el.querySelector(".register");
if(Config.mode == "test"){
this.accessQuiz();
return false;
}
var registration = new RegistrationController(el, this.data.registration);
registration.show().then((participationId) => {
user.participationId = participationId;
localStorage.setItem(this.topics.participation, participationId);
localStorage.setItem(this.topics.session, user.quizz_session);
this.accessQuiz();
registration.hide();
});
}
accessQuiz() {
this.running = true;
window.addEventListener("beforeunload", (e) => {
if (this.running) {
var confirmationMessage = ""; //this.data.messages.reload;
e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+
return confirmationMessage; // Gecko, WebKit, Chrome <34
}
});
var wait = new WaitController(
this.el.querySelector(".wait"),
this.data.messages
);
var remote = new RemoteController(
this.el.querySelector(".remote"),
this.data
);
this.scrollTop();
if (this.el.querySelector(".wait")) {
wait.show();
} else {
remote.show();
}
remote.addEventListener("selected", (e) => {
remote.hide();
this.answers.push(e.detail);
var max = remote.data.questions;
var next = parseInt(remote.currentQuestion) + 1;
if (next == max) {
wait.setStatus("send");
wait.show();
while (this.answers.length < max) {
this.answers.unshift("-");
}
var url =
Config.module == "scratch" || Config.module == "predictor"
? "https://screenup.eu/api/bets.php"
: "https://screenup.eu/api/participations.php";
var data = {
game_id: Config.game_id,
module: Config.module,
participation_id: user.participationId,
answers: this.answers.join(""),
action: "answer",
access_token:
"cfab26c8ba825031524da0ceb880a9f9151d3be70c62004c0615d6aecd3c7d399f5f31b01211512e3ccebd701bfdd76c82f1791bb018f7f387d81fc514ad37fc",
};
jsonRequest.post(url, data).then((data) => {
wait.setStatus("done");
});
} else {
wait.setStatus("end");
wait.show();
}
});
connector.connect().then(() => {
connector.subscribe(this.topics.status);
connector.subscribe(this.topics.winner);
setInterval(() => connector.publish(this.topics.ping, "ping", false), 60000);
});
connector.addEventListener("message", (e) => {
//this.scrollTop();
switch (e.detail.destinationName) {
case this.topics.status:
var status = e.detail.payloadString;
// security
var language = document.body.getAttribute("d-language");
initializeI18n(language, true);
switch (status) {
case "q0":
case "q1":
case "q2":
case "q3":
case "q4":
case "q5":
case "q6":
case "q7":
case "q8":
case "q9":
case "q10":
case "q11":
case "q12":
case "q13":
case "q14":
case "q15":
case "q16":
case "q17":
case "q18":
case "q19":
remote.currentQuestion = status.substring(1);
wait.hide();
document.querySelector(".question").innerHTML =
this.data.quiz[remote.currentQuestion].label;
document.querySelector(".image img").style.display = "none";
if (
this.data.quiz[remote.currentQuestion].image !== null &&
this.data.quiz[remote.currentQuestion].image != "null"
) {
document.querySelector(".image img").src =
this.data.quiz[remote.currentQuestion].image;
document.querySelector(".image img").style.display = "block";
}
var answers = this.data.quiz[remote.currentQuestion].answers;
var labels = document.querySelectorAll("span.label");
labels.forEach(function (item, index) {
if (answers[index].label)
item.innerHTML = answers[index].label;
else item.parentNode.style.display = "none";
});
//document.querySelector(".wait .message").setHTML(i18next.t("quiz.wait"));
document.querySelector(".wait .message").classList.add("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
remote.show(status);
break;
case "end":
// UPDATE 20230523
wait.show();
remote.hide();
remote.stop();
//document.querySelector(".wait .message").setHTML(i18next.t("quiz.wait"));
document.querySelector(".wait .message").classList.add("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
break;
case "closed":
this.running = false;
remote.hide();
wait.hide();
document.querySelector(".end").classList.add("show");
if (
Config.module == "scratch" ||
Config.module == "predictor"
) {
document
.querySelector(".end .message")
.setHTML(i18next.t("quiz.closed"));
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document.querySelector(".end .message").classList.add("show");
document
.querySelector(".end .message1")
.classList.remove("show");
document
.querySelector(".end .message2")
.classList.remove("show");
localStorage.removeItem(this.topics.win);
localStorage.removeItem(`${Config.session}${Config.game_id}`);
localStorage.removeItem(this.topics.tries);
}
break;
case "clear":
// reset localstorage
for (var i = 0; i < localStorage.length; i++) {
if (
localStorage
.key(i)
.startsWith(`screenup/${Config.module}${Config.game_id}`)
)
localStorage.removeItem(localStorage.key(i));
}
window.location.reload();
break;
case "online":
sendEvent(Config.game_id, Config.module, "game_start");
this.running = true;
this.reset();
if (Config.module == "scratch") {
if (!localStorage.getItem(this.topics.win)) {
var firstname = localStorage.getItem("screenup/firstname")
? localStorage.getItem("screenup/firstname")
: "";
var lastname = localStorage.getItem("screenup/lastname")
? localStorage.getItem("screenup/lastname")
: "";
var email = localStorage.getItem("screenup/email")
? localStorage.getItem("screenup/email")
: "";
var username = localStorage.getItem("screenup/username")
? localStorage.getItem("screenup/username")
: "";
var phone = localStorage.getItem("screenup/phone")
? localStorage.getItem("screenup/phone")
: "";
var birthdate = localStorage.getItem("screenup/birthdate")
? localStorage.getItem("screenup/birthdate")
: $("input[name='birthdate']")
? $("input[name='birthdate']").val()
: "";
localStorage.setItem("screenup/birthdate", birthdate);
var address = localStorage.getItem("screenup/address")
? localStorage.getItem("screenup/address")
: $("input[name='address']")
? $("input[name='address']").val()
: "";
localStorage.setItem("screenup/address", address);
var tries = localStorage.getItem(`${this.topics.tries}`)
? localStorage.getItem(`${this.topics.tries}`)
: 0;
tries++;
var usages = this.data.intro.usages
? this.data.intro.usages
: 1;
if (tries <= usages) {
if (tries == usages) {
document.querySelector("#game-reload").style.display =
"none";
document.querySelector(".no-gift2").style.display =
"block";
} else {
document.querySelector(".no-gift2").style.display =
"none";
}
localStorage.setItem(`${this.topics.tries}`, tries);
var url =
"https://screenup.eu/api/bets.php";
var data = {
game_id: Config.game_id,
module: Config.module,
firstname: firstname,
lastname: lastname,
email: username,
phone: phone,
birthdate: birthdate,
address: address,
action: "get_slot",
access_token:
"cfab26c8ba825031524da0ceb880a9f9151d3be70c62004c0615d6aecd3c7d399f5f31b01211512e3ccebd701bfdd76c82f1791bb018f7f387d81fc514ad37fc",
};
function drawScratch(img, ticket) {
const canvas = document.querySelector(img);
const canvasParent = canvas.parentNode;
const ctx = canvas.getContext("2d");
const radius = 45;
const image = new Image();
const drawImage = () => {
ctx.drawImage(image, 0, 0, image.width, image.height);
};
const punchOutCircle = (x, y) => {
const widthRatio = canvas.scrollWidth / canvas.width;
const heightRatio =
canvas.scrollHeight / canvas.height;
ctx.save();
ctx.beginPath();
ctx.arc(
x / widthRatio,
y / heightRatio,
radius,
0,
2 * Math.PI
);
ctx.closePath();
ctx.clip();
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.restore();
};
const getThemCoords = (e) => {
if (e.touches) {
Array.from(e.touches).forEach(getThemCoords);
return;
}
const rect = e.target.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
punchOutCircle(x, y);
};
const removeListener = () => {
canvas.removeEventListener(
"mousemove",
getThemCoords
);
};
canvas.addEventListener("mouseup", removeListener);
canvas.addEventListener("mouseleave", removeListener);
canvas.addEventListener("mousedown", (e) => {
getThemCoords(e);
canvas.addEventListener("mousemove", getThemCoords);
});
canvasParent.addEventListener(
"touchstart",
getThemCoords
);
canvasParent.addEventListener("touchmove", (e) => {
e.preventDefault();
getThemCoords(e);
});
image.onload = () => {
canvas.width = image.width;
canvas.height = image.height;
drawImage();
};
image.src = ticket; //"/img/ticket.png";
}
var scratch_images = this.data.intro.scratch_images
? this.data.intro.scratch_images.split(",")
: null;
if (!scratch_images) {
scratch_images = ["/img/ticket.png"];
}
const random = Math.floor(
Math.random() * scratch_images.length
);
drawScratch(
".image-reveal__canvas",
scratch_images[random]
);
jsonRequest.post(url, data).then((data) => {
if (!data) {
//window.location = `register${game_id}`;
}
const ticket = document.querySelector(
".image-reveal__image"
);
var winnerTicket = this.data.intro.header_logo;
document.getElementById(
"ticket-title"
).innerHTML = `Ticket n°${data.participation_id}`;
if (data.gift) {
const gift_name =
document.querySelector("p.gift-name");
gift_name.innerHTML = gift_name.innerHTML.replace(
"{0}",
data.gift
);
setTimeout(() => {
gift_name.style.display = "block";
}, "1000");
ticket.src = winnerTicket;
ticket.parentElement.classList.add("winner");
document.querySelector("#game-reload").style.display =
"none";
localStorage.setItem(this.topics.win, true);
remote.hide();
document
.querySelector(".end")
.classList.remove("show");
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document
.querySelector(".end .message")
.classList.remove("show");
document
.querySelector(".end .message1")
.classList.remove("show");
document
.querySelector(".end .message2")
.classList.remove("show");
document.querySelector("#game-reload").style.display =
"none";
} else {
ticket.src = winnerTicket; //blankTicket;
document.querySelector("#game-notice").style.display =
"none";
setTimeout(() => {
document.querySelector(".no-gift").style.display =
"block";
}, "1500");
//const gift_no = document.querySelector(".no-gift2");
//gift_no.innerHTML = gift_no.innerHTML.replace("{0}", `Try again?`);
}
remote.show();
wait.hide();
});
} else {
// max tries
remote.hide();
document.querySelector(".end").classList.add("show");
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document
.querySelector(".end .message")
.classList.remove("show");
document
.querySelector(".end .message1")
.classList.remove("show");
document
.querySelector(".end .message2")
.classList.add("show");
}
} else {
remote.hide();
document.querySelector(".end").classList.add("show");
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document
.querySelector(".end .message")
.classList.remove("show");
document
.querySelector(".end .message1")
.classList.add("show");
document
.querySelector(".end .message2")
.classList.remove("show");
}
} else if (Config.module == "predictor") {
remote.show();
wait.hide();
} else {
remote.hide();
wait.setStatus(status);
wait.show();
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.add("show");
}
break;
default:
this.running = false;
this.reset();
remote.hide();
wait.setStatus(status);
wait.show();
//document.querySelector(".end .message").setHTML(i18next.t("quiz.closed"));
document
.querySelector(".wait .message")
.classList.remove("show");
document.querySelector(".wait .message1").classList.add("show");
document
.querySelector(".end .message")
.classList.remove("show");
document
.querySelector(".end .message1")
.classList.remove("show");
document
.querySelector(".end .message2")
.classList.remove("show");
break;
}
this.status = status;
break;
case this.topics.winner:
if (this.running) {
var winner = e.detail.payloadString;
if (user.participationId === winner) {
sendEvent(Config.game_id, Config.module, "game_end");
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document
.querySelector(".end .message")
.classList.remove("show");
document.querySelector(".end .message1").classList.add("show");
document
.querySelector(".end .message2")
.classList.remove("show");
} else if (winner === "none") {
document.querySelector(".wait .message").classList.add("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document
.querySelector(".end .message")
.classList.remove("show");
document
.querySelector(".end .message1")
.classList.remove("show");
document.querySelector(".end .message2").classList.add("show");
} else {
sendEvent(Config.game_id, Config.module, "game_end");
document
.querySelector(".wait .message")
.classList.remove("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document
.querySelector(".end .message")
.classList.remove("show");
document
.querySelector(".end .message1")
.classList.remove("show");
document.querySelector(".end .message2").classList.add("show");
}
} else {
remote.hide();
wait.hide();
//wait.show();
document.querySelector(".wait .message").classList.add("show");
document
.querySelector(".wait .message1")
.classList.remove("show");
document.querySelector(".end .message").classList.add("show");
document.querySelector(".end .message1").classList.remove("show");
document.querySelector(".end .message2").classList.remove("show");
}
break;
}
});
}
reset() {
this.answers = [];
for (let el of this.el.querySelectorAll("section")) {
el.classList.remove("show");
}
}
}
window.QuizRemote = QuizRemote;
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpel9yZW1vdGUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qcy9Vc2VyLmpzIiwiLi4vLi4vc3JjL2pzL0FwaVJlcXVlc3QuanMiLCIuLi8uLi9zcmMvanMvQ29uZmlnLmpzIiwiLi4vLi4vc3JjL2pzL2NvbnRyb2xsZXIvUmVnaXN0cmF0aW9uQ29udHJvbGxlci5qcyIsIi4uLy4uL3NyYy9qcy9jb250cm9sbGVyL1JlbW90ZUNvbnRyb2xsZXIuanMiLCIuLi8uLi9zcmMvanMvY29udHJvbGxlci9XYWl0Q29udHJvbGxlci5qcyIsIi4uLy4uL3NyYy9qcy9tcXR0L21xdHRfY29ubmVjdG9yLmpzIiwiLi4vLi4vc3JjL2pzL1F1aXpSZW1vdGUuanMiLCIuLi8uLi9zcmMvanMvcXVpel9yZW1vdGVfZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdXNlciA9IHt0b2tlbjpudWxsfTsgXG5cbmV4cG9ydCB7dXNlcn07IiwiXG5pbXBvcnQge3VzZXJ9IGZyb20gXCIuL1VzZXIuanNcIjtcblxuXG5jbGFzcyBBcGlSZXF1ZXN0IHtcblxuXHRjb25zdHJ1Y3RvciggdXNlSlNPTiwgYWNjZXB0LCBlcnJvciApe1xuXHRcdHRoaXMudXNlSlNPTiA9IHVzZUpTT04gIT0gdW5kZWZpbmVkID8gdXNlSlNPTiA6IHRydWU7XG5cdFx0dGhpcy5fYWNjZXB0ID0gYWNjZXB0O1xuXHRcdHRoaXMuX2Vycm9yICA9IGVycm9yO1xuXHR9XG5cblx0Z2V0KCB1cmwgKXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSZXF1ZXN0KFwiR0VUXCIsIHVybCk7XG5cdH1cblxuXHRwb3N0KCB1cmwsIGRhdGEgKXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSZXF1ZXN0KFwiUE9TVFwiLCB1cmwsIGRhdGEpO1xuXHR9XG5cblx0anNvbiggdXJsLCBkYXRhICl7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlUmVxdWVzdChcIkpTT05cIiwgdXJsLCBkYXRhKTtcblx0fVxuXG5cdHB1dCggdXJsLCBkYXRhICl7XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlUmVxdWVzdChcIlBVVFwiLCB1cmwsIGRhdGEpO1xuXHR9XG5cblx0ZGVsZXRlKCB1cmwgKXtcblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVSZXF1ZXN0KFwiREVMRVRFXCIsIHVybCk7XG5cdH1cblxuXHRjcmVhdGVSZXF1ZXN0KCBUWVBFLCB1cmwsIGRhdGEgKXtcblx0XHRjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoICggcmVzb2x2ZSwgcmVqZWN0ICkgPT4ge1xuXHRcdFx0XG5cdFx0XHR2YXIgdXNlSlNPTiA9IHRoaXMudXNlSlNPTjtcblx0XHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHRcdHhoci5vcGVuKFRZUEUsIHVybCwgdHJ1ZSk7XG5cdFx0XHRcblx0XHRcdGlmKHVzZXIudG9rZW4pXG5cdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHVzZXIudG9rZW4pO1xuXG5cdFx0XHR4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICh0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCA0MDApIHtcblx0XHRcdFx0XHR2YXIgcmVzcCA9IHhoci5yZXNwb25zZTtcblx0XHRcdFx0XHRpZiggdXNlSlNPTiApIHtcblx0XHRcdFx0XHRcdHZhciBqc29uID0gSlNPTi5wYXJzZSggcmVzcCApO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShqc29uKTtcblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHJlc29sdmUoIHJlc3AgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlamVjdCh7XG5cdFx0XHQgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcblx0XHRcdCAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dFxuXHRcdFx0ICAgICAgICB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0eGhyLm9uYWJvcnQgPSByZWplY3Q7XG5cdFx0XHR4aHIub250aW1lb3V0ID0gcmVqZWN0O1xuXG5cdFx0XHR4aHIub25lcnJvciA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0XHRyZWplY3Qoe1xuXHRcdCAgICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuXHRcdCAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dFxuXHRcdCAgICAgICAgfSk7XG5cdFx0XHR9O1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiggISEgZGF0YSApIHtcblx0XHRcdFx0XHRzd2l0Y2ggKFRZUEUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJKU09OXCI6XG5cdFx0XHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXHRcdFx0XHRcdFx0XHR4aHIuc2VuZCggSlNPTi5zdHJpbmdpZnkoIGRhdGEgKSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJQT1NUXCI6XG5cdFx0XHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG5cdFx0XHRcdFx0XHRcdHhoci5zZW5kKCBuZXcgVVJMU2VhcmNoUGFyYW1zKGRhdGEpLnRvU3RyaW5nKCkgKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIuc2VuZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoKGVycikge1xuXHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0pO1xuXG5cdFx0cHJvbWlzZS5jYXRjaCggKCBlICk9Pntjb25zb2xlLmVycm9yKGUpfSApO1xuXG5cdFx0aWYoICEhIHRoaXMuX2FjY2VwdCApIHByb21pc2UudGhlbiggdGhpcy5fYWNjZXB0LCB0aGlzLl9lcnJvciApO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxufVxuXG5cblxuY29uc3QganNvblJlcXVlc3QgPSBuZXcgQXBpUmVxdWVzdCggdHJ1ZSApO1xuXG5leHBvcnQge0FwaVJlcXVlc3R9O1xuZXhwb3J0IHtqc29uUmVxdWVzdH07IiwiXG5cbmNvbnN0IENvbmZpZyA9IHtcblx0XG59O1xuXG5leHBvcnQge0NvbmZpZ30iLCJpbXBvcnQgeyBBcGlSZXF1ZXN0LCBqc29uUmVxdWVzdCB9IGZyb20gXCIuLi9BcGlSZXF1ZXN0XCI7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiLi4vQ29uZmlnXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHtcbiAgICBjb25zdHJ1Y3RvciggZWwsIGRhdGEgKSB7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgICAgICB0aGlzLmluaXQoKVxuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLnRpdGxlJykuaW5uZXJIVE1MID0gdGhpcy5kYXRhLnRpdGxlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGEuZGF0YSkge1xuICAgICAgICAgICAgbGV0IGVsID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuJyArIGl0ZW0uaWQpO1xuICAgICAgICAgICAgZWwucXVlcnlTZWxlY3RvcignLmxhYmVsJykuaW5uZXJIVE1MID0gaXRlbS5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignYnV0dG9uW3R5cGU9c3VibWl0XScpLmlubmVySFRNTCA9IHRoaXMuZGF0YS5zdWJtaXQ7XG4gICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvcignLmRpc2NsYWltZXInKS5pbm5lckhUTUwgPSB0aGlzLmRhdGEuZGlzY2xhaW1lcjtcblxuICAgICAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJy5sb2dvMicpLnNyYyA9IHRoaXMuZGF0YS5sb2dvMiAgIDtcbiAgICB9XG5cbiAgICBzaG93KCkge1xuXG4gICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LmFkZCggJ3Nob3cnIClcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHZhciBmb3JtID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCAnZm9ybScgKVxuICAgICAgICAgICAgZm9ybS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9ybS5jbGFzc0xpc3QucmVtb3ZlKCAnbG9ja2VkJyApXG5cbiAgICAgICAgICAgIGZvcm0ub25zdWJtaXQgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246J2FkZCcsIFxuICAgICAgICAgICAgICAgICAgICBnYW1lX2lkOkNvbmZpZy5nYW1lX2lkLCBcbiAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiAnY2ZhYjI2YzhiYTgyNTAzMTUyNGRhMGNlYjg4MGE5ZjkxNTFkM2JlNzBjNjIwMDRjMDYxNWQ2YWVjZDNjN2QzOTlmNWYzMWIwMTIxMTUxMmUzY2NlYmQ3MDFiZmRkNzZjODJmMTc5MWJiMDE4ZjdmMzg3ZDgxZmM1MTRhZDM3ZmMnLCBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGZvcm0ucXVlcnlTZWxlY3RvckFsbCggXCJpbnB1dFwiICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbZWwubmFtZV0gPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3JtLmNsYXNzTGlzdC5hZGQoICdsb2NrZWQnIClcblxuICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LnBvc3QoIENvbmZpZy5hcGkucmVnaXN0cmF0aW9uICwgZGF0YSApLnRoZW4oIGRhdGE9PntcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uY2xhc3NMaXN0LnJlbW92ZSggJ2xvY2tlZCcgKVxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN0YXR1cyAhPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGVydCggZGF0YS5tZXNzYWdlIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YS5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoICdzaG93JyApXG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgRXZlbnRUYXJnZXR7XG4gICAgY29uc3RydWN0b3IoIGVsLCBkYXRhICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCBcImJ1dHRvblwiIClcblxuICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoIFwiY2xpY2tcIiwgZSA9PiB7XG4gICAgICAgICAgICBpZiggZS50YXJnZXQuZGF0YXNldC52YWx1ZSApe1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QW5zd2VyKCBlLnRhcmdldC5kYXRhc2V0LnZhbHVlICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKVxuICAgIH1cblxuICAgIHNlbGVjdEFuc3dlciggdmFsdWUgKSB7XG4gICAgICAgIGlmKCB0aGlzLmFuc3dlcmVkID09IHRoaXMuY3VycmVudCApIHJldHVybjtcbiAgICAgICAgdGhpcy5hbnN3ZXJlZCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KCBuZXcgQ3VzdG9tRXZlbnQoICdzZWxlY3RlZCcsIHtkZXRhaWw6dmFsdWV9ICkgKVxuICAgIH1cblxuICAgIHNob3coIHN0YXR1cyApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gc3RhdHVzO1xuICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoICdzaG93JyApO1xuICAgIH1cblxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QW5zd2VyKCAnIScgKTtcbiAgICB9XG5cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoICdzaG93JyApO1xuICAgIH1cblxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3Mge1xuICAgIGNvbnN0cnVjdG9yKCBlbCwgZGF0YSApIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gZGF0YTtcbiAgICB9XG5cbiAgICBzZXRTdGF0dXMoIHN0YXR1cywgc2hvd0xvYWRlciApIHtcblxuICAgICAgICBpZiggdGhpcy5zdGF0dXMgPT09IHN0YXR1cykgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzXG4gICAgICAgIHRoaXMuZWwucXVlcnlTZWxlY3RvciggJy5tZXNzYWdlJyApLmlubmVySFRNTCA9IHRoaXMubWVzc2FnZXNbc3RhdHVzXTtcbiAgICB9XG5cbiAgICBzaG93KCkge1xuICAgICAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoICdzaG93JyApO1xuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuZWwuY2xhc3NMaXN0LnJlbW92ZSggJ3Nob3cnICk7XG4gICAgfVxuXG5cbn0iLCJjbGFzcyBNUVRUQ29ubmVjdG9yIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAgIGNvbnN0cnVjdG9yKGhvc3QsIHBvcnQsIHVzZXJuYW1lLCBwYXNzd29yZCwgY29uZmlnX3NzbCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7XG4gICAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICAgICAgdGhpcy5jb25maWdfc3NsID0gY29uZmlnX3NzbDtcblxuICAgICAgICB0aGlzLmNsaWVudCA9IG5ldyBQYWhvLkNsaWVudChob3N0LCBOdW1iZXIocG9ydCksIFwiY2xpZW50SURfXCIgKyBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMWUxMCkudG9TdHJpbmcoMTYpKTtcblxuICAgICAgICB0aGlzLmNsaWVudC5vbkNvbm5lY3Rpb25Mb3N0ID0gKHJlc3BvbnNlT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJDb25uZWN0aW9uIExvc3Q6IFwiK3Jlc3BvbnNlT2JqZWN0LmVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpZW50Lm9uTWVzc2FnZUFycml2ZWQgPSAgKG1lc3NhZ2UpPT4ge1xuICAgICAgICAgICAgdmFyIGV2dCA9IG5ldyBDdXN0b21FdmVudCgnbWVzc2FnZScsIHsgZGV0YWlsOiBtZXNzYWdlIH0pXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGV2dCA9IG5ldyBFdmVudCgnY29ubmVjdGVkJylcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9uRmFpbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCBcIm1xdHQgZmFpbHNcIiApXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBvID0ge1xuICAgICAgICAgICAgICAgIG9uU3VjY2Vzczogb25Db25uZWN0LFxuICAgICAgICAgICAgICAgIG9uRmFpbHVyZTogb25GYWlsLCAvLyBmb3JjZSB0byByZWNvbm5lY3RcbiAgICAgICAgICAgICAgICBrZWVwQWxpdmVJbnRlcnZhbDogMCxcbiAgICAgICAgICAgICAgICB1c2VTU0w6IHRoaXMuY29uZmlnX3NzbCxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiAzLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlcm5hbWUgJiYgdGhpcy5wYXNzd29yZCkge1xuICAgICAgICAgICAgICAgIG8udXNlck5hbWUgPSB0aGlzLnVzZXJuYW1lO1xuICAgICAgICAgICAgICAgIG8ucGFzc3dvcmQgPSB0aGlzLnBhc3N3b3JkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNsaWVudC5jb25uZWN0KG8pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHN1YnNjcmliZShzdGF0dXNfdG9waWMpIHtcbiAgICAgICAgdGhpcy5jbGllbnQuc3Vic2NyaWJlKHN0YXR1c190b3BpYyk7XG4gICAgfVxuICAgIHB1Ymxpc2godG9waWMsIG1zZywgcmV0YWluZWQ9ZmFsc2UpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgUGFoby5NZXNzYWdlKG1zZyk7XG4gICAgICAgIG1lc3NhZ2UuZGVzdGluYXRpb25OYW1lID0gdG9waWM7XG4gICAgICAgIG1lc3NhZ2UucW9zID0gMDtcbiAgICAgICAgbWVzc2FnZS5yZXRhaW5lZCA9IHJldGFpbmVkO1xuXG4gICAgICAgIHRoaXMuY2xpZW50LnNlbmQobWVzc2FnZSk7XG4gICAgfVxufVxuXG5cbmNvbnN0IGNvbm5lY3RvciA9IG5ldyBNUVRUQ29ubmVjdG9yKFxuICAgIFwidW5iZWxpZXZhYmxlLW9wdGljaWFuLmNsb3VkbXF0dC5jb21cIixcbiAgICA0NDMsXG4gICAgXCJhb2phd3hsalwiLFxuICAgIFwicVBrLUg5YXNvalp6XCIsXG4gICAgdHJ1ZVxuKVxuXG5cbmV4cG9ydCB7IGNvbm5lY3RvciB9O1xuIiwiaW1wb3J0IHsganNvblJlcXVlc3QgfSBmcm9tIFwiLi9BcGlSZXF1ZXN0XCI7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiLi9Db25maWdcIjtcbmltcG9ydCBSZWdpc3RyYXRpb25Db250cm9sbGVyIGZyb20gXCIuL2NvbnRyb2xsZXIvUmVnaXN0cmF0aW9uQ29udHJvbGxlclwiO1xuaW1wb3J0IFJlbW90ZUNvbnRyb2xsZXIgZnJvbSBcIi4vY29udHJvbGxlci9SZW1vdGVDb250cm9sbGVyXCI7XG5pbXBvcnQgV2FpdENvbnRyb2xsZXIgZnJvbSBcIi4vY29udHJvbGxlci9XYWl0Q29udHJvbGxlclwiO1xuaW1wb3J0IHsgY29ubmVjdG9yIH0gZnJvbSBcIi4vbXF0dC9tcXR0X2Nvbm5lY3RvclwiO1xuaW1wb3J0IHsgdXNlciB9IGZyb20gXCIuL1VzZXJcIjtcblxuY29uc3QgUEFSVElDSVBBVElPTl9JRCA9IFwicGFydGljaXBhdGlvbl9pZFwiXG5jb25zdCBRVUlaWl9TRVNTSU9OID0gXCJxdWl6el9zZXNzaW9uXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVpelJlbW90ZSB7XG4gICAgY29uc3RydWN0b3IoZWwpIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuXG4gICAgICAgIHdpbmRvdy5vbmxvYWQgPSBlID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSggJ3ByZWxvYWQnICk7XG4gICAgfVxuXG4gICAgaW5pdCggY29uZmlnLCBkYXRhdXJsICkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5kYXRhdXJsID0gZGF0YXVybDtcbiAgICAgICAgT2JqZWN0LmFzc2lnbiggQ29uZmlnLCBjb25maWcgKTtcblxuICAgICAgICB0aGlzLnRvcGljcyA9IHtcbiAgICAgICAgICAgIHN0YXR1czogXCJzY3JlZW51cC9xdWl6XCIgKyBDb25maWcuZ2FtZV9pZCArIFwiL3N0YXR1c1wiLFxuICAgICAgICAgICAgd2lubmVyOiBcInNjcmVlbnVwL3F1aXpcIiArIENvbmZpZy5nYW1lX2lkICsgXCIvd2lubmVyXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0KCkge1xuXG4gICAgICAgIGF3YWl0IGpzb25SZXF1ZXN0LmdldCh0aGlzLmRhdGF1cmwpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhW0NvbmZpZy5sb2NhbF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb2dvJykuc3JjID0gdGhpcy5kYXRhLmxvZ287XG5cbiAgICAgICAgaWYoICEgQ29uZmlnLmdhbWVfaWQgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCBcIlVuYXZhaWxsYWJsZSBnYW1lX2lkOlwiLCBDb25maWcuZ2FtZV9pZCApXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrSW5zY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBjaGVja0luc2NyaXB0aW9uKCkge1xuICAgICAgICB1c2VyLnF1aXp6X3Nlc3Npb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSggUVVJWlpfU0VTU0lPTiArIENvbmZpZy5nYW1lX2lkICApO1xuICAgICAgICBcbiAgICAgICAgdmFyIHVybCA9IFwiaHR0cHM6Ly9ldmVudGZhY3RvcnkuZXUvYnJvYWRjYXN0L2FwaS9wYXJ0aWNpcGF0aW9ucy5waHBcIlxuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIGdhbWVfaWQ6IENvbmZpZy5nYW1lX2lkLFxuICAgICAgICAgICAgYWN0aW9uOiAnc2Vzc2lvbicsXG4gICAgICAgICAgICBhY2Nlc3NfdG9rZW46ICdjZmFiMjZjOGJhODI1MDMxNTI0ZGEwY2ViODgwYTlmOTE1MWQzYmU3MGM2MjAwNGMwNjE1ZDZhZWNkM2M3ZDM5OWY1ZjMxYjAxMjExNTEyZTNjY2ViZDcwMWJmZGQ3NmM4MmYxNzkxYmIwMThmN2YzODdkODFmYzUxNGFkMzdmYycsIFxuICAgICAgICB9O1xuXG4gICAgICAgIGpzb25SZXF1ZXN0LnBvc3QoIHVybCwgZGF0YSApLnRoZW4oICggZGF0YSApID0+IHtcbiAgICAgICAgICAgIGlmKCB1c2VyLnF1aXp6X3Nlc3Npb24gPT0gZGF0YS5zZXNzaW9uX2lkICkge1xuICAgICAgICAgICAgICAgIHVzZXIucGFydGljaXBhdGlvbklkID0gIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCBQQVJUSUNJUEFUSU9OX0lEICsgQ29uZmlnLmdhbWVfaWQgIClcblxuICAgICAgICAgICAgICAgIGlmKCB1c2VyLnBhcnRpY2lwYXRpb25JZCApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NRdWl6KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UmVnaXN0cmF0aW9uKCApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXNlci5xdWl6el9zZXNzaW9uID0gZGF0YS5zZXNzaW9uX2lkO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCBQQVJUSUNJUEFUSU9OX0lEICsgQ29uZmlnLmdhbWVfaWQgKVxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCBRVUlaWl9TRVNTSU9OICsgQ29uZmlnLmdhbWVfaWQgKVxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlZ2lzdHJhdGlvbiggKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuXG4gICAgfVxuXG4gICAgc2hvd1JlZ2lzdHJhdGlvbigpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLnJlZ2lzdGVyXCIpXG4gICAgICAgIFxuICAgICAgICB2YXIgcmVnaXN0cmF0aW9uID0gbmV3IFJlZ2lzdHJhdGlvbkNvbnRyb2xsZXIoIGVsLCB0aGlzLmRhdGEucmVnaXN0cmF0aW9uIClcbiAgICAgICAgcmVnaXN0cmF0aW9uLnNob3coKS50aGVuKCAocGFydGljaXBhdGlvbklkKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHVzZXIucGFydGljaXBhdGlvbklkID0gcGFydGljaXBhdGlvbklkO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oIFBBUlRJQ0lQQVRJT05fSUQgKyBDb25maWcuZ2FtZV9pZCwgcGFydGljaXBhdGlvbklkIClcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCBRVUlaWl9TRVNTSU9OICsgQ29uZmlnLmdhbWVfaWQsIHVzZXIucXVpenpfc2Vzc2lvbiApXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzUXVpeigpO1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uLmhpZGUoKTtcbiAgICAgICAgfSApXG4gICAgfVxuXG4gICAgYWNjZXNzUXVpeigpIHtcblxuICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICAoZSkgPT4ge1xuICAgICAgICAgICAgaWYoIHRoaXMucnVubmluZyApIHtcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMuZGF0YS5tZXNzYWdlcy5yZWxvYWQ7XG4gICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGNvbmZpcm1hdGlvbk1lc3NhZ2U7ICAgICAvLyBHZWNrbywgVHJpZGVudCwgQ2hyb21lIDM0K1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25maXJtYXRpb25NZXNzYWdlOyAgICAgICAgICAgICAgLy8gR2Vja28sIFdlYktpdCwgQ2hyb21lIDwzNFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgd2FpdCA9IG5ldyBXYWl0Q29udHJvbGxlcih0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXCIud2FpdFwiKSwgdGhpcy5kYXRhLm1lc3NhZ2VzIClcbiAgICAgICAgd2FpdC5zaG93KClcblxuICAgICAgICB2YXIgcmVtb3RlID0gbmV3IFJlbW90ZUNvbnRyb2xsZXIodGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLnJlbW90ZVwiKSx0aGlzLmRhdGEpXG4gICAgICAgIHJlbW90ZS5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RlZCcsIGU9PiB7XG4gICAgICAgICAgICByZW1vdGUuaGlkZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmFuc3dlcnMucHVzaCggZS5kZXRhaWwgKVxuXG4gICAgICAgICAgICBpZih0aGlzLnN0YXR1cyA9PSAncTMnKSB7XG4gICAgICAgICAgICAgICAgd2FpdC5zZXRTdGF0dXMoICdzZW5kJyApXG4gICAgICAgICAgICAgICAgd2FpdC5zaG93KCApO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUoIHRoaXMuYW5zd2Vycy5sZW5ndGggPCA0ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnMudW5zaGlmdCgnLScpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IFwiaHR0cHM6Ly9ldmVudGZhY3RvcnkuZXUvYnJvYWRjYXN0L2FwaS9wYXJ0aWNpcGF0aW9ucy5waHBcIlxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBnYW1lX2lkOiBDb25maWcuZ2FtZV9pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhdGlvbl9pZDogdXNlci5wYXJ0aWNpcGF0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcnM6IHRoaXMuYW5zd2Vycy5qb2luKCcnKSwgXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2Fuc3dlcicsXG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogJ2NmYWIyNmM4YmE4MjUwMzE1MjRkYTBjZWI4ODBhOWY5MTUxZDNiZTcwYzYyMDA0YzA2MTVkNmFlY2QzYzdkMzk5ZjVmMzFiMDEyMTE1MTJlM2NjZWJkNzAxYmZkZDc2YzgyZjE3OTFiYjAxOGY3ZjM4N2Q4MWZjNTE0YWQzN2ZjJywgXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LnBvc3QoIHVybCwgZGF0YSApLnRoZW4oICggZGF0YSApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2FpdC5zZXRTdGF0dXMoICdkb25lJyApXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2FpdC5zZXRTdGF0dXMoICdlbmQnIClcbiAgICAgICAgICAgICAgICB3YWl0LnNob3coICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29ubmVjdG9yLmNvbm5lY3QoKS50aGVuKCAoKT0+IHtcbiAgICAgICAgICAgIGNvbm5lY3Rvci5zdWJzY3JpYmUoIHRoaXMudG9waWNzLnN0YXR1cyApO1xuICAgICAgICAgICAgY29ubmVjdG9yLnN1YnNjcmliZSggdGhpcy50b3BpY3Mud2lubmVyICk7XG4gICAgICAgIH0gKTtcblxuICAgICAgICBjb25uZWN0b3IuYWRkRXZlbnRMaXN0ZW5lciggJ21lc3NhZ2UnLCBlPT57XG4gICAgICAgICAgICBzd2l0Y2goIGUuZGV0YWlsLmRlc3RpbmF0aW9uTmFtZSApIHtcbiAgICAgICAgICAgICAgICBjYXNlIHRoaXMudG9waWNzLnN0YXR1czpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IGUuZGV0YWlsLnBheWxvYWRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicTBcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJxMVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInEyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicTNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0LmhpZGUoICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNob3coIHN0YXR1cyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiIDogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnN0b3AoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2xvc2VkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLmVuZFwiKS5jbGFzc0xpc3QuYWRkKCAnc2hvdycgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQuaGlkZSggKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwib25saW5lXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdC5zZXRTdGF0dXMoIHN0YXR1cyApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdC5zaG93KCApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNhc2UgdGhpcy50b3BpY3Mud2lubmVyOlxuICAgICAgICAgICAgICAgICAgICBpZiggdXNlci5wYXJ0aWNpcGF0aW9uSWQgPT09IGUuZGV0YWlsLnBheWxvYWRTdHJpbmcgKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKFwiLmVuZCAubWVzc2FnZVwiKS5pbm5lckhUTUwgPSB0aGlzLmRhdGEubWVzc2FnZXMud2luO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoXCIuZW5kIC5tZXNzYWdlXCIpLmlubmVySFRNTCA9IHRoaXMuZGF0YS5tZXNzYWdlcy5sb3NlO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKTtcblxuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmFuc3dlcnMgPSBbXTtcbiAgICAgICAgZm9yKGxldCBlbCBvZiB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoICdzZWN0aW9uJykpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCBRdWl6UmVtb3RlIGZyb20gXCIuL1F1aXpSZW1vdGVcIjtcblxuXG53aW5kb3cuUXVpelJlbW90ZSA9IFF1aXpSZW1vdGU7Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztDQUFBLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs7Q0NJekIsTUFBTSxVQUFVLENBQUM7QUFDakI7Q0FDQSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtDQUN0QyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLFNBQVMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQ3ZELEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Q0FDeEIsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztDQUN2QixFQUFFO0FBQ0Y7Q0FDQSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDWCxFQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDeEMsRUFBRTtBQUNGO0NBQ0EsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtDQUNsQixFQUFFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQy9DLEVBQUU7QUFDRjtDQUNBLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7Q0FDbEIsRUFBRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENB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