diff --git a/main.js b/main.js index 97b1834..a1fd588 100644 --- a/main.js +++ b/main.js @@ -5689,7 +5689,8 @@ var defaultSettings = { boosterUseCountFortuneInfusion: "U2FsdGVkX191hJANYr8JHI1bn1YRrJfBh0cQ0vgkKRM=", counterMajurityCalc: "U2FsdGVkX19TLndonGY4Y8vHuZFfLJ5gZ2t/CLprh0o=", counterMajurityCalcInitial: "U2FsdGVkX1+2Qii8qhFSqrNqmKR1Wh6saEjYbwPdi8Q=", - delayLoadTime: "U2FsdGVkX19TLndonGY4Y8vHuZFfLJ5gZ2t/CLprh0o=" + delayLoadTime: "U2FsdGVkX19TLndonGY4Y8vHuZFfLJ5gZ2t/CLprh0o=", + timeShowNotice: "U2FsdGVkX18Tcsa63N0fPUE42Ff/7HbKGGxb7izG3Bk=" }; var GamificationPluginSettings = class extends import_obsidian.PluginSettingTab { constructor(app2, plugin) { @@ -5737,6 +5738,10 @@ var GamificationPluginSettings = class extends import_obsidian.PluginSettingTab this.plugin.settings.delayLoadTime = encryptNumber(parseInt(value)); await this.plugin.saveSettings(); })); + new import_obsidian.Setting(containerEl).setName("Time how long Notices are shown").setDesc("Enter in seconds. 4 seconds or more is a good value").addText((text) => text.setPlaceholder("4").setValue(decryptNumber(this.plugin.settings.timeShowNotice).toString()).onChange(async (value) => { + this.plugin.settings.timeShowNotice = encryptNumber(parseInt(value)); + await this.plugin.saveSettings(); + })); new import_obsidian.Setting(containerEl).setName("Progressive Summarization").setDesc("you can change which formatting you use for Layer 2 and 3.").addText((text) => text.setPlaceholder("Layer 2 is usually **").setValue(decryptString(this.plugin.settings.progressiveSumLayer2)).onChange(async (value) => { this.plugin.settings.progressiveSumLayer2 = encryptString(value); await this.plugin.saveSettings(); @@ -8717,18 +8722,18 @@ var gamification2 = class extends import_obsidian5.Plugin { } catch (e2) { if ((e2 == null ? void 0 : e2.name) === "YAMLParseError") { const errorMessage = `Update majuritys failed Malformed frontamtter on this file : ${file.path} ${e2.message}`; - new import_obsidian5.Notice(errorMessage, 4e3); + new import_obsidian5.Notice(errorMessage, this.getSettingNumber("timeShowNotice") * 1e3); console.error(errorMessage); } } } if (pointsReceived > 0) { - new import_obsidian5.Notice(`${pointsReceived} Points received`, 4e3); + new import_obsidian5.Notice(`${pointsReceived} Points received`, this.getSettingNumber("timeShowNotice") * 1e3); console.log(`${pointsReceived} Points received`); } setTimeout(async () => { const initBadge = getBadgeForInitLevel(this.getSettingNumber("statusLevel")); - new import_obsidian5.Notice(`You've earned the "${initBadge.name}" badge. ${initBadge.description}`, 5e3); + new import_obsidian5.Notice(`You've earned the "${initBadge.name}" badge. ${initBadge.description}`, this.getSettingNumber("timeShowNotice") * 1e3 * 1.2); console.log(`You earned ${initBadge.name} - ${initBadge.description}`); await this.giveInitBadgeInProfile(this.getSettingString("avatarPageName"), initBadge); await this.removeBadgesWhenInitLevelHigher(this.getSettingString("avatarPageName"), this.getSettingNumber("statusLevel")); @@ -8856,7 +8861,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } if (pointsReceived > 0) { const messagePoints = getRandomMessagePoints(pointsReceived); - new import_obsidian5.Notice(messagePoints, 4e3); + new import_obsidian5.Notice(messagePoints, this.getSettingNumber("timeShowNotice") * 1e3); console.log(messagePoints); } this.writeFrontmatter(frontmatter, fileNameRate, rateFileLength, inlinkClass, rateOut, rateProgressiveSum, noteMajurity); @@ -8865,7 +8870,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } catch (e2) { if ((e2 == null ? void 0 : e2.name) === "YAMLParseError") { const errorMessage = `Update majuritys failed Malformed frontamtter on this file : ${file.path} ${e2.message}`; - new import_obsidian5.Notice(errorMessage, 4e3); + new import_obsidian5.Notice(errorMessage, this.getSettingNumber("timeShowNotice") * 1e3); console.error(errorMessage); } } @@ -8962,7 +8967,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.giveStatusPoints(pointsForDailyChallenge, "formIncreaseDailyCreatedNoteCount"); const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge * (this.getSettingNumber("badgeBoosterFactor") + this.getSettingNumber("streakbooster"))); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`); - new import_obsidian5.Notice(message, 4e3); + new import_obsidian5.Notice(message, this.getSettingNumber("timeShowNotice") * 1e3); console.log(message); } else { console.log(`${newDailyNoteCreationTask}/2 Notes created today.`); @@ -9001,7 +9006,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` await this.giveStatusPoints(pointsForWeeklyChallenge, "fromCheckForWeeklyNoteChallengeEvaluation"); console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`); const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge * (this.getSettingNumber("badgeBoosterFactor") + this.getSettingNumber("streakbooster"))); - new import_obsidian5.Notice(message, 4e3); + new import_obsidian5.Notice(message, this.getSettingNumber("timeShowNotice") * 1e3); console.log(message); } else { console.log(`${newWeeklyNoteCreationTask}/7 Notes created in a chain.`); @@ -9157,7 +9162,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` let nextLevelAt = this.getSettingNumber("xpForNextLevel"); let receiveBadge = false; if (this.getSettingNumber("statusLevel") < level.level) { - new import_obsidian5.Notice(`With ${newPoints} points, the current level is ${level.level}.`, 5e3); + new import_obsidian5.Notice(`With ${newPoints} points, the current level is ${level.level}.`, this.getSettingNumber("timeShowNotice") * 1e3 * 1.2); receiveBadge = checkIfReceiveABadge(this.getSettingNumber("statusLevel"), level.level); this.setSettingNumber("statusLevel", level.level); nextLevelAt = level.pointsNext; @@ -9348,7 +9353,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` newLevel.then((result) => { if (result) { const badge = getBadgeForLevel(this.getSettingNumber("statusLevel"), false); - new import_obsidian5.Notice(`You've earned the "${badge.name}" badge. ${badge.description}`, 5e3); + new import_obsidian5.Notice(`You've earned the "${badge.name}" badge. ${badge.description}`, this.getSettingNumber("timeShowNotice") * 1e3 * 1.2); console.log(`You've earned the "${badge.name}" badge. ${badge.description}`); this.giveBadgeInProfile(this.getSettingString("avatarPageName"), badge); this.setSettingBoolean("badgeBoosterState", false); @@ -9379,7 +9384,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } catch (e2) { if ((e2 == null ? void 0 : e2.name) === "YAMLParseError") { const errorMessage = `Update majuritys failed Malformed frontamtter ${e2.message}`; - new import_obsidian5.Notice(errorMessage, 4e3); + new import_obsidian5.Notice(errorMessage, this.getSettingNumber("timeShowNotice") * 1e3); console.error(errorMessage); } } @@ -9438,7 +9443,7 @@ You received an initialisation Booster aktiv for your first level ups. Game on!` } } console.log(`You earned: ${concatenateStrings(earnedIngredientToShow)}`); - new import_obsidian5.Notice(`You earned ${concatenateStrings(earnedIngredientToShow)}`, 3e3); + new import_obsidian5.Notice(`You earned ${concatenateStrings(earnedIngredientToShow)}`, this.getSettingNumber("timeShowNotice") * 1e3); } else { console.log("You did not earn an ingredient this time."); } @@ -9553,4 +9558,4 @@ crypto-js/mode-ctr-gladman.js: * Jan Hruby jhruby.web@gmail.com *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMveDY0LWNvcmUuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9saWItdHlwZWRhcnJheXMuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtdXRmMTYuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtYmFzZTY0LmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvZW5jLWJhc2U2NHVybC5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21kNS5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTEuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyNTYuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyMjQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGE1MTIuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzODQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmlwZW1kMTYwLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaG1hYy5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3Bia2RmMi5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2V2cGtkZi5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NpcGhlci1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jZmIuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWN0ci5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtY3RyLWdsYWRtYW4uanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLW9mYi5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWFuc2l4OTIzLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWlzbzEwMTI2LmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWlzbzk3OTcxLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLW5vcGFkZGluZy5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2Zvcm1hdC1oZXguanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy90cmlwbGVkZXMuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yYzQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yYWJiaXQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yYWJiaXQtbGVnYWN5LmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaW5kZXguanMiLCAic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL2VuY3J5cHRpb24udHMiLCAibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNEYXRlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vdG9EYXRlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNWYWxpZC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWsvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ1dlZWsvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdExvbmcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2xvY2FsaXplL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL21hdGNoL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZm9ybWF0L2luZGV4LmpzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9iYWRnZXMudHMiLCAic3JjL2xldmVscy50cyIsICJzcmMvcmFuZG9tTm90aWZpY2F0aW9uVGV4dC50cyIsICJzcmMvTW9kYWxJbmZvcm1hdGlvbmJveC50cyIsICJzcmMvTW9kYWxCb29zdGVyLnRzIiwgInNyYy9NdWx0aVNlbGVjdE1vZGFsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0cm9vdC5DcnlwdG9KUyA9IGZhY3RvcnkoKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0LypnbG9iYWxzIHdpbmRvdywgZ2xvYmFsLCByZXF1aXJlKi9cblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblxuXHQgICAgdmFyIGNyeXB0bztcblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdpbmRvdyAoQnJvd3Nlcilcblx0ICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93LmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbiB3ZWIgd29ya2VyIChCcm93c2VyKVxuXHQgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IHNlbGYuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gd29ya2VyXG5cdCAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSAoZXhwZXJpbWVudGFsIElFIDExKSBjcnlwdG8gZnJvbSB3aW5kb3cgKEJyb3dzZXIpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubXNDcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSB3aW5kb3cubXNDcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSBnbG9iYWwgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGltcG9ydCB2aWEgcmVxdWlyZSAoTm9kZUpTKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblx0ICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cdCAgICB9XG5cblx0ICAgIC8qXG5cdCAgICAgKiBDcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3Jcblx0ICAgICAqXG5cdCAgICAgKiBBcyBNYXRoLnJhbmRvbSgpIGlzIGNyeXB0b2dyYXBoaWNhbGx5IG5vdCBzYWZlIHRvIHVzZVxuXHQgICAgICovXG5cdCAgICB2YXIgY3J5cHRvU2VjdXJlUmFuZG9tSW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChjcnlwdG8pIHtcblx0ICAgICAgICAgICAgLy8gVXNlIGdldFJhbmRvbVZhbHVlcyBtZXRob2QgKEJyb3dzZXIpXG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gVXNlIHJhbmRvbUJ5dGVzIG1ldGhvZCAoTm9kZUpTKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5yYW5kb21CeXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4nKTtcblx0ICAgIH07XG5cblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsbCBvZiBPYmplY3QuY3JlYXRlXG5cblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge31cblxuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgIEYucHJvdG90eXBlID0gb2JqO1xuXG5cdCAgICAgICAgICAgIHN1YnR5cGUgPSBuZXcgRigpO1xuXG5cdCAgICAgICAgICAgIEYucHJvdG90eXBlID0gbnVsbDtcblxuXHQgICAgICAgICAgICByZXR1cm4gc3VidHlwZTtcblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhhdFNpZ0J5dGVzOyBqICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGopID4+PiAyXSA9IHRoYXRXb3Jkc1tqID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKGNyeXB0b1NlY3VyZVJhbmRvbUludCgpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgWDMyV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvKipcblx0ICAgICAqIHg2NCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3g2NCA9IEMueDY0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSA2NC1iaXQgd29yZC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA2NC1iaXQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIDMyIGJpdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IDMyIGJpdHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4NjRXb3JkID0gQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoaWdoLCBsb3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBOT1RzIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBuZWdhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG5lZ2F0ZWQgPSB4NjRXb3JkLm5vdCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG5vdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IH50aGlzLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB+dGhpcy5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgQU5EcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIEFORCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBBTkRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhbmRlZCA9IHg2NFdvcmQuYW5kKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhbmQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoICYgd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgJiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBPUmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG9yZWQgPSB4NjRXb3JkLm9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBvcjogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggfCB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyB8IHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIFhPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBYT1Igd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgWE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeG9yZWQgPSB4NjRXb3JkLnhvcihhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8geG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCBeIHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IF4gd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFNoaWZ0cyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRMKDI1KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBzaGlmdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIGlmIChuIDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gKHRoaXMuaGlnaCA8PCBuKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IDw8IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMubG93IDw8IChuIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyA+Pj4gbikgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG4pKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoID4+PiBuO1xuXHQgICAgICAgICAgICAvLyB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMuaGlnaCA+Pj4gKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0TChuKS5vcih0aGlzLnNoaWZ0Uig2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgcm90YXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdFI6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0UihuKS5vcih0aGlzLnNoaWZ0TCg2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIGFkZCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBhZGRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhZGRlZCA9IHg2NFdvcmQuYWRkKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhZGQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgKyB3b3JkLmxvdykgfCAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgY2FycnkgPSAobG93ID4+PiAwKSA8ICh0aGlzLmxvdyA+Pj4gMCkgPyAxIDogMDtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoICsgd29yZC5oaWdoICsgY2FycnkpIHwgMDtcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiA2NC1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2lnQnl0ZXMgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgKi9cblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXkgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyAoT3B0aW9uYWwpIEFuIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyksXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcblx0ICAgICAgICAgKiAgICAgXSk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdLCAxMCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogODtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIDY0LWJpdCB3b3JkIGFycmF5IHRvIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDcnlwdG9KUy5saWIuV29yZEFycmF5fSBUaGlzIHdvcmQgYXJyYXkncyBkYXRhIGFzIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4MzJXb3JkQXJyYXkgPSB4NjRXb3JkQXJyYXkudG9YMzIoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1gzMjogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzTGVuZ3RoID0geDY0V29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHgzMldvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeDY0V29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHg2NFdvcmQgPSB4NjRXb3Jkc1tpXTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5oaWdoKTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5sb3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFgzMldvcmRBcnJheS5jcmVhdGUoeDMyV29yZHMsIHRoaXMuc2lnQnl0ZXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkQXJyYXl9IFRoZSBjbG9uZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNsb25lID0geDY0V29yZEFycmF5LmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIFwid29yZHNcIiBhcnJheVxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgZWFjaCBYNjRXb3JkIG9iamVjdFxuXHQgICAgICAgICAgICB2YXIgd29yZHNMZW5ndGggPSB3b3Jkcy5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3b3Jkc1tpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIENoZWNrIGlmIHR5cGVkIGFycmF5cyBhcmUgc3VwcG9ydGVkXG5cdCAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblxuXHQgICAgLy8gUmVmZXJlbmNlIG9yaWdpbmFsIGluaXRcblx0ICAgIHZhciBzdXBlckluaXQgPSBXb3JkQXJyYXkuaW5pdDtcblxuXHQgICAgLy8gQXVnbWVudCBXb3JkQXJyYXkuaW5pdCB0byBoYW5kbGUgdHlwZWQgYXJyYXlzXG5cdCAgICB2YXIgc3ViSW5pdCA9IFdvcmRBcnJheS5pbml0ID0gZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0ICAgICAgICAvLyBDb252ZXJ0IGJ1ZmZlcnMgdG8gdWludDhcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb252ZXJ0IG90aGVyIGFycmF5IHZpZXdzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5IHx8XG5cdCAgICAgICAgICAgICh0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheS5idWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5ieXRlTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBIYW5kbGUgVWludDhBcnJheVxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSB0eXBlZEFycmF5LmJ5dGVMZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gRXh0cmFjdCBieXRlc1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZEFycmF5Qnl0ZUxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAyXSB8PSB0eXBlZEFycmF5W2ldIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhpcyB3b3JkIGFycmF5XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5jYWxsKHRoaXMsIHdvcmRzLCB0eXBlZEFycmF5Qnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8gRWxzZSBjYWxsIG5vcm1hbCBpbml0XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIHN1YkluaXQucHJvdG90eXBlID0gV29yZEFycmF5O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmxpYi5Xb3JkQXJyYXk7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IEJFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmMTZCRSA9IENfZW5jLlV0ZjE2ID0gQ19lbmMuVXRmMTZCRSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGYxNlN0cmluZyA9IENyeXB0b0pTLmVuYy5VdGYxNi5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgQkUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTYucGFyc2UodXRmMTZTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gdXRmMTZTdHIuY2hhckNvZGVBdChpKSA8PCAoMTYgLSAoaSAlIDIpICogMTYpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtMTYgTEUgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIENfZW5jLlV0ZjE2TEUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHIgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gc3dhcEVuZGlhbigod29yZHNbaSA+Pj4gMl0gPj4+ICgxNiAtIChpICUgNCkgKiA4KSkgJiAweGZmZmYpO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgTEUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5wYXJzZSh1dGYxNlN0cik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGYxNlN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1dGYxNlN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSBzd2FwRW5kaWFuKHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgdXRmMTZTdHJMZW5ndGggKiAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBzd2FwRW5kaWFuKHdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gKCh3b3JkIDw8IDgpICYgMHhmZjAwZmYwMCkgfCAoKHdvcmQgPj4+IDgpICYgMHgwMGZmMDBmZik7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLlV0ZjE2O1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2U2NCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBiYXNlNjRTdHJpbmcgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgYmFzZTY0Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTEgPSAod29yZHNbaSA+Pj4gMl0gICAgICAgPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgICAgICAgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUyID0gKHdvcmRzWyhpICsgMSkgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAxKSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMyA9ICh3b3Jkc1soaSArIDIpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMikgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGUxIDw8IDE2KSB8IChieXRlMiA8PCA4KSB8IGJ5dGUzO1xuXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgKGogPCA0KSAmJiAoaSArIGogKiAwLjc1IDwgc2lnQnl0ZXMpOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+ICg2ICogKDMgLSBqKSkpICYgMHgzZikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2U2NENoYXJzLmxlbmd0aCAlIDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBiYXNlNjRDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBCYXNlNjQgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShiYXNlNjRTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoYmFzZTY0U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgYmFzZTY0U3RyTGVuZ3RoID0gYmFzZTY0U3RyLmxlbmd0aDtcblx0ICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcblx0ICAgICAgICAgICAgdmFyIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwO1xuXG5cdCAgICAgICAgICAgIGlmICghcmV2ZXJzZU1hcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwID0gW107XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZU1hcFttYXAuY2hhckNvZGVBdChqKV0gPSBqO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElnbm9yZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0ckxlbmd0aCA9IHBhZGRpbmdJbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCk7XG5cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21hcDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89J1xuXHQgICAgfTtcblxuXHQgICAgZnVuY3Rpb24gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKSB7XG5cdCAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICB2YXIgbkJ5dGVzID0gMDtcblx0ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlNjRTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgaWYgKGkgJSA0KSB7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHMxID0gcmV2ZXJzZU1hcFtiYXNlNjRTdHIuY2hhckNvZGVBdChpIC0gMSldIDw8ICgoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHMyID0gcmV2ZXJzZU1hcFtiYXNlNjRTdHIuY2hhckNvZGVBdChpKV0gPj4+ICg2IC0gKGkgJSA0KSAqIDIpO1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzQ29tYmluZWQgPSBiaXRzMSB8IGJpdHMyO1xuXHQgICAgICAgICAgICAgIHdvcmRzW25CeXRlcyA+Pj4gMl0gfD0gYml0c0NvbWJpbmVkIDw8ICgyNCAtIChuQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgIG5CeXRlcysrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgfVxuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmVuYy5CYXNlNjQ7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZTY0dXJsIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZTY0dXJsID0gQ19lbmMuQmFzZTY0dXJsID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NHVybCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB1cmxTYWZlIFdoZXRoZXIgdG8gdXNlIHVybCBzYWZlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjR1cmwgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXksIHVybFNhZmU9dHJ1ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgYmFzZTY0Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTEgPSAod29yZHNbaSA+Pj4gMl0gICAgICAgPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgICAgICAgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUyID0gKHdvcmRzWyhpICsgMSkgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAxKSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMyA9ICh3b3Jkc1soaSArIDIpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMikgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGUxIDw8IDE2KSB8IChieXRlMiA8PCA4KSB8IGJ5dGUzO1xuXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgKGogPCA0KSAmJiAoaSArIGogKiAwLjc1IDwgc2lnQnl0ZXMpOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+ICg2ICogKDMgLSBqKSkpICYgMHgzZikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2U2NENoYXJzLmxlbmd0aCAlIDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBiYXNlNjRDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBCYXNlNjR1cmwgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NHVybCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVybFNhZmUgV2hldGhlciB0byB1c2UgdXJsIHNhZmVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0dXJsLnBhcnNlKGJhc2U2NFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChiYXNlNjRTdHIsIHVybFNhZmU9dHJ1ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG5cdCAgICAgICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuXHQgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcblx0ICAgICAgICAgICAgICAgIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElnbm9yZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0ckxlbmd0aCA9IHBhZGRpbmdJbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCk7XG5cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21hcDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Jyxcblx0ICAgICAgICBfc2FmZV9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyxcblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuXHQgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFzZTY0U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgKChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiAoNiAtIChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRzQ29tYmluZWQgPSBiaXRzMSB8IGJpdHMyO1xuXHQgICAgICAgICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgKDI0IC0gKG5CeXRlcyAlIDQpICogOCk7XG5cdCAgICAgICAgICAgICAgICBuQnl0ZXMrKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIFQgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSAoTWF0aC5hYnMoTWF0aC5zaW4oaSArIDEpKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNRDUgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NlxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8wICA9IE1bb2Zmc2V0ICsgMF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xICA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8yICA9IE1bb2Zmc2V0ICsgMl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8zICA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF80ICA9IE1bb2Zmc2V0ICsgNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF81ICA9IE1bb2Zmc2V0ICsgNV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF82ICA9IE1bb2Zmc2V0ICsgNl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF83ICA9IE1bb2Zmc2V0ICsgN107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF84ICA9IE1bb2Zmc2V0ICsgOF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF85ICA9IE1bb2Zmc2V0ICsgOV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMCA9IE1bb2Zmc2V0ICsgMTBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTEgPSBNW29mZnNldCArIDExXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzEyID0gTVtvZmZzZXQgKyAxMl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMyA9IE1bb2Zmc2V0ICsgMTNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTQgPSBNW29mZnNldCArIDE0XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE1ID0gTVtvZmZzZXQgKyAxNV07XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWxiZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNywgIFRbMF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMSwgIDEyLCBUWzFdKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzIsICAxNywgVFsyXSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8zLCAgMjIsIFRbM10pO1xuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfNCwgIDcsICBUWzRdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzUsICAxMiwgVFs1XSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF82LCAgMTcsIFRbNl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfNywgIDIyLCBUWzddKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzgsICA3LCAgVFs4XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF85LCAgMTIsIFRbOV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTAsIDE3LCBUWzEwXSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xMSwgMjIsIFRbMTFdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA3LCAgVFsxMl0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTMsIDEyLCBUWzEzXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTcsIFRbMTRdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE1LCAyMiwgVFsxNV0pO1xuXG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF8xLCAgNSwgIFRbMTZdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzYsICA5LCAgVFsxN10pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTEsIDE0LCBUWzE4XSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8wLCAgMjAsIFRbMTldKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA1LCAgVFsyMF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTAsIDksICBUWzIxXSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTQsIFRbMjJdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzQsICAyMCwgVFsyM10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgIDUsICBUWzI0XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8xNCwgOSwgIFRbMjVdKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzMsICAxNCwgVFsyNl0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfOCwgIDIwLCBUWzI3XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNSwgIFRbMjhdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzIsICA5LCAgVFsyOV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfNywgIDE0LCBUWzMwXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8xMiwgMjAsIFRbMzFdKTtcblxuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfNSwgIDQsICBUWzMyXSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF84LCAgMTEsIFRbMzNdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNiwgVFszNF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTQsIDIzLCBUWzM1XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xLCAgNCwgIFRbMzZdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzQsICAxMSwgVFszN10pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfNywgIDE2LCBUWzM4XSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF8xMCwgMjMsIFRbMzldKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEzLCA0LCAgVFs0MF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMCwgIDExLCBUWzQxXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTYsIFRbNDJdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzYsICAyMywgVFs0M10pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgIDQsICBUWzQ0XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF8xMiwgMTEsIFRbNDVdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE1LCAxNiwgVFs0Nl0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMiwgIDIzLCBUWzQ3XSk7XG5cblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzAsICA2LCAgVFs0OF0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfNywgIDEwLCBUWzQ5XSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTUsIFRbNTBdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzUsICAyMSwgVFs1MV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfMTIsIDYsICBUWzUyXSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8zLCAgMTAsIFRbNTNdKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNSwgVFs1NF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMSwgIDIxLCBUWzU1XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNiwgIFRbNTZdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzE1LCAxMCwgVFs1N10pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE1LCBUWzU4XSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF8xMywgMjEsIFRbNTldKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA2LCAgVFs2MF0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTEsIDEwLCBUWzYxXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTUsIFRbNjJdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzksICAyMSwgVFs2M10pO1xuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsSCA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWxMID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsSCA8PCA4KSAgfCAobkJpdHNUb3RhbEggPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsSCA8PCAyNCkgfCAobkJpdHNUb3RhbEggPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxMIDw8IDgpICB8IChuQml0c1RvdGFsTCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxMIDw8IDI0KSB8IChuQml0c1RvdGFsTCA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gRkYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArICgoYiAmIGMpIHwgKH5iICYgZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gR0coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArICgoYiAmIGQpIHwgKGMgJiB+ZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gSEgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArIChiIF4gYyBeIGQpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gSUkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuTUQ1KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuTUQ1ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoTUQ1KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNNRDUobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjTUQ1ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKE1ENSk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLk1ENTtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0xIGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMSA9IENfYWxnby5TSEExID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3Nixcblx0ICAgICAgICAgICAgICAgIDB4YzNkMmUxZjBcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IChuIDw8IDEpIHwgKG4gPj4+IDMxKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSAoKGEgPDwgNSkgfCAoYSA+Pj4gMjcpKSArIGUgKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAyMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAofmIgJiBkKSkgKyAweDVhODI3OTk5O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpICsgMHg2ZWQ5ZWJhMTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDYwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpKSAtIDB4NzBlNDQzMjQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGkgPCA4MCkgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgLSAweDM1OWQzZTJhO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBlID0gZDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IChiIDw8IDMwKSB8IChiID4+PiAyKTtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTEgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEExKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEExKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTEgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMTtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIEluaXRpYWxpemF0aW9uIGFuZCByb3VuZCBjb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgSCA9IFtdO1xuXHQgICAgdmFyIEsgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gaXNQcmltZShuKSB7XG5cdCAgICAgICAgICAgIHZhciBzcXJ0TiA9IE1hdGguc3FydChuKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFjdG9yID0gMjsgZmFjdG9yIDw9IHNxcnROOyBmYWN0b3IrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCEobiAlIGZhY3RvcikpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsQml0cyhuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoKG4gLSAobiB8IDApKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIG4gPSAyO1xuXHQgICAgICAgIHZhciBuUHJpbWUgPSAwO1xuXHQgICAgICAgIHdoaWxlIChuUHJpbWUgPCA2NCkge1xuXHQgICAgICAgICAgICBpZiAoaXNQcmltZShuKSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5QcmltZSA8IDgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBIW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgS1tuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDMpKTtcblxuXHQgICAgICAgICAgICAgICAgblByaW1lKys7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBuKys7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yNTYgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChILnNsaWNlKDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblx0ICAgICAgICAgICAgdmFyIGYgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgZyA9IEhbNl07XG5cdCAgICAgICAgICAgIHZhciBoID0gSFs3XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4ID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTAgID0gKChnYW1tYTB4IDw8IDI1KSB8IChnYW1tYTB4ID4+PiA3KSkgIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZ2FtbWEweCA8PCAxNCkgfCAoZ2FtbWEweCA+Pj4gMTgpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdhbW1hMHggPj4+IDMpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExICA9ICgoZ2FtbWExeCA8PCAxNSkgfCAoZ2FtbWExeCA+Pj4gMTcpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMXggPDwgMTMpIHwgKGdhbW1hMXggPj4+IDE5KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTF4ID4+PiAxMCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciBjaCAgPSAoZSAmIGYpIF4gKH5lICYgZyk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqID0gKGEgJiBiKSBeIChhICYgYykgXiAoYiAmIGMpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwID0gKChhIDw8IDMwKSB8IChhID4+PiAyKSkgXiAoKGEgPDwgMTkpIHwgKGEgPj4+IDEzKSkgXiAoKGEgPDwgMTApIHwgKGEgPj4+IDIyKSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExID0gKChlIDw8IDI2KSB8IChlID4+PiA2KSkgXiAoKGUgPDwgMjEpIHwgKGUgPj4+IDExKSkgXiAoKGUgPDwgNykgIHwgKGUgPj4+IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gc2lnbWEwICsgbWFqO1xuXG5cdCAgICAgICAgICAgICAgICBoID0gZztcblx0ICAgICAgICAgICAgICAgIGcgPSBmO1xuXHQgICAgICAgICAgICAgICAgZiA9IGU7XG5cdCAgICAgICAgICAgICAgICBlID0gKGQgKyB0MSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gYjtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9ICh0MSArIHQyKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICAgICAgSFs1XSA9IChIWzVdICsgZikgfCAwO1xuXHQgICAgICAgICAgICBIWzZdID0gKEhbNl0gKyBnKSB8IDA7XG5cdCAgICAgICAgICAgIEhbN10gPSAoSFs3XSArIGgpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEyNTYpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjU2KTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjU2O1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGEyNTZcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMjU2XCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yMjQgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyMjQgPSBDX2FsZ28uU0hBMjI0ID0gU0hBMjU2LmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuXHQgICAgICAgICAgICAgICAgMHhmZmMwMGIzMSwgMHg2ODU4MTUxMSwgMHg2NGY5OGZhNywgMHhiZWZhNGZhNFxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEEyNTYuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyMjQoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTIyNCA9IFNIQTI1Ni5fY3JlYXRlSGVscGVyKFNIQTIyNCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMjI0KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTIyNCA9IFNIQTI1Ni5fY3JlYXRlSG1hY0hlbHBlcihTSEEyMjQpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTIyNDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciBXaWg7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgV2kgPSBXW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFeHRlbmQgbWVzc2FnZVxuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IFdpLmxvdyAgPSBNW29mZnNldCArIGkgKiAyICsgMV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTBcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCAgPSBXW2kgLSAxNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHhoID0gZ2FtbWEweC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4bCA9IGdhbW1hMHgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTBoICA9ICgoZ2FtbWEweGggPj4+IDEpIHwgKGdhbW1hMHhsIDw8IDMxKSkgXiAoKGdhbW1hMHhoID4+PiA4KSB8IChnYW1tYTB4bCA8PCAyNCkpIF4gKGdhbW1hMHhoID4+PiA3KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwbCAgPSAoKGdhbW1hMHhsID4+PiAxKSB8IChnYW1tYTB4aCA8PCAzMSkpIF4gKChnYW1tYTB4bCA+Pj4gOCkgfCAoZ2FtbWEweGggPDwgMjQpKSBeICgoZ2FtbWEweGwgPj4+IDcpIHwgKGdhbW1hMHhoIDw8IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTFcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeCAgPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeGggPSBnYW1tYTF4LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhsID0gZ2FtbWExeC5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWggID0gKChnYW1tYTF4aCA+Pj4gMTkpIHwgKGdhbW1hMXhsIDw8IDEzKSkgXiAoKGdhbW1hMXhoIDw8IDMpIHwgKGdhbW1hMXhsID4+PiAyOSkpIF4gKGdhbW1hMXhoID4+PiA2KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExbCAgPSAoKGdhbW1hMXhsID4+PiAxOSkgfCAoZ2FtbWExeGggPDwgMTMpKSBeICgoZ2FtbWExeGwgPDwgMykgfCAoZ2FtbWExeGggPj4+IDI5KSkgXiAoKGdhbW1hMXhsID4+PiA2KSB8IChnYW1tYTF4aCA8PCAyNikpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpNyAgPSBXW2kgLSA3XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3aCA9IFdpNy5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTdsID0gV2k3LmxvdztcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2ICA9IFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNmggPSBXaTE2LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZsID0gV2kxNi5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBnYW1tYTBsICsgV2k3bDtcblx0ICAgICAgICAgICAgICAgICAgICBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBXaWwgKyBnYW1tYTFsO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpaCArIGdhbW1hMWggKyAoKFdpbCA+Pj4gMCkgPCAoZ2FtbWExbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICAgICAgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2loICsgV2kxNmggKyAoKFdpbCA+Pj4gMCkgPCAoV2kxNmwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV2kuaGlnaCA9IFdpaDtcblx0ICAgICAgICAgICAgICAgICAgICBXaS5sb3cgID0gV2lsO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2hoICA9IChlaCAmIGZoKSBeICh+ZWggJiBnaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hsICA9IChlbCAmIGZsKSBeICh+ZWwgJiBnbCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqaCA9IChhaCAmIGJoKSBeIChhaCAmIGNoKSBeIChiaCAmIGNoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWpsID0gKGFsICYgYmwpIF4gKGFsICYgY2wpIF4gKGJsICYgY2wpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwaCA9ICgoYWggPj4+IDI4KSB8IChhbCA8PCA0KSkgIF4gKChhaCA8PCAzMCkgIHwgKGFsID4+PiAyKSkgXiAoKGFoIDw8IDI1KSB8IChhbCA+Pj4gNykpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGwgPSAoKGFsID4+PiAyOCkgfCAoYWggPDwgNCkpICBeICgoYWwgPDwgMzApICB8IChhaCA+Pj4gMikpIF4gKChhbCA8PCAyNSkgfCAoYWggPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTFoID0gKChlaCA+Pj4gMTQpIHwgKGVsIDw8IDE4KSkgXiAoKGVoID4+PiAxOCkgfCAoZWwgPDwgMTQpKSBeICgoZWggPDwgMjMpIHwgKGVsID4+PiA5KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExbCA9ICgoZWwgPj4+IDE0KSB8IChlaCA8PCAxOCkpIF4gKChlbCA+Pj4gMTgpIHwgKGVoIDw8IDE0KSkgXiAoKGVsIDw8IDIzKSB8IChlaCA+Pj4gOSkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldXG5cdCAgICAgICAgICAgICAgICB2YXIgS2kgID0gS1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWggPSBLaS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgdmFyIEtpbCA9IEtpLmxvdztcblxuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IGhsICsgc2lnbWExbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSBoaCArIHNpZ21hMWggKyAoKHQxbCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIGNobDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBjaGggKyAoKHQxbCA+Pj4gMCkgPCAoY2hsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBLaWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgS2loICsgKCh0MWwgPj4+IDApIDwgKEtpbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgV2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIFdpaCArICgodDFsID4+PiAwKSA8IChXaWwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MiA9IHNpZ21hMCArIG1halxuXHQgICAgICAgICAgICAgICAgdmFyIHQybCA9IHNpZ21hMGwgKyBtYWpsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyaCA9IHNpZ21hMGggKyBtYWpoICsgKCh0MmwgPj4+IDApIDwgKHNpZ21hMGwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgd29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgICAgIGhoID0gZ2g7XG5cdCAgICAgICAgICAgICAgICBobCA9IGdsO1xuXHQgICAgICAgICAgICAgICAgZ2ggPSBmaDtcblx0ICAgICAgICAgICAgICAgIGdsID0gZmw7XG5cdCAgICAgICAgICAgICAgICBmaCA9IGVoO1xuXHQgICAgICAgICAgICAgICAgZmwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gKGRsICsgdDFsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBlaCA9IChkaCArIHQxaCArICgoZWwgPj4+IDApIDwgKGRsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZGggPSBjaDtcblx0ICAgICAgICAgICAgICAgIGRsID0gY2w7XG5cdCAgICAgICAgICAgICAgICBjaCA9IGJoO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJoID0gYWg7XG5cdCAgICAgICAgICAgICAgICBibCA9IGFsO1xuXHQgICAgICAgICAgICAgICAgYWwgPSAodDFsICsgdDJsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBhaCA9ICh0MWggKyB0MmggKyAoKGFsID4+PiAwKSA8ICh0MWwgPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIMGwgPSBIMC5sb3cgID0gKEgwbCArIGFsKTtcblx0ICAgICAgICAgICAgSDAuaGlnaCA9IChIMGggKyBhaCArICgoSDBsID4+PiAwKSA8IChhbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMWwgPSBIMS5sb3cgID0gKEgxbCArIGJsKTtcblx0ICAgICAgICAgICAgSDEuaGlnaCA9IChIMWggKyBiaCArICgoSDFsID4+PiAwKSA8IChibCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMmwgPSBIMi5sb3cgID0gKEgybCArIGNsKTtcblx0ICAgICAgICAgICAgSDIuaGlnaCA9IChIMmggKyBjaCArICgoSDJsID4+PiAwKSA8IChjbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIM2wgPSBIMy5sb3cgID0gKEgzbCArIGRsKTtcblx0ICAgICAgICAgICAgSDMuaGlnaCA9IChIM2ggKyBkaCArICgoSDNsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINGwgPSBINC5sb3cgID0gKEg0bCArIGVsKTtcblx0ICAgICAgICAgICAgSDQuaGlnaCA9IChINGggKyBlaCArICgoSDRsID4+PiAwKSA8IChlbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINWwgPSBINS5sb3cgID0gKEg1bCArIGZsKTtcblx0ICAgICAgICAgICAgSDUuaGlnaCA9IChINWggKyBmaCArICgoSDVsID4+PiAwKSA8IChmbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINmwgPSBINi5sb3cgID0gKEg2bCArIGdsKTtcblx0ICAgICAgICAgICAgSDYuaGlnaCA9IChINmggKyBnaCArICgoSDZsID4+PiAwKSA8IChnbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIN2wgPSBINy5sb3cgID0gKEg3bCArIGhsKTtcblx0ICAgICAgICAgICAgSDcuaGlnaCA9IChIN2ggKyBoaCArICgoSDdsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgaGFzaCB0byAzMi1iaXQgd29yZCBhcnJheSBiZWZvcmUgcmV0dXJuaW5nXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaC50b1gzMigpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEwMjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEE1MTIod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEE1MTIpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTUxMihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBNTEyKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEE1MTI7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGE1MTJcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIiwgXCIuL3NoYTUxMlwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX3g2NCA9IEMueDY0O1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkO1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBNTEyID0gQ19hbGdvLlNIQTUxMjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMzg0IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMzg0ID0gQ19hbGdvLlNIQTM4NCA9IFNIQTUxMi5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgWDY0V29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KSwgbmV3IFg2NFdvcmQuaW5pdCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyksIG5ldyBYNjRXb3JkLmluaXQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpLCBuZXcgWDY0V29yZC5pbml0KDB4OGViNDRhODcsIDB4Njg1ODE1MTEpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KSwgbmV3IFg2NFdvcmQuaW5pdCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KVxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEE1MTIuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDE2O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzODQod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhlbHBlcihTSEEzODQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTM4NChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMzg0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzODQ7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZXNcblx0ICAgIHZhciBSSE9fT0ZGU0VUUyA9IFtdO1xuXHQgICAgdmFyIFBJX0lOREVYRVMgID0gW107XG5cdCAgICB2YXIgUk9VTkRfQ09OU1RBTlRTID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgQ29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENvbXB1dGUgcmhvIG9mZnNldCBjb25zdGFudHNcblx0ICAgICAgICB2YXIgeCA9IDEsIHkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuXHQgICAgICAgICAgICBSSE9fT0ZGU0VUU1t4ICsgNSAqIHldID0gKCh0ICsgMSkgKiAodCArIDIpIC8gMikgJSA2NDtcblxuXHQgICAgICAgICAgICB2YXIgbmV3WCA9IHkgJSA1O1xuXHQgICAgICAgICAgICB2YXIgbmV3WSA9ICgyICogeCArIDMgKiB5KSAlIDU7XG5cdCAgICAgICAgICAgIHggPSBuZXdYO1xuXHQgICAgICAgICAgICB5ID0gbmV3WTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHBpIGluZGV4IGNvbnN0YW50c1xuXHQgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICBQSV9JTkRFWEVTW3ggKyA1ICogeV0gPSB5ICsgKCgyICogeCArIDMgKiB5KSAlIDUpICogNTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENvbXB1dGUgcm91bmQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIExGU1IgPSAweDAxO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudE1zdyA9IDA7XG5cdCAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50THN3ID0gMDtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDc7IGorKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKExGU1IgJiAweDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGJpdFBvc2l0aW9uID0gKDEgPDwgaikgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChiaXRQb3NpdGlvbiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRMc3cgXj0gMSA8PCBiaXRQb3NpdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGJpdFBvc2l0aW9uID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRNc3cgXj0gMSA8PCAoYml0UG9zaXRpb24gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgTEZTUlxuXHQgICAgICAgICAgICAgICAgaWYgKExGU1IgJiAweDgwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHBvbHlub21pYWwgb3ZlciBHRigyKTogeF44ICsgeF42ICsgeF41ICsgeF40ICsgMVxuXHQgICAgICAgICAgICAgICAgICAgIExGU1IgPSAoTEZTUiA8PCAxKSBeIDB4NzE7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIExGU1IgPDw9IDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBST1VORF9DT05TVEFOVFNbaV0gPSBYNjRXb3JkLmNyZWF0ZShyb3VuZENvbnN0YW50TXN3LCByb3VuZENvbnN0YW50THN3KTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzIGZvciB0ZW1wb3JhcnkgdmFsdWVzXG5cdCAgICB2YXIgVCA9IFtdO1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgVFtpXSA9IFg2NFdvcmQuY3JlYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMyBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTMgPSBDX2FsZ28uU0hBMyA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvdXRwdXRMZW5ndGhcblx0ICAgICAgICAgKiAgIFRoZSBkZXNpcmVkIG51bWJlciBvZiBiaXRzIGluIHRoZSBvdXRwdXQgaGFzaC5cblx0ICAgICAgICAgKiAgIE9ubHkgdmFsdWVzIHBlcm1pdHRlZCBhcmU6IDIyNCwgMjU2LCAzODQsIDUxMi5cblx0ICAgICAgICAgKiAgIERlZmF1bHQ6IDUxMlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogSGFzaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBvdXRwdXRMZW5ndGg6IDUxMlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGUgPSBbXVxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gbmV3IFg2NFdvcmQuaW5pdCgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgdGhpcy5ibG9ja1NpemUgPSAoMTYwMCAtIDIgKiB0aGlzLmNmZy5vdXRwdXRMZW5ndGgpIC8gMzI7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tTaXplTGFuZXMgPSB0aGlzLmJsb2NrU2l6ZSAvIDI7XG5cblx0ICAgICAgICAgICAgLy8gQWJzb3JiXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbkJsb2NrU2l6ZUxhbmVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIE0yaSAgPSBNW29mZnNldCArIDIgKiBpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkxID0gTVtvZmZzZXQgKyAyICogaSArIDFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgTTJpID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaSA8PCA4KSAgfCAoTTJpID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaSA8PCAyNCkgfCAoTTJpID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgICAgICBNMmkxID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgOCkgIHwgKE0yaTEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTTJpMSA8PCAyNCkgfCAoTTJpMSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBYnNvcmIgbWVzc2FnZSBpbnRvIHN0YXRlXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IE0yaTE7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gTTJpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gVGhldGFcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IGNvbHVtbiBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gMCwgdExzdyA9IDA7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0TXN3IF49IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyBePSBsYW5lLmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBUZW1wb3JhcnkgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4ID0gVFt4XTtcblx0ICAgICAgICAgICAgICAgICAgICBUeC5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUeC5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4NCA9IFRbKHggKyA0KSAlIDVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDEgPSBUWyh4ICsgMSkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTXN3ID0gVHgxLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MUxzdyA9IFR4MS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBNaXggc3Vycm91bmRpbmcgY29sdW1uc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gVHg0LmhpZ2ggXiAoKFR4MU1zdyA8PCAxKSB8IChUeDFMc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3cgPSBUeDQubG93ICBeICgoVHgxTHN3IDw8IDEpIHwgKFR4MU1zdyA+Pj4gMzEpKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW3ggKyA1ICogeV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gdExzdztcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJobyBQaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgbGFuZUluZGV4ID0gMTsgbGFuZUluZGV4IDwgMjU7IGxhbmVJbmRleCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVMc3cgPSBsYW5lLmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmhvT2Zmc2V0ID0gUkhPX09GRlNFVFNbbGFuZUluZGV4XTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0ZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyaG9PZmZzZXQgPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0TXN3ID0gKGxhbmVNc3cgPDwgcmhvT2Zmc2V0KSB8IChsYW5lTHN3ID4+PiAoMzIgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTHN3IDw8IHJob09mZnNldCkgfCAobGFuZU1zdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChyaG9PZmZzZXQgPj0gMzIpICovIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTHN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVNc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0THN3ID0gKGxhbmVNc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZUxzdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNwb3NlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFRQaUxhbmUgPSBUW1BJX0lOREVYRVNbbGFuZUluZGV4XV07XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUUGlMYW5lLmxvdyAgPSB0THN3O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gcGkgYXQgeCA9IHkgPSAwXG5cdCAgICAgICAgICAgICAgICB2YXIgVDAgPSBUWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgVDAuaGlnaCA9IHN0YXRlMC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgVDAubG93ICA9IHN0YXRlMC5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIENoaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVJbmRleCA9IHggKyA1ICogeTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVExhbmUgPSBUW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMYW5lID0gVFsoKHggKyAxKSAlIDUpICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgyTGFuZSA9IFRbKCh4ICsgMikgJSA1KSArIDUgKiB5XTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXggcm93c1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggPSBUTGFuZS5oaWdoIF4gKH5UeDFMYW5lLmhpZ2ggJiBUeDJMYW5lLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgPSBUTGFuZS5sb3cgIF4gKH5UeDFMYW5lLmxvdyAgJiBUeDJMYW5lLmxvdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJb3RhXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnQgPSBST1VORF9DT05TVEFOVFNbcm91bmRdO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IHJvdW5kQ29uc3RhbnQuaGlnaDtcblx0ICAgICAgICAgICAgICAgIGxhbmUubG93ICBePSByb3VuZENvbnN0YW50Lmxvdztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQml0cyA9IHRoaXMuYmxvY2tTaXplICogMzI7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHgxIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoTWF0aC5jZWlsKChuQml0c0xlZnQgKyAxKSAvIGJsb2NrU2l6ZUJpdHMpICogYmxvY2tTaXplQml0cykgPj4+IDUpIC0gMV0gfD0gMHg4MDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRMZW5ndGhCeXRlcyA9IHRoaXMuY2ZnLm91dHB1dExlbmd0aCAvIDg7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRMZW5ndGhMYW5lcyA9IG91dHB1dExlbmd0aEJ5dGVzIC8gODtcblxuXHQgICAgICAgICAgICAvLyBTcXVlZXplXG5cdCAgICAgICAgICAgIHZhciBoYXNoV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRwdXRMZW5ndGhMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZU1zdyA9IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgICAgICBsYW5lTXN3ID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgOCkgIHwgKGxhbmVNc3cgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZU1zdyA8PCAyNCkgfCAobGFuZU1zdyA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgbGFuZUxzdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDgpICB8IChsYW5lTHN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVMc3cgPDwgMjQpIHwgKGxhbmVMc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3F1ZWV6ZSBzdGF0ZSB0byByZXRyaWV2ZSBoYXNoXG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTHN3KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hXb3Jkcy5wdXNoKGxhbmVNc3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChoYXNoV29yZHMsIG91dHB1dExlbmd0aEJ5dGVzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gY2xvbmUuX3N0YXRlID0gdGhpcy5fc3RhdGUuc2xpY2UoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgc3RhdGVbaV0gPSBzdGF0ZVtpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMygnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMyh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTMgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEzKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTMgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMyk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTM7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKiogQHByZXNlcnZlXG5cdChjKSAyMDEyIGJ5IENcdTAwRTlkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuXHRSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cblx0ICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblx0VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXHQqL1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIF96bCA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG5cdCAgICAgICAgNywgIDQsIDEzLCAgMSwgMTAsICA2LCAxNSwgIDMsIDEyLCAgMCwgIDksICA1LCAgMiwgMTQsIDExLCAgOCxcblx0ICAgICAgICAzLCAxMCwgMTQsICA0LCAgOSwgMTUsICA4LCAgMSwgIDIsICA3LCAgMCwgIDYsIDEzLCAxMSwgIDUsIDEyLFxuXHQgICAgICAgIDEsICA5LCAxMSwgMTAsICAwLCAgOCwgMTIsICA0LCAxMywgIDMsICA3LCAxNSwgMTQsICA1LCAgNiwgIDIsXG5cdCAgICAgICAgNCwgIDAsICA1LCAgOSwgIDcsIDEyLCAgMiwgMTAsIDE0LCAgMSwgIDMsICA4LCAxMSwgIDYsIDE1LCAxM10pO1xuXHQgICAgdmFyIF96ciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDUsIDE0LCAgNywgIDAsICA5LCAgMiwgMTEsICA0LCAxMywgIDYsIDE1LCAgOCwgIDEsIDEwLCAgMywgMTIsXG5cdCAgICAgICAgNiwgMTEsICAzLCAgNywgIDAsIDEzLCAgNSwgMTAsIDE0LCAxNSwgIDgsIDEyLCAgNCwgIDksICAxLCAgMixcblx0ICAgICAgICAxNSwgIDUsICAxLCAgMywgIDcsIDE0LCAgNiwgIDksIDExLCAgOCwgMTIsICAyLCAxMCwgIDAsICA0LCAxMyxcblx0ICAgICAgICA4LCAgNiwgIDQsICAxLCAgMywgMTEsIDE1LCAgMCwgIDUsIDEyLCAgMiwgMTMsICA5LCAgNywgMTAsIDE0LFxuXHQgICAgICAgIDEyLCAxNSwgMTAsICA0LCAgMSwgIDUsICA4LCAgNywgIDYsICAyLCAxMywgMTQsICAwLCAgMywgIDksIDExXSk7XG5cdCAgICB2YXIgX3NsID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgIDExLCAxNCwgMTUsIDEyLCAgNSwgIDgsICA3LCAgOSwgMTEsIDEzLCAxNCwgMTUsICA2LCAgNywgIDksICA4LFxuXHQgICAgICAgIDcsIDYsICAgOCwgMTMsIDExLCAgOSwgIDcsIDE1LCAgNywgMTIsIDE1LCAgOSwgMTEsICA3LCAxMywgMTIsXG5cdCAgICAgICAgMTEsIDEzLCAgNiwgIDcsIDE0LCAgOSwgMTMsIDE1LCAxNCwgIDgsIDEzLCAgNiwgIDUsIDEyLCAgNywgIDUsXG5cdCAgICAgICAgICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCAgOSwgIDgsICA5LCAxNCwgIDUsICA2LCAgOCwgIDYsICA1LCAxMixcblx0ICAgICAgICA5LCAxNSwgIDUsIDExLCAgNiwgIDgsIDEzLCAxMiwgIDUsIDEyLCAxMywgMTQsIDExLCAgOCwgIDUsICA2IF0pO1xuXHQgICAgdmFyIF9zciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDgsICA5LCAgOSwgMTEsIDEzLCAxNSwgMTUsICA1LCAgNywgIDcsICA4LCAxMSwgMTQsIDE0LCAxMiwgIDYsXG5cdCAgICAgICAgOSwgMTMsIDE1LCAgNywgMTIsICA4LCAgOSwgMTEsICA3LCAgNywgMTIsICA3LCAgNiwgMTUsIDEzLCAxMSxcblx0ICAgICAgICA5LCAgNywgMTUsIDExLCAgOCwgIDYsICA2LCAxNCwgMTIsIDEzLCAgNSwgMTQsIDEzLCAxMywgIDcsICA1LFxuXHQgICAgICAgIDE1LCAgNSwgIDgsIDExLCAxNCwgMTQsICA2LCAxNCwgIDYsICA5LCAxMiwgIDksIDEyLCAgNSwgMTUsICA4LFxuXHQgICAgICAgIDgsICA1LCAxMiwgIDksIDEyLCAgNSwgMTQsICA2LCAgOCwgMTMsICA2LCAgNSwgMTUsIDEzLCAxMSwgMTEgXSk7XG5cblx0ICAgIHZhciBfaGwgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4MDAwMDAwMDAsIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsIDB4OEYxQkJDREMsIDB4QTk1M0ZENEVdKTtcblx0ICAgIHZhciBfaHIgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4NTBBMjhCRTYsIDB4NUM0REQxMjQsIDB4NkQ3MDNFRjMsIDB4N0E2RDc2RTksIDB4MDAwMDAwMDBdKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSSVBFTUQxNjAgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSSVBFTUQxNjAgPSBDX2FsZ28uUklQRU1EMTYwID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCAgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2LCAweEMzRDJFMUYwXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggID0gdGhpcy5faGFzaC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGhsID0gX2hsLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaHIgPSBfaHIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB6bCA9IF96bC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpyID0gX3pyLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2wgPSBfc2wud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzciA9IF9zci53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWwsIGJsLCBjbCwgZGwsIGVsO1xuXHQgICAgICAgICAgICB2YXIgYXIsIGJyLCBjciwgZHIsIGVyO1xuXG5cdCAgICAgICAgICAgIGFyID0gYWwgPSBIWzBdO1xuXHQgICAgICAgICAgICBiciA9IGJsID0gSFsxXTtcblx0ICAgICAgICAgICAgY3IgPSBjbCA9IEhbMl07XG5cdCAgICAgICAgICAgIGRyID0gZGwgPSBIWzNdO1xuXHQgICAgICAgICAgICBlciA9IGVsID0gSFs0XTtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgdmFyIHQ7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkgKz0gMSkge1xuXHQgICAgICAgICAgICAgICAgdCA9IChhbCArICBNW29mZnNldCt6bFtpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYmwsY2wsZGwpICsgaGxbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihibCxjbCxkbCkgKyBobFsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJsLGNsLGRsKSArIGhsWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjQoYmwsY2wsZGwpICsgaGxbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYmwsY2wsZGwpICsgaGxbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc2xbaV0pO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VsKXwwO1xuXHQgICAgICAgICAgICAgICAgYWwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gZGw7XG5cdCAgICAgICAgICAgICAgICBkbCA9IHJvdGwoY2wsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNsID0gYmw7XG5cdCAgICAgICAgICAgICAgICBibCA9IHQ7XG5cblx0ICAgICAgICAgICAgICAgIHQgPSAoYXIgKyBNW29mZnNldCt6cltpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYnIsY3IsZHIpICsgaHJbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChicixjcixkcikgKyBoclsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJyLGNyLGRyKSArIGhyWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjIoYnIsY3IsZHIpICsgaHJbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYnIsY3IsZHIpICsgaHJbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc3JbaV0pIDtcblx0ICAgICAgICAgICAgICAgIHQgPSAodCtlcil8MDtcblx0ICAgICAgICAgICAgICAgIGFyID0gZXI7XG5cdCAgICAgICAgICAgICAgICBlciA9IGRyO1xuXHQgICAgICAgICAgICAgICAgZHIgPSByb3RsKGNyLCAxMCk7XG5cdCAgICAgICAgICAgICAgICBjciA9IGJyO1xuXHQgICAgICAgICAgICAgICAgYnIgPSB0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIHQgICAgPSAoSFsxXSArIGNsICsgZHIpfDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsyXSArIGRsICsgZXIpfDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFszXSArIGVsICsgYXIpfDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFs0XSArIGFsICsgYnIpfDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFswXSArIGJsICsgY3IpfDA7XG5cdCAgICAgICAgICAgIEhbMF0gPSAgdDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgOCkgIHwgKG5CaXRzVG90YWwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsIDw8IDI0KSB8IChuQml0c1RvdGFsID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXG5cdCAgICBmdW5jdGlvbiBmMSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoeSkgXiAoeikpO1xuXG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYyKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkmKHkpKSB8ICgofngpJih6KSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmMyh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpIHwgKH4oeSkpKSBeICh6KSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGY0KHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgJiAoeikpIHwgKCh5KSYofih6KSkpKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjUoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKHgpIF4gKCh5KSB8KH4oeikpKSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcm90bCh4LG4pIHtcblx0ICAgICAgICByZXR1cm4gKHg8PG4pIHwgKHg+Pj4oMzItbikpO1xuXHQgICAgfVxuXG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlJJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFJJUEVNRDE2MCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjUklQRU1EMTYwKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1JJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihSSVBFTUQxNjApO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SSVBFTUQxNjA7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBVdGY4ID0gQ19lbmMuVXRmODtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8qKlxuXHQgICAgICogSE1BQyBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUMgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIEhNQUMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBobWFjSGFzaGVyID0gQ3J5cHRvSlMuYWxnby5ITUFDLmNyZWF0ZShDcnlwdG9KUy5hbGdvLlNIQTI1Niwga2V5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoaGFzaGVyLCBrZXkpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgaGFzaGVyID0gdGhpcy5faGFzaGVyID0gbmV3IGhhc2hlci5pbml0KCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gV29yZEFycmF5LCBlbHNlIGFzc3VtZSBXb3JkQXJyYXkgYWxyZWFkeVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gVXRmOC5wYXJzZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemUgPSBoYXNoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEFsbG93IGFyYml0cmFyeSBsZW5ndGgga2V5c1xuXHQgICAgICAgICAgICBpZiAoa2V5LnNpZ0J5dGVzID4gaGFzaGVyQmxvY2tTaXplQnl0ZXMpIHtcblx0ICAgICAgICAgICAgICAgIGtleSA9IGhhc2hlci5maW5hbGl6ZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAga2V5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUga2V5IGZvciBpbm5lciBhbmQgb3V0ZXIgcGFkc1xuXHQgICAgICAgICAgICB2YXIgb0tleSA9IHRoaXMuX29LZXkgPSBrZXkuY2xvbmUoKTtcblx0ICAgICAgICAgICAgdmFyIGlLZXkgPSB0aGlzLl9pS2V5ID0ga2V5LmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5V29yZHMgPSBvS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaUtleVdvcmRzID0gaUtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBYT1Iga2V5cyB3aXRoIHBhZCBjb25zdGFudHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXNoZXJCbG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb0tleVdvcmRzW2ldIF49IDB4NWM1YzVjNWM7XG5cdCAgICAgICAgICAgICAgICBpS2V5V29yZHNbaV0gXj0gMHgzNjM2MzYzNjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvS2V5LnNpZ0J5dGVzID0gaUtleS5zaWdCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIEhNQUMgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0XG5cdCAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICBoYXNoZXIudXBkYXRlKHRoaXMuX2lLZXkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgSE1BQyB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtITUFDfSBUaGlzIEhNQUMgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoZXIudXBkYXRlKG1lc3NhZ2VVcGRhdGUpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBITUFDIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSgnbWVzc2FnZScpO1xuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IHRoaXMuX2hhc2hlcjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIEhNQUNcblx0ICAgICAgICAgICAgdmFyIGlubmVySGFzaCA9IGhhc2hlci5maW5hbGl6ZShtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIHZhciBobWFjID0gaGFzaGVyLmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQoaW5uZXJIYXNoKSk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhtYWM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vaG1hY1wiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGExXCIsIFwiLi9obWFjXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBTSEExID0gQ19hbGdvLlNIQTE7XG5cdCAgICB2YXIgSE1BQyA9IENfYWxnby5ITUFDO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgUEJLREYyID0gQ19hbGdvLlBCS0RGMiA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGUga2V5IHNpemUgaW4gd29yZHMgdG8gZ2VuZXJhdGUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UuIERlZmF1bHQ6IFNIQTFcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMVxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZXlTaXplOiAxMjgvMzIsXG5cdCAgICAgICAgICAgIGhhc2hlcjogU0hBMSxcblx0ICAgICAgICAgICAgaXRlcmF0aW9uczogMVxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgZGVyaXZhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSh7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGNmZykge1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb21wdXRlcyB0aGUgUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtleSA9IGtkZi5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb21wdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNmZyA9IHRoaXMuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgSE1BQ1xuXHQgICAgICAgICAgICB2YXIgaG1hYyA9IEhNQUMuY3JlYXRlKGNmZy5oYXNoZXIsIHBhc3N3b3JkKTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZEtleSA9IFdvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrSW5kZXggPSBXb3JkQXJyYXkuY3JlYXRlKFsweDAwMDAwMDAxXSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleFdvcmRzID0gYmxvY2tJbmRleC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBjZmcua2V5U2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBjZmcuaXRlcmF0aW9ucztcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlcblx0ICAgICAgICAgICAgd2hpbGUgKGRlcml2ZWRLZXlXb3Jkcy5sZW5ndGggPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBobWFjLnVwZGF0ZShzYWx0KS5maW5hbGl6ZShibG9ja0luZGV4KTtcblx0ICAgICAgICAgICAgICAgIGhtYWMucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3JkcyA9IGJsb2NrLndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrV29yZHNMZW5ndGggPSBibG9ja1dvcmRzLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0aW9uc1xuXHQgICAgICAgICAgICAgICAgdmFyIGludGVybWVkaWF0ZSA9IGJsb2NrO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUgPSBobWFjLmZpbmFsaXplKGludGVybWVkaWF0ZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlV29yZHMgPSBpbnRlcm1lZGlhdGUud29yZHM7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBYT1IgaW50ZXJtZWRpYXRlIHdpdGggYmxvY2tcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJsb2NrV29yZHNMZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1dvcmRzW2pdIF49IGludGVybWVkaWF0ZVdvcmRzW2pdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgYmxvY2tJbmRleFdvcmRzWzBdKys7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZGVyaXZlZEtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBkZXJpdmVkS2V5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBjb21wdXRhdGlvbi5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5QQktERjIocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAqL1xuXHQgICAgQy5QQktERjIgPSBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQsIGNmZykge1xuXHQgICAgICAgIHJldHVybiBQQktERjIuY3JlYXRlKGNmZykuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlBCS0RGMjtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vaG1hY1wiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGExXCIsIFwiLi9obWFjXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRoaXMga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaXMgbWVhbnQgdG8gY29uZm9ybSB3aXRoIEVWUF9CeXRlc1RvS2V5LlxuXHQgICAgICogd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL0VWUF9CeXRlc1RvS2V5Lmh0bWxcblx0ICAgICAqL1xuXHQgICAgdmFyIEV2cEtERiA9IENfYWxnby5FdnBLREYgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuIERlZmF1bHQ6IE1ENVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBNRDUsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDFcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IDggfSk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZXkgPSBrZGYuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29tcHV0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIHZhciBibG9jaztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIudXBkYXRlKHBhc3N3b3JkKS5maW5hbGl6ZShzYWx0KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gaGFzaGVyLmZpbmFsaXplKGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgY29tcHV0YXRpb24uXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgKi9cblx0ICAgIEMuRXZwS0RGID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcblx0ICAgICAgICByZXR1cm4gRXZwS0RGLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5FdnBLREY7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9ldnBrZGZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDaXBoZXIgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0Q3J5cHRvSlMubGliLkNpcGhlciB8fCAoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0Zjg7XG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoaXMgY2lwaGVyJ3Mga2V5IHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl2U2l6ZSBUaGlzIGNpcGhlcidzIElWIHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9FTkNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX0RFQ19YRk9STV9NT0RFIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGRlY3J5cHRpb24gbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlciA9IENfbGliLkNpcGhlciA9IEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gaXYgVGhlIElWIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCgpLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVFbmNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fRU5DX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVEZWNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGNpcGhlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4Zm9ybU1vZGUgRWl0aGVyIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gdHJhbnNvcm1hdGlvbiBtb2RlIGNvbnN0YW50LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlKENyeXB0b0pTLmFsZ28uQUVTLl9FTkNfWEZPUk1fTU9ERSwga2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoeGZvcm1Nb2RlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBTdG9yZSB0cmFuc2Zvcm0gbW9kZSBhbmQga2V5XG5cdCAgICAgICAgICAgIHRoaXMuX3hmb3JtTW9kZSA9IHhmb3JtTW9kZTtcblx0ICAgICAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGNpcGhlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgY2lwaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBkYXRhIHRvIGJlIGVuY3J5cHRlZCBvciBkZWNyeXB0ZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGFVcGRhdGUgVGhlIGRhdGEgdG8gZW5jcnlwdCBvciBkZWNyeXB0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGF0YSBhZnRlciBwcm9jZXNzaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLnByb2Nlc3MoJ2RhdGEnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGF2YWlsYWJsZSBibG9ja3Ncblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3MoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gcHJvY2Vzcy5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBmaW5hbCBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgZmluYWwgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgZGF0YSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZERhdGEgPSB0aGlzLl9kb0ZpbmFsaXplKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkRGF0YTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBfRU5DX1hGT1JNX01PREU6IDEsXG5cblx0ICAgICAgICBfREVDX1hGT1JNX01PREU6IDIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHNob3J0Y3V0IGZ1bmN0aW9ucyB0byBhIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IHdpdGggZW5jcnlwdCBhbmQgZGVjcnlwdCBzaG9ydGN1dCBmdW5jdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBBRVMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5BRVMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFzc3dvcmRCYXNlZENpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YWJsZUNpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2lwaGVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0Q2lwaGVyU3RyYXRlZ3koa2V5KS5lbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZGVjcnlwdChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH0oKSlcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2Ugc3RyZWFtIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxICgzMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyID0gQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3MgPSB0aGlzLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkQmxvY2tzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDFcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGUgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19tb2RlID0gQy5tb2RlID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWJzdHJhY3QgYmFzZSBibG9jayBjaXBoZXIgbW9kZSB0ZW1wbGF0ZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyTW9kZSA9IENfbGliLkJsb2NrQ2lwaGVyTW9kZSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZW5jcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZUVuY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkVuY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBtb2RlIGZvciBkZWNyeXB0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuY3JlYXRlRGVjcnlwdG9yKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNyZWF0ZURlY3J5cHRvcjogZnVuY3Rpb24gKGNpcGhlciwgaXYpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuRGVjcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NpcGhlciA9IGNpcGhlcjtcblx0ICAgICAgICAgICAgdGhpcy5faXYgPSBpdjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENCQyA9IENfbW9kZS5DQkMgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFic3RyYWN0IGJhc2UgQ0JDIG1vZGUuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdmFyIENCQyA9IEJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBlbmNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkVuY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFhPUiBhbmQgZW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBkZWNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkRlY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRGVjcnlwdCBhbmQgWE9SXG5cdCAgICAgICAgICAgICAgICBjaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBUaGlzIGJsb2NrIGJlY29tZXMgdGhlIHByZXZpb3VzIGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIGZ1bmN0aW9uIHhvckJsb2NrKHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICB2YXIgYmxvY2s7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAgICAgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gaXY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSB0aGlzLl9wcmV2QmxvY2s7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBYT1IgYmxvY2tzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGJsb2NrW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIENCQztcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFkZGluZyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3BhZCA9IEMucGFkID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogUEtDUyAjNS83IHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQa2NzNyA9IENfcGFkLlBrY3M3ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFBhZHMgZGF0YSB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gcGFkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG11bHRpcGxlIHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIHBhZGRlZCB0by5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnBhZCh3b3JkQXJyYXksIDQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZyB3b3JkXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nV29yZCA9IChuUGFkZGluZ0J5dGVzIDw8IDI0KSB8IChuUGFkZGluZ0J5dGVzIDw8IDE2KSB8IChuUGFkZGluZ0J5dGVzIDw8IDgpIHwgblBhZGRpbmdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBhZGRpbmdCeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nV29yZHMucHVzaChwYWRkaW5nV29yZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSBXb3JkQXJyYXkuY3JlYXRlKHBhZGRpbmdXb3JkcywgblBhZGRpbmdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YS5jb25jYXQocGFkZGluZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVucGFkcyBkYXRhIHRoYXQgaGFkIGJlZW4gcGFkZGVkIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVmaW5lZCBpbiBQS0NTICM1LzcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byB1bnBhZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnVucGFkKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdGhpcyBjaXBoZXIgb3BlcmF0ZXMgb24uIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB0byB1c2UuIERlZmF1bHQ6IENCQ1xuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7UGFkZGluZ30gcGFkZGluZyBUaGUgcGFkZGluZyBzdHJhdGVneSB0byB1c2UuIERlZmF1bHQ6IFBrY3M3XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIG1vZGU6IENCQyxcblx0ICAgICAgICAgICAgcGFkZGluZzogUGtjczdcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtb2RlQ3JlYXRvcjtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBjaXBoZXJcblx0ICAgICAgICAgICAgQ2lwaGVyLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gY2ZnLml2O1xuXHQgICAgICAgICAgICB2YXIgbW9kZSA9IGNmZy5tb2RlO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGJsb2NrIG1vZGVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgbW9kZUNyZWF0b3IgPSBtb2RlLmNyZWF0ZUVuY3J5cHRvcjtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVEZWNyeXB0b3I7XG5cdCAgICAgICAgICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBibG9jayBpbiB0aGUgYnVmZmVyIGZvciB1bnBhZGRpbmdcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgJiYgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPT0gbW9kZUNyZWF0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZUNyZWF0b3IuY2FsbChtb2RlLCB0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLl9fY3JlYXRvciA9IG1vZGVDcmVhdG9yO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kZS5wcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZEJsb2NrcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuY2ZnLnBhZGRpbmc7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWxpemVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgLy8gUGFkIGRhdGFcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmcucGFkKHRoaXMuX2RhdGEsIHRoaXMuYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVbnBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnVucGFkKGZpbmFsUHJvY2Vzc2VkQmxvY2tzKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgY29sbGVjdGlvbiBvZiBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gY2lwaGVydGV4dCBUaGUgcmF3IGNpcGhlcnRleHQuXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkgdG8gdGhpcyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IHNhbHQgVGhlIHNhbHQgdXNlZCB3aXRoIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge0NpcGhlcn0gYWxnb3JpdGhtIFRoZSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc2NoZW1lIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIuXG5cdCAgICAgKiBAcHJvcGVydHkge0Zvcm1hdH0gZm9ybWF0dGVyIFRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaXBoZXJQYXJhbXMgQW4gb2JqZWN0IHdpdGggYW55IG9mIHRoZSBwb3NzaWJsZSBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmxpYi5DaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgKiAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBrZXk6IGtleVdvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIGl2OiBpdldvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIHNhbHQ6IHNhbHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBhbGdvcml0aG06IENyeXB0b0pTLmFsZ28uQUVTLFxuXHQgICAgICAgICAqICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXG5cdCAgICAgICAgICogICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUEtDUzcsXG5cdCAgICAgICAgICogICAgICAgICBibG9ja1NpemU6IDQsXG5cdCAgICAgICAgICogICAgICAgICBmb3JtYXR0ZXI6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMXG5cdCAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5taXhJbihjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR9IGZvcm1hdHRlciAoT3B0aW9uYWwpIFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZ2lmaWVkIGNpcGhlciBwYXJhbXMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAdGhyb3dzIEVycm9yIElmIG5laXRoZXIgdGhlIGZvcm1hdHRlciBub3IgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIGlzIHNldC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcyArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMudG9TdHJpbmcoQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZm9ybWF0dGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZm9ybWF0dGVyIHx8IHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRm9ybWF0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGZvcm1hdHRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMRm9ybWF0dGVyID0gQ19mb3JtYXQuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBvcGVuU1NMU3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wuc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHZhciB3b3JkQXJyYXk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBzYWx0ID0gY2lwaGVyUGFyYW1zLnNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gRm9ybWF0XG5cdCAgICAgICAgICAgIGlmIChzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDUzNjE2Yzc0LCAweDY1NjQ1ZjVmXSkuY29uY2F0KHNhbHQpLmNvbmNhdChjaXBoZXJ0ZXh0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRBcnJheSA9IGNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gd29yZEFycmF5LnRvU3RyaW5nKEJhc2U2NCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVuU1NMU3RyIFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTC5wYXJzZShvcGVuU1NMU3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKG9wZW5TU0xTdHIpIHtcblx0ICAgICAgICAgICAgdmFyIHNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gUGFyc2UgYmFzZTY0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gQmFzZTY0LnBhcnNlKG9wZW5TU0xTdHIpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0V29yZHMgPSBjaXBoZXJ0ZXh0LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFRlc3QgZm9yIHNhbHRcblx0ICAgICAgICAgICAgaWYgKGNpcGhlcnRleHRXb3Jkc1swXSA9PSAweDUzNjE2Yzc0ICYmIGNpcGhlcnRleHRXb3Jkc1sxXSA9PSAweDY1NjQ1ZjVmKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHNhbHRcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkuY3JlYXRlKGNpcGhlcnRleHRXb3Jkcy5zbGljZSgyLCA0KSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzYWx0IGZyb20gY2lwaGVydGV4dFxuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dFdvcmRzLnNwbGljZSgwLCA0KTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQuc2lnQnl0ZXMgLT0gMTY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNpcGhlciB3cmFwcGVyIHRoYXQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgU2VyaWFsaXphYmxlQ2lwaGVyID0gQ19saWIuU2VyaWFsaXphYmxlQ2lwaGVyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7Rm9ybWF0dGVyfSBmb3JtYXQgVGhlIGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCBjaXBoZXIgcGFyYW0gb2JqZWN0cyB0byBhbmQgZnJvbSBhIHN0cmluZy4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBmb3JtYXQ6IE9wZW5TU0xGb3JtYXR0ZXJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSwgeyBpdjogaXYgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBlbmNyeXB0b3IgPSBjaXBoZXIuY3JlYXRlRW5jcnlwdG9yKGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0b3IuZmluYWxpemUobWVzc2FnZSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNpcGhlckNmZyA9IGVuY3J5cHRvci5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoe1xuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dCxcblx0ICAgICAgICAgICAgICAgIGtleToga2V5LFxuXHQgICAgICAgICAgICAgICAgaXY6IGNpcGhlckNmZy5pdixcblx0ICAgICAgICAgICAgICAgIGFsZ29yaXRobTogY2lwaGVyLFxuXHQgICAgICAgICAgICAgICAgbW9kZTogY2lwaGVyQ2ZnLm1vZGUsXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nOiBjaXBoZXJDZmcucGFkZGluZyxcblx0ICAgICAgICAgICAgICAgIGJsb2NrU2l6ZTogY2lwaGVyLmJsb2NrU2l6ZSxcblx0ICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY2ZnLmZvcm1hdFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIENpcGhlclBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdGhpcy5fcGFyc2UoY2lwaGVydGV4dCwgY2ZnLmZvcm1hdCk7XG5cblx0ICAgICAgICAgICAgLy8gRGVjcnlwdFxuXHQgICAgICAgICAgICB2YXIgcGxhaW50ZXh0ID0gY2lwaGVyLmNyZWF0ZURlY3J5cHRvcihrZXksIGNmZykuZmluYWxpemUoY2lwaGVydGV4dC5jaXBoZXJ0ZXh0KTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdG8gQ2lwaGVyUGFyYW1zLFxuXHQgICAgICAgICAqIGVsc2UgYXNzdW1lZCBDaXBoZXJQYXJhbXMgYWxyZWFkeSBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IHVuY2hhbmdlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKiBAcGFyYW0ge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZSB0byBwYXJzZSBzZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSB1bnNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLl9wYXJzZShjaXBoZXJ0ZXh0U3RyaW5nT3JQYXJhbXMsIGZvcm1hdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3BhcnNlOiBmdW5jdGlvbiAoY2lwaGVydGV4dCwgZm9ybWF0KSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY2lwaGVydGV4dCA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZShjaXBoZXJ0ZXh0LCB0aGlzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogS2V5IGRlcml2YXRpb24gZnVuY3Rpb24gbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19rZGYgPSBDLmtkZiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIE9wZW5TU0wga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMS2RmID0gQ19rZGYuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZXJpdmVzIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIHRvIGRlcml2ZSBmcm9tLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXlTaXplIFRoZSBzaXplIGluIHdvcmRzIG9mIHRoZSBrZXkgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGl2U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUgSVYgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IChPcHRpb25hbCkgQSA2NC1iaXQgc2FsdCB0byB1c2UuIElmIG9taXR0ZWQsIGEgc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCByYW5kb21seS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdCB3aXRoIHRoZSBrZXksIElWLCBhbmQgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyLCAnc2FsdHNhbHQnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIGtleVNpemUsIGl2U2l6ZSwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSByYW5kb20gc2FsdFxuXHQgICAgICAgICAgICBpZiAoIXNhbHQpIHtcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkucmFuZG9tKDY0LzgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgSVZcblx0ICAgICAgICAgICAgdmFyIGtleSA9IEV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiBrZXlTaXplICsgaXZTaXplIH0pLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXG5cdCAgICAgICAgICAgIC8vIFNlcGFyYXRlIGtleSBhbmQgSVZcblx0ICAgICAgICAgICAgdmFyIGl2ID0gV29yZEFycmF5LmNyZWF0ZShrZXkud29yZHMuc2xpY2Uoa2V5U2l6ZSksIGl2U2l6ZSAqIDQpO1xuXHQgICAgICAgICAgICBrZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gcGFyYW1zXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsga2V5OiBrZXksIGl2OiBpdiwgc2FsdDogc2FsdCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgc2VyaWFsaXphYmxlIGNpcGhlciB3cmFwcGVyIHRoYXQgZGVyaXZlcyB0aGUga2V5IGZyb20gYSBwYXNzd29yZCxcblx0ICAgICAqIGFuZCByZXR1cm5zIGNpcGhlcnRleHQgYXMgYSBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQYXNzd29yZEJhc2VkQ2lwaGVyID0gQ19saWIuUGFzc3dvcmRCYXNlZENpcGhlciA9IFNlcmlhbGl6YWJsZUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7S0RGfSBrZGYgVGhlIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIHRvIHVzZSB0byBnZW5lcmF0ZSBhIGtleSBhbmQgSVYgZnJvbSBhIHBhc3N3b3JkLiBEZWZhdWx0OiBPcGVuU1NMXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBTZXJpYWxpemFibGVDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtkZjogT3BlblNTTEtkZlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRW5jcnlwdHMgYSBtZXNzYWdlIHVzaW5nIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5jcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJyk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIHBhc3N3b3JkLCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQuY2FsbCh0aGlzLCBjaXBoZXIsIG1lc3NhZ2UsIGRlcml2ZWRQYXJhbXMua2V5LCBjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIE1peCBpbiBkZXJpdmVkIHBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0Lm1peEluKGRlcml2ZWRQYXJhbXMpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHBsYWludGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUsIGNpcGhlcnRleHQuc2FsdCk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIElWIHRvIGNvbmZpZ1xuXHQgICAgICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2O1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBjaXBoZXJ0ZXh0LCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ2lwaGVyIEZlZWRiYWNrIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNGQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgQ0ZCLkVuY3J5cHRvciA9IENGQi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdC5jYWxsKHRoaXMsIHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSwgY2lwaGVyKTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBDRkIuRGVjcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFRoaXMgYmxvY2sgYmVjb21lcyB0aGUgcHJldmlvdXMgYmxvY2tcblx0ICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQod29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpIHtcblx0ICAgICAgICB2YXIga2V5c3RyZWFtO1xuXG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICBrZXlzdHJlYW0gPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGtleXN0cmVhbSA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIENGQjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNGQjtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ1RSID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUi5FbmNyeXB0b3IgPSBDVFIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJcblx0ICAgICAgICAgICAgY291bnRlcltibG9ja1NpemUgLSAxXSA9IChjb3VudGVyW2Jsb2NrU2l6ZSAtIDFdICsgMSkgfCAwXG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSLkRlY3J5cHRvciA9IEVuY3J5cHRvcjtcblxuXHQgICAgcmV0dXJuIENUUjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUjtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKiBAcHJlc2VydmVcblx0ICogQ291bnRlciBibG9jayBtb2RlIGNvbXBhdGlibGUgd2l0aCAgRHIgQnJpYW4gR2xhZG1hbiBmaWxlZW5jLmNcblx0ICogZGVyaXZlZCBmcm9tIENyeXB0b0pTLm1vZGUuQ1RSXG5cdCAqIEphbiBIcnVieSBqaHJ1Ynkud2ViQGdtYWlsLmNvbVxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDVFJHbGFkbWFuID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHRcdGZ1bmN0aW9uIGluY1dvcmQod29yZClcblx0XHR7XG5cdFx0XHRpZiAoKCh3b3JkID4+IDI0KSAmIDB4ZmYpID09PSAweGZmKSB7IC8vb3ZlcmZsb3dcblx0XHRcdHZhciBiMSA9ICh3b3JkID4+IDE2KSYweGZmO1xuXHRcdFx0dmFyIGIyID0gKHdvcmQgPj4gOCkmMHhmZjtcblx0XHRcdHZhciBiMyA9IHdvcmQgJiAweGZmO1xuXG5cdFx0XHRpZiAoYjEgPT09IDB4ZmYpIC8vIG92ZXJmbG93IGIxXG5cdFx0XHR7XG5cdFx0XHRiMSA9IDA7XG5cdFx0XHRpZiAoYjIgPT09IDB4ZmYpXG5cdFx0XHR7XG5cdFx0XHRcdGIyID0gMDtcblx0XHRcdFx0aWYgKGIzID09PSAweGZmKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YjMgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdCsrYjM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0KytiMjtcblx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdCsrYjE7XG5cdFx0XHR9XG5cblx0XHRcdHdvcmQgPSAwO1xuXHRcdFx0d29yZCArPSAoYjEgPDwgMTYpO1xuXHRcdFx0d29yZCArPSAoYjIgPDwgOCk7XG5cdFx0XHR3b3JkICs9IGIzO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0d29yZCArPSAoMHgwMSA8PCAyNCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gd29yZDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpbmNDb3VudGVyKGNvdW50ZXIpXG5cdFx0e1xuXHRcdFx0aWYgKChjb3VudGVyWzBdID0gaW5jV29yZChjb3VudGVyWzBdKSkgPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGVuY3JfZGF0YSBpbiBmaWxlZW5jLmMgZnJvbSAgRHIgQnJpYW4gR2xhZG1hbidzIGNvdW50cyBvbmx5IHdpdGggRFdPUkQgaiA8IDhcblx0XHRcdFx0Y291bnRlclsxXSA9IGluY1dvcmQoY291bnRlclsxXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY291bnRlcjtcblx0XHR9XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBDVFJHbGFkbWFuLkVuY3J5cHRvciA9IENUUkdsYWRtYW4uZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cblx0XHRcdFx0aW5jQ291bnRlcihjb3VudGVyKTtcblxuXHRcdFx0XHR2YXIga2V5c3RyZWFtID0gY291bnRlci5zbGljZSgwKTtcblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENUUkdsYWRtYW4uRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gQ1RSR2xhZG1hbjtcblx0fSgpKTtcblxuXG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIE91dHB1dCBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5PRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIE9GQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fa2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gT0ZCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuT0ZCO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuRUNCO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEFOU0kgWC45MjMgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5BbnNpWDkyMyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGFTaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBsYXN0IGJ5dGUgcG9zaXRpb25cblx0ICAgICAgICB2YXIgbGFzdEJ5dGVQb3MgPSBkYXRhU2lnQnl0ZXMgKyBuUGFkZGluZ0J5dGVzIC0gMTtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLndvcmRzW2xhc3RCeXRlUG9zID4+PiAyXSB8PSBuUGFkZGluZ0J5dGVzIDw8ICgyNCAtIChsYXN0Qnl0ZVBvcyAlIDQpICogOCk7XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyArPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5BbnNpeDkyMztcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08gMTAxMjYgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc28xMDEyNiA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oblBhZGRpbmdCeXRlcyAtIDEpKS5cblx0ICAgICAgICAgICAgIGNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbblBhZGRpbmdCeXRlcyA8PCAyNF0sIDEpKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvMTAxMjY7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogSVNPL0lFQyA5Nzk3LTEgUGFkZGluZyBNZXRob2QgMi5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc285Nzk3MSA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIEFkZCAweDgwIGJ5dGVcblx0ICAgICAgICBkYXRhLmNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHg4MDAwMDAwMF0sIDEpKTtcblxuXHQgICAgICAgIC8vIFplcm8gcGFkIHRoZSByZXN0XG5cdCAgICAgICAgQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nLnBhZChkYXRhLCBibG9ja1NpemUpO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gUmVtb3ZlIHplcm8gcGFkZGluZ1xuXHQgICAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy51bnBhZChkYXRhKTtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBvbmUgbW9yZSBieXRlIC0tIHRoZSAweDgwIGJ5dGVcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzLS07XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLklzbzk3OTcxO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGRhdGEuc2lnQnl0ZXMgLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICBpZiAoKChkYXRhV29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmKSkge1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEEgbm9vcCBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLk5vUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKCkge1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuTm9QYWRkaW5nO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcztcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleDtcblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0O1xuXG5cdCAgICB2YXIgSGV4Rm9ybWF0dGVyID0gQ19mb3JtYXQuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHRoZSBjaXBoZXJ0ZXh0IG9mIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QgdG8gYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaGV4U3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5zdHJpbmdpZnkoY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0LnRvU3RyaW5nKEhleCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIGNpcGhlcnRleHQgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmZvcm1hdC5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGlucHV0KSB7XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gSGV4LnBhcnNlKGlucHV0KTtcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZm9ybWF0LkhleDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBMb29rdXAgdGFibGVzXG5cdCAgICB2YXIgU0JPWCA9IFtdO1xuXHQgICAgdmFyIElOVl9TQk9YID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8wID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8zID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzEgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGxvb2t1cCB0YWJsZXNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gQ29tcHV0ZSBkb3VibGUgdGFibGVcblx0ICAgICAgICB2YXIgZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcblx0ICAgICAgICAgICAgICAgIGRbaV0gPSBpIDw8IDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gKGkgPDwgMSkgXiAweDExYjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFdhbGsgR0YoMl44KVxuXHQgICAgICAgIHZhciB4ID0gMDtcblx0ICAgICAgICB2YXIgeGkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzYm94XG5cdCAgICAgICAgICAgIHZhciBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpO1xuXHQgICAgICAgICAgICBzeCA9IChzeCA+Pj4gOCkgXiAoc3ggJiAweGZmKSBeIDB4NjM7XG5cdCAgICAgICAgICAgIFNCT1hbeF0gPSBzeDtcblx0ICAgICAgICAgICAgSU5WX1NCT1hbc3hdID0geDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG11bHRpcGxpY2F0aW9uXG5cdCAgICAgICAgICAgIHZhciB4MiA9IGRbeF07XG5cdCAgICAgICAgICAgIHZhciB4NCA9IGRbeDJdO1xuXHQgICAgICAgICAgICB2YXIgeDggPSBkW3g0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIHN1YiBieXRlcywgbWl4IGNvbHVtbnMgdGFibGVzXG5cdCAgICAgICAgICAgIHZhciB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgU1VCX01JWF8wW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzFbeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzJbeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzNbeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IHN1YiBieXRlcywgaW52IG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMFtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzFbc3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltzeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8zW3N4XSA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IGNvdW50ZXJcblx0ICAgICAgICAgICAgaWYgKCF4KSB7XG5cdCAgICAgICAgICAgICAgICB4ID0geGkgPSAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgeCA9IHgyIF4gZFtkW2RbeDggXiB4Ml1dXTtcblx0ICAgICAgICAgICAgICAgIHhpIF49IGRbZFt4aV1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUHJlY29tcHV0ZWQgUmNvbiBsb29rdXBcblx0ICAgIHZhciBSQ09OID0gWzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzZdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgQUVTID0gQ19hbGdvLkFFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHQ7XG5cblx0ICAgICAgICAgICAgLy8gU2tpcCByZXNldCBvZiBuUm91bmRzIGhhcyBiZWVuIHNldCBiZWZvcmUgYW5kIGtleSBkaWQgbm90IGNoYW5nZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fblJvdW5kcyAmJiB0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBudW1iZXIgb2Ygcm91bmRzXG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIGtleSBzY2hlZHVsZSByb3dzXG5cdCAgICAgICAgICAgIHZhciBrc1Jvd3MgPSAoblJvdW5kcyArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIga2V5U2NoZWR1bGUgPSB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoa3NSb3cgPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAga2V5U2NoZWR1bGVba3NSb3ddID0ga2V5V29yZHNba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSAxXTtcblxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghKGtzUm93ICUga2V5U2l6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm90IHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1peCBSY29uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgXj0gUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0O1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9IChTQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3QgJiAweGZmXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIgaW52S2V5U2NoZWR1bGUgPSB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpbnZLc1JvdyA9IDA7IGludktzUm93IDwga3NSb3dzOyBpbnZLc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga3NSb3cgPSBrc1Jvd3MgLSBpbnZLc1JvdztcblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93ICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2tzUm93IC0gNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGlmIChpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IHQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IElOVl9TVUJfTUlYXzBbU0JPWFt0ID4+PiAyNF1dIF4gSU5WX1NVQl9NSVhfMVtTQk9YWyh0ID4+PiAxNikgJiAweGZmXV0gXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbU0JPWFsodCA+Pj4gOCkgJiAweGZmXV0gXiBJTlZfU1VCX01JWF8zW1NCT1hbdCAmIDB4ZmZdXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fa2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52S2V5U2NoZWR1bGUsIElOVl9TVUJfTUlYXzAsIElOVl9TVUJfTUlYXzEsIElOVl9TVUJfTUlYXzIsIElOVl9TVUJfTUlYXzMsIElOVl9TQk9YKTtcblxuXHQgICAgICAgICAgICAvLyBJbnYgc3dhcCAybmQgYW5kIDR0aCByb3dzXG5cdCAgICAgICAgICAgIHZhciB0ID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0LCBrZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcztcblxuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXQsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHMwID0gTVtvZmZzZXRdICAgICBeIGtleVNjaGVkdWxlWzBdO1xuXHQgICAgICAgICAgICB2YXIgczEgPSBNW29mZnNldCArIDFdIF4ga2V5U2NoZWR1bGVbMV07XG5cdCAgICAgICAgICAgIHZhciBzMiA9IE1bb2Zmc2V0ICsgMl0gXiBrZXlTY2hlZHVsZVsyXTtcblx0ICAgICAgICAgICAgdmFyIHMzID0gTVtvZmZzZXQgKyAzXSBeIGtleVNjaGVkdWxlWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIEtleSBzY2hlZHVsZSByb3cgY291bnRlclxuXHQgICAgICAgICAgICB2YXIga3NSb3cgPSA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hpZnQgcm93cywgc3ViIGJ5dGVzLCBtaXggY29sdW1ucywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICAgICAgdmFyIHQwID0gU1VCX01JWF8wW3MwID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczMgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxID0gU1VCX01JWF8wW3MxID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczAgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gU1VCX01JWF8wW3MyID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczEgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQzID0gU1VCX01JWF8wW3MzID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczIgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3RhdGVcblx0ICAgICAgICAgICAgICAgIHMwID0gdDA7XG5cdCAgICAgICAgICAgICAgICBzMSA9IHQxO1xuXHQgICAgICAgICAgICAgICAgczIgPSB0Mjtcblx0ICAgICAgICAgICAgICAgIHMzID0gdDM7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHQwID0gKChTQk9YW3MwID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMxID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczIgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MzICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQzID0gKChTQk9YW3MzID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMwID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczEgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MyICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgLy8gU2V0IG91dHB1dFxuXHQgICAgICAgICAgICBNW29mZnNldF0gICAgID0gdDA7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSB0MTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAyXSA9IHQyO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLkFFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQUVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5BRVM7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMSA9IFtcblx0ICAgICAgICA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAgMSxcblx0ICAgICAgICA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMixcblx0ICAgICAgICA1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyxcblx0ICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgNjMsIDU1LCA0NywgMzksXG5cdCAgICAgICAgMzEsIDIzLCAxNSwgNywgIDYyLCA1NCwgNDYsIDM4LFxuXHQgICAgICAgIDMwLCAyMiwgMTQsIDYsICA2MSwgNTMsIDQ1LCAzNyxcblx0ICAgICAgICAyOSwgMjEsIDEzLCA1LCAgMjgsIDIwLCAxMiwgNFxuXHQgICAgXTtcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMyID0gW1xuXHQgICAgICAgIDE0LCAxNywgMTEsIDI0LCAxLCAgNSxcblx0ICAgICAgICAzLCAgMjgsIDE1LCA2LCAgMjEsIDEwLFxuXHQgICAgICAgIDIzLCAxOSwgMTIsIDQsICAyNiwgOCxcblx0ICAgICAgICAxNiwgNywgIDI3LCAyMCwgMTMsIDIsXG5cdCAgICAgICAgNDEsIDUyLCAzMSwgMzcsIDQ3LCA1NSxcblx0ICAgICAgICAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LFxuXHQgICAgICAgIDQ0LCA0OSwgMzksIDU2LCAzNCwgNTMsXG5cdCAgICAgICAgNDYsIDQyLCA1MCwgMzYsIDI5LCAzMlxuXHQgICAgXTtcblxuXHQgICAgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cdCAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAgMiwgIDQsICA2LCAgOCwgIDEwLCAxMiwgMTQsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOF07XG5cblx0ICAgIC8vIFNCT1hlcyBhbmQgcm91bmQgcGVybXV0YXRpb24gY29uc3RhbnRzXG5cdCAgICB2YXIgU0JPWF9QID0gW1xuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAxOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAxOiAweDgwODAwMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHhkMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDExODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDFmODAwMDAwOiAweDg0MDAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDQwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg1MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHg3MDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweGYwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgyODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgzODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDc4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweGY4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDEyMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFiMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDFlMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFiODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg1MDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHhiMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhkMDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGUwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgyODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg3ODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweGE4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhlODAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMzAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDEyODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDEzODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNTgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxODgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFiODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxYzgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDA6IDB4NDAxMDQwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDYwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YzAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHhkMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGYwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgyODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDM4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDU4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NjgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YjgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweGM4MDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMjAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE1MDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE3MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxZDAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZTAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFmMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTA4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTE4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE0ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTY4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTc4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTk4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MWE4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFkODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwOiAweDIwMDAwMDgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgyMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDQwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg1MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NzAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDkwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhhMDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGIwMDogMHg4LFxuXHQgICAgICAgICAgICAweGMwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhkMDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweGUwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweGYwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHg4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MjgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MzgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg0ODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDU4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHg2ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ODgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg5ODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHhhODA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGM4MDogMHgwLFxuXHQgICAgICAgICAgICAweGQ4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhlODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGY4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTIwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxMzAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE3MDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDE5MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYTAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MWIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHgxZTAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDFmMDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDEwODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxMTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE0ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTc4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWE4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFiODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDFjODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDFkODA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZTgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODA6IDB4MTAwMDIwMDhcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDIwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgzMDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NDA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHg1MDogMHgwLFxuXHQgICAgICAgICAgICAweDYwOiAweDEsXG5cdCAgICAgICAgICAgIDB4NzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHg4MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDkwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhhMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweGIwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YzA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhkMDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ZTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweGYwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4Mjg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgzODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDQ4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHg1ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDY4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Nzg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDg4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg5ODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweGE4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Yjg6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGM4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHhkODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweGU4OiAweDEsXG5cdCAgICAgICAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDExMDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTMwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTQwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDE4MDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTkwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWEwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxYjA6IDB4MSxcblx0ICAgICAgICAgICAgMHgxYzA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxZjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDEwODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTI4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTM4OiAweDEsXG5cdCAgICAgICAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE3ODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE4ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDE5ODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFhODogMHgwLFxuXHQgICAgICAgICAgICAweDFiODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFjODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWQ4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxZTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxZjg6IDB4MTAwMDAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDE6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDM6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4NDogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg1OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4NjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDc6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDg6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg5OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4YTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHhiOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4YzogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ZDogMHgwLFxuXHQgICAgICAgICAgICAweGU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHhmOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAyOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDM6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA1OiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA2OiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA3OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA4OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDk6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBiOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGM6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBlOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGY6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4MTE6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHgxMjogMHgyMCxcblx0ICAgICAgICAgICAgMHgxMzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4MTQ6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHgxNTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDE2OiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4MTc6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxOTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHgxYTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDFiOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MWM6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHgxZDogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHgxZTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4MWY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMDogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMTogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMzogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNDogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE2OiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTc6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE5OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWE6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYjogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFjOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFkOiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZjogMHg4MDIwODAwXG5cdCAgICAgICAgfVxuXHQgICAgXTtcblxuXHQgICAgLy8gTWFza3MgdGhhdCBzZWxlY3QgdGhlIFNCT1ggaW5wdXRcblx0ICAgIHZhciBTQk9YX01BU0sgPSBbXG5cdCAgICAgICAgMHhmODAwMDAwMSwgMHgxZjgwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMDFmODAwMCxcblx0ICAgICAgICAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXG5cdCAgICBdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgREVTID0gQ19hbGdvLkRFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTZWxlY3QgNTYgYml0cyBhY2NvcmRpbmcgdG8gUEMxXG5cdCAgICAgICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG5cdCAgICAgICAgICAgICAgICBrZXlCaXRzW2ldID0gKGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+ICgzMSAtIGtleUJpdFBvcyAlIDMyKSkgJiAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQXNzZW1ibGUgMTYgc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgc3ViS2V5cyA9IHRoaXMuX3N1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgblN1YktleSA9IDA7IG5TdWJLZXkgPCAxNjsgblN1YktleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgc3Via2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIGxlZnQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbKGkgLyA2KSB8IDBdIHw9IGtleUJpdHNbKChQQzJbaV0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAoMzEgLSBpICUgNik7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbNCArICgoaSAvIDYpIHwgMCldIHw9IGtleUJpdHNbMjggKyAoKChQQzJbaSArIDI0XSAtIDEpICsgYml0U2hpZnQpICUgMjgpXSA8PCAoMzEgLSBpICUgNik7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuXHQgICAgICAgICAgICAgICAgLy8gdGhlIHN1YmtleSBjYW4gYmUgYnJva2VuIGludG8gOCB2YWx1ZXMgc2NhbGVkIHRvIDMyLWJpdHMsXG5cdCAgICAgICAgICAgICAgICAvLyB3aGljaCBhbGxvd3MgdGhlIGtleSB0byBiZSB1c2VkIHdpdGhvdXQgZXhwYW5zaW9uXG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbMF0gPSAoc3ViS2V5WzBdIDw8IDEpIHwgKHN1YktleVswXSA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbaV0gPSBzdWJLZXlbaV0gPj4+ICgoaSAtIDEpICogNCArIDMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzddID0gKHN1YktleVs3XSA8PCA1KSB8IChzdWJLZXlbN10gPj4+IDI3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52ZXJzZSBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBpbnZTdWJLZXlzID0gdGhpcy5faW52U3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGludlN1YktleXNbaV0gPSBzdWJLZXlzWzE1IC0gaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX3N1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIHN1YktleXMpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAxNjsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tyb3VuZF07XG5cdCAgICAgICAgICAgICAgICB2YXIgbEJsb2NrID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jaztcblxuXHQgICAgICAgICAgICAgICAgLy8gRmVpc3RlbCBmdW5jdGlvblxuXHQgICAgICAgICAgICAgICAgdmFyIGYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmIHw9IFNCT1hfUFtpXVsoKHJCbG9jayBeIHN1YktleVtpXSkgJiBTQk9YX01BU0tbaV0pID4+PiAwXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IGxCbG9jayBeIGY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBVbmRvIHN3YXAgZnJvbSBsYXN0IHJvdW5kXG5cdCAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8vIFN3YXAgYml0cyBhY3Jvc3MgdGhlIGxlZnQgYW5kIHJpZ2h0IHdvcmRzXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZUxSKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9yQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlUkwob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX2xCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5ERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFRyaXBsZURFUyA9IENfYWxnby5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cdCAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5IGxlbmd0aCBpcyB2YWxpZCAoNjQsIDEyOCBvciA+PSAxOTIgYml0KVxuXHQgICAgICAgICAgICBpZiAoa2V5V29yZHMubGVuZ3RoICE9PSAyICYmIGtleVdvcmRzLmxlbmd0aCAhPT0gNCAmJiBrZXlXb3Jkcy5sZW5ndGggPCA2KSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IGxlbmd0aCAtIDNERVMgcmVxdWlyZXMgdGhlIGtleSBsZW5ndGggdG8gYmUgNjQsIDEyOCwgMTkyIG9yID4xOTIuJyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGtleSBhY2NvcmRpbmcgdG8gdGhlIGtleWluZyBvcHRpb25zIGRlZmluZWQgaW4gM0RFUyBzdGFuZGFyZFxuXHQgICAgICAgICAgICB2YXIga2V5MSA9IGtleVdvcmRzLnNsaWNlKDAsIDIpO1xuXHQgICAgICAgICAgICB2YXIga2V5MiA9IGtleVdvcmRzLmxlbmd0aCA8IDQgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDIsIDQpO1xuXHQgICAgICAgICAgICB2YXIga2V5MyA9IGtleVdvcmRzLmxlbmd0aCA8IDYgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDQsIDYpO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBERVMgaW5zdGFuY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTIpKTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMyA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkzKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMy5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMi5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMS5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTkyLzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKFRyaXBsZURFUyk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuVHJpcGxlREVTO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0XCIpLCByZXF1aXJlKFwiLi9tZDVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzQgPSBDX2FsZ28uUkM0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpZ0J5dGVzID0ga2V5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgc2JveFxuXHQgICAgICAgICAgICB2YXIgUyA9IHRoaXMuX1MgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IGk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBLZXkgc2V0dXBcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlSW5kZXggPSBpICUga2V5U2lnQnl0ZXM7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qnl0ZSA9IChrZXlXb3Jkc1trZXlCeXRlSW5kZXggPj4+IDJdID4+PiAoMjQgLSAoa2V5Qnl0ZUluZGV4ICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICBqID0gKGogKyBTW2ldICsga2V5Qnl0ZSkgJSAyNTY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgICAgIFNbaV0gPSBTW2pdO1xuXHQgICAgICAgICAgICAgICAgU1tqXSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudGVyc1xuXHQgICAgICAgICAgICB0aGlzLl9pID0gdGhpcy5faiA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICBNW29mZnNldF0gXj0gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMFxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtV29yZCgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgUyA9IHRoaXMuX1M7XG5cdCAgICAgICAgdmFyIGkgPSB0aGlzLl9pO1xuXHQgICAgICAgIHZhciBqID0gdGhpcy5fajtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbSB3b3JkXG5cdCAgICAgICAgdmFyIGtleXN0cmVhbVdvcmQgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgbisrKSB7XG5cdCAgICAgICAgICAgIGkgPSAoaSArIDEpICUgMjU2O1xuXHQgICAgICAgICAgICBqID0gKGogKyBTW2ldKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgIFNbal0gPSB0O1xuXG5cdCAgICAgICAgICAgIGtleXN0cmVhbVdvcmQgfD0gU1soU1tpXSArIFNbal0pICUgMjU2XSA8PCAoMjQgLSBuICogOCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gVXBkYXRlIGNvdW50ZXJzXG5cdCAgICAgICAgdGhpcy5faSA9IGk7XG5cdCAgICAgICAgdGhpcy5faiA9IGo7XG5cblx0ICAgICAgICByZXR1cm4ga2V5c3RyZWFtV29yZDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SQzQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RpZmllZCBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzREcm9wID0gQ19hbGdvLlJDNERyb3AgPSBSQzQuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gZHJvcCBUaGUgbnVtYmVyIG9mIGtleXN0cmVhbSB3b3JkcyB0byBkcm9wLiBEZWZhdWx0IDE5MlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogUkM0LmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBkcm9wOiAxOTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFJDNC5fZG9SZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIERyb3Bcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2ZnLmRyb3A7IGkgPiAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtV29yZC5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUkM0RHJvcC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNERyb3AuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0RHJvcCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJDNERyb3ApO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlJDNDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBTICA9IFtdO1xuXHQgICAgdmFyIENfID0gW107XG5cdCAgICB2YXIgRyAgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSYWJiaXQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG1cblx0ICAgICAqL1xuXHQgICAgdmFyIFJhYmJpdCA9IENfYWxnby5SYWJiaXQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEsgPSB0aGlzLl9rZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuY2ZnLml2O1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBLW2ldID0gKCgoS1tpXSA8PCA4KSAgfCAoS1tpXSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChLW2ldIDw8IDI0KSB8IChLW2ldID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIHN0YXRlIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1ggPSBbXG5cdCAgICAgICAgICAgICAgICBLWzBdLCAoS1szXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1sxXSwgKEtbMF0gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMl0sIChLWzFdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzNdLCAoS1syXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgQyA9IHRoaXMuX0MgPSBbXG5cdCAgICAgICAgICAgICAgICAoS1syXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLCAoS1swXSAmIDB4ZmZmZjAwMDApIHwgKEtbMV0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzNdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksIChLWzFdICYgMHhmZmZmMDAwMCkgfCAoS1syXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMF0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSwgKEtbMl0gJiAweGZmZmYwMDAwKSB8IChLWzNdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1sxXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpLCAoS1szXSAmIDB4ZmZmZjAwMDApIHwgKEtbMF0gJiAweDAwMDBmZmZmKVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIENhcnJ5IGJpdFxuXHQgICAgICAgICAgICB0aGlzLl9iID0gMDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvdW50ZXJzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBDW2ldIF49IFhbKGkgKyA0KSAmIDddO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSVYgc2V0dXBcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBJViA9IGl2LndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzAgPSBJVlswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8xID0gSVZbMV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIgc3VidmVjdG9yc1xuXHQgICAgICAgICAgICAgICAgdmFyIGkwID0gKCgoSVZfMCA8PCA4KSB8IChJVl8wID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8wIDw8IDI0KSB8IChJVl8wID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMiA9ICgoKElWXzEgPDwgOCkgfCAoSVZfMSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMSA8PCAyNCkgfCAoSVZfMSA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTEgPSAoaTAgPj4+IDE2KSB8IChpMiAmIDB4ZmZmZjAwMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkzID0gKGkyIDw8IDE2KSAgfCAoaTAgJiAweDAwMDBmZmZmKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gTW9kaWZ5IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICBDWzBdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1sxXSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbMl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzNdIF49IGkzO1xuXHQgICAgICAgICAgICAgICAgQ1s0XSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbNV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzZdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1s3XSBePSBpMztcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW1cblx0ICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBrZXlzdHJlYW0gd29yZHNcblx0ICAgICAgICAgICAgU1swXSA9IFhbMF0gXiAoWFs1XSA+Pj4gMTYpIF4gKFhbM10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzFdID0gWFsyXSBeIChYWzddID4+PiAxNikgXiAoWFs1XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMl0gPSBYWzRdIF4gKFhbMV0gPj4+IDE2KSBeIChYWzddIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1szXSA9IFhbNl0gXiAoWFszXSA+Pj4gMTYpIF4gKFhbMV0gPDwgMTYpO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgU1tpXSA9ICgoKFNbaV0gPDwgOCkgIHwgKFNbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoU1tpXSA8PCAyNCkgfCAoU1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgICAgICBNW29mZnNldCArIGldIF49IFNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gbmV4dFN0YXRlKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblx0ICAgICAgICB2YXIgQyA9IHRoaXMuX0M7XG5cblx0ICAgICAgICAvLyBTYXZlIG9sZCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIENfW2ldID0gQ1tpXTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgQ1swXSA9IChDWzBdICsgMHg0ZDM0ZDM0ZCArIHRoaXMuX2IpIHwgMDtcblx0ICAgICAgICBDWzFdID0gKENbMV0gKyAweGQzNGQzNGQzICsgKChDWzBdID4+PiAwKSA8IChDX1swXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzJdID0gKENbMl0gKyAweDM0ZDM0ZDM0ICsgKChDWzFdID4+PiAwKSA8IChDX1sxXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzNdID0gKENbM10gKyAweDRkMzRkMzRkICsgKChDWzJdID4+PiAwKSA8IChDX1syXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzRdID0gKENbNF0gKyAweGQzNGQzNGQzICsgKChDWzNdID4+PiAwKSA8IChDX1szXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzVdID0gKENbNV0gKyAweDM0ZDM0ZDM0ICsgKChDWzRdID4+PiAwKSA8IChDX1s0XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzZdID0gKENbNl0gKyAweDRkMzRkMzRkICsgKChDWzVdID4+PiAwKSA8IChDX1s1XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzddID0gKENbN10gKyAweGQzNGQzNGQzICsgKChDWzZdID4+PiAwKSA8IChDX1s2XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICB0aGlzLl9iID0gKENbN10gPj4+IDApIDwgKENfWzddID4+PiAwKSA/IDEgOiAwO1xuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBnLXZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBneCA9IFhbaV0gKyBDW2ldO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnN0cnVjdCBoaWdoIGFuZCBsb3cgYXJndW1lbnQgZm9yIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnYSA9IGd4ICYgMHhmZmZmO1xuXHQgICAgICAgICAgICB2YXIgZ2IgPSBneCA+Pj4gMTY7XG5cblx0ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhpZ2ggYW5kIGxvdyByZXN1bHQgb2Ygc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdoID0gKCgoKGdhICogZ2EpID4+PiAxNykgKyBnYSAqIGdiKSA+Pj4gMTUpICsgZ2IgKiBnYjtcblx0ICAgICAgICAgICAgdmFyIGdsID0gKCgoZ3ggJiAweGZmZmYwMDAwKSAqIGd4KSB8IDApICsgKCgoZ3ggJiAweDAwMDBmZmZmKSAqIGd4KSB8IDApO1xuXG5cdCAgICAgICAgICAgIC8vIEhpZ2ggWE9SIGxvd1xuXHQgICAgICAgICAgICBHW2ldID0gZ2ggXiBnbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXRlIHZhbHVlc1xuXHQgICAgICAgIFhbMF0gPSAoR1swXSArICgoR1s3XSA8PCAxNikgfCAoR1s3XSA+Pj4gMTYpKSArICgoR1s2XSA8PCAxNikgfCAoR1s2XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbMV0gPSAoR1sxXSArICgoR1swXSA8PCA4KSAgfCAoR1swXSA+Pj4gMjQpKSArIEdbN10pIHwgMDtcblx0ICAgICAgICBYWzJdID0gKEdbMl0gKyAoKEdbMV0gPDwgMTYpIHwgKEdbMV0gPj4+IDE2KSkgKyAoKEdbMF0gPDwgMTYpIHwgKEdbMF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzNdID0gKEdbM10gKyAoKEdbMl0gPDwgOCkgIHwgKEdbMl0gPj4+IDI0KSkgKyBHWzFdKSB8IDA7XG5cdCAgICAgICAgWFs0XSA9IChHWzRdICsgKChHWzNdIDw8IDE2KSB8IChHWzNdID4+PiAxNikpICsgKChHWzJdIDw8IDE2KSB8IChHWzJdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs1XSA9IChHWzVdICsgKChHWzRdIDw8IDgpICB8IChHWzRdID4+PiAyNCkpICsgR1szXSkgfCAwO1xuXHQgICAgICAgIFhbNl0gPSAoR1s2XSArICgoR1s1XSA8PCAxNikgfCAoR1s1XSA+Pj4gMTYpKSArICgoR1s0XSA8PCAxNikgfCAoR1s0XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbN10gPSAoR1s3XSArICgoR1s2XSA8PCA4KSAgfCAoR1s2XSA+Pj4gMjQpKSArIEdbNV0pIHwgMDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SYWJiaXQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SYWJiaXQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUmFiYml0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUmFiYml0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SYWJiaXQ7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICpcblx0ICAgICAqIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiB0aGF0IG5lZ2xlY3RlZCB0byBjb252ZXJ0IHRoZSBrZXkgdG8gbGl0dGxlLWVuZGlhbi5cblx0ICAgICAqIFRoaXMgZXJyb3IgZG9lc24ndCBhZmZlY3QgdGhlIGNpcGhlcidzIHNlY3VyaXR5LFxuXHQgICAgICogYnV0IGl0IGRvZXMgYWZmZWN0IGl0cyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zLlxuXHQgICAgICovXG5cdCAgICB2YXIgUmFiYml0TGVnYWN5ID0gQ19hbGdvLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgSyA9IHRoaXMuX2tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5jZmcuaXY7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdExlZ2FjeSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0TGVnYWN5O1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSwgcmVxdWlyZShcIi4vbGliLXR5cGVkYXJyYXlzXCIpLCByZXF1aXJlKFwiLi9lbmMtdXRmMTZcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjR1cmxcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vc2hhMjU2XCIpLCByZXF1aXJlKFwiLi9zaGEyMjRcIiksIHJlcXVpcmUoXCIuL3NoYTUxMlwiKSwgcmVxdWlyZShcIi4vc2hhMzg0XCIpLCByZXF1aXJlKFwiLi9zaGEzXCIpLCByZXF1aXJlKFwiLi9yaXBlbWQxNjBcIiksIHJlcXVpcmUoXCIuL2htYWNcIiksIHJlcXVpcmUoXCIuL3Bia2RmMlwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSwgcmVxdWlyZShcIi4vbW9kZS1jZmJcIiksIHJlcXVpcmUoXCIuL21vZGUtY3RyXCIpLCByZXF1aXJlKFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIpLCByZXF1aXJlKFwiLi9tb2RlLW9mYlwiKSwgcmVxdWlyZShcIi4vbW9kZS1lY2JcIiksIHJlcXVpcmUoXCIuL3BhZC1hbnNpeDkyM1wiKSwgcmVxdWlyZShcIi4vcGFkLWlzbzEwMTI2XCIpLCByZXF1aXJlKFwiLi9wYWQtaXNvOTc5NzFcIiksIHJlcXVpcmUoXCIuL3BhZC16ZXJvcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vcGFkLW5vcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vZm9ybWF0LWhleFwiKSwgcmVxdWlyZShcIi4vYWVzXCIpLCByZXF1aXJlKFwiLi90cmlwbGVkZXNcIiksIHJlcXVpcmUoXCIuL3JjNFwiKSwgcmVxdWlyZShcIi4vcmFiYml0XCIpLCByZXF1aXJlKFwiLi9yYWJiaXQtbGVnYWN5XCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCIsIFwiLi9saWItdHlwZWRhcnJheXNcIiwgXCIuL2VuYy11dGYxNlwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vZW5jLWJhc2U2NHVybFwiLCBcIi4vbWQ1XCIsIFwiLi9zaGExXCIsIFwiLi9zaGEyNTZcIiwgXCIuL3NoYTIyNFwiLCBcIi4vc2hhNTEyXCIsIFwiLi9zaGEzODRcIiwgXCIuL3NoYTNcIiwgXCIuL3JpcGVtZDE2MFwiLCBcIi4vaG1hY1wiLCBcIi4vcGJrZGYyXCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCIsIFwiLi9tb2RlLWNmYlwiLCBcIi4vbW9kZS1jdHJcIiwgXCIuL21vZGUtY3RyLWdsYWRtYW5cIiwgXCIuL21vZGUtb2ZiXCIsIFwiLi9tb2RlLWVjYlwiLCBcIi4vcGFkLWFuc2l4OTIzXCIsIFwiLi9wYWQtaXNvMTAxMjZcIiwgXCIuL3BhZC1pc285Nzk3MVwiLCBcIi4vcGFkLXplcm9wYWRkaW5nXCIsIFwiLi9wYWQtbm9wYWRkaW5nXCIsIFwiLi9mb3JtYXQtaGV4XCIsIFwiLi9hZXNcIiwgXCIuL3RyaXBsZWRlc1wiLCBcIi4vcmM0XCIsIFwiLi9yYWJiaXRcIiwgXCIuL3JhYmJpdC1sZWdhY3lcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCAiY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG5zdHlsZS50ZXh0Q29udGVudCA9IGBcclxuICAubW9kYWwtY2hlY2tib3gtY29udGFpbmVyIHtcclxuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC5tb2RhbC1jaGVja2JveC1jb250YWluZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcclxuICAgIG1hcmdpbi1yaWdodDogNXB4O1xyXG4gIH1cclxuYDtcclxuXHJcbmRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlKTtcclxuaW1wb3J0IHtBcHAsIE1hcmtkb3duVmlldywgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgSVNldHRpbmdzLCBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5nc30gZnJvbSAnLi9zZXR0aW5ncyc7XHJcbmltcG9ydCBmb3JtYXQgZnJvbSAnZGF0ZS1mbnMvZm9ybWF0JztcclxuaW1wb3J0IHtcclxuXHRhdmF0YXJJbml0Q29udGVudCxcclxuXHRwb2ludHNNYWp1cml0eSxcclxuXHRwb2ludHNOb3RlTWFqdXJpdHksXHJcblx0cG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UsXHJcblx0cG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlLFxyXG5cdGVsZW1lbnRzLFxyXG5cdGJvb3N0ZXJSZWNpcGVzLFxyXG5cdHN0cmVha2Jvb3N0ZXJEZWNyZWFzZSxcclxuXHRzdHJlYWtib29zdGVySW5jcmVhc2VEYWlseSxcclxuXHRzdHJlYWtib29zdGVySW5jcmVhc2VXZWVrbHksXHJcblx0Y2hhbmNlVG9FYXJuSW5ncmVkaWVudCxcclxuXHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd259IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7QmFkZ2UsIGNoZWNrSWZSZWNlaXZlQUJhZGdlLCBnZXRCYWRnZUZvckluaXRMZXZlbCwgZ2V0QmFkZ2VGb3JMZXZlbH0gZnJvbSAnLi9iYWRnZXMnXHJcbmltcG9ydCB7Z2V0TGV2ZWxGb3JQb2ludHMsIHN0YXR1c1BvaW50c0ZvckxldmVsfSBmcm9tICcuL2xldmVscydcclxuaW1wb3J0IHR5cGUge01vbWVudH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZSwgZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UgLCBnZXRSYW5kb21NZXNzYWdlUG9pbnRzIH0gZnJvbSAnLi9yYW5kb21Ob3RpZmljYXRpb25UZXh0J1xyXG5pbXBvcnQgeyBNb2RhbEluZm9ybWF0aW9uYm94IH0gZnJvbSAnTW9kYWxJbmZvcm1hdGlvbmJveCc7XHJcbmltcG9ydCB7IE1vZGFsQm9vc3RlciB9IGZyb20gJ01vZGFsQm9vc3Rlcic7XHJcbmltcG9ydCB7IGVuY3J5cHRWYWx1ZSwgZW5jcnlwdFN0cmluZywgZGVjcnlwdFN0cmluZywgZW5jcnlwdE51bWJlciwgZGVjcnlwdE51bWJlciwgZW5jcnlwdEJvb2xlYW4sIGRlY3J5cHRCb29sZWFuIH0gZnJvbSAnZW5jcnlwdGlvbic7XHJcblxyXG5sZXQgcG9pbnRzVG9SZWNlaXZlZDogbnVtYmVyID0gMDsgIFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBnYW1pZmljYXRpb24gZXh0ZW5kcyBQbHVnaW4ge1xyXG5cdC8vcHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHRwdWJsaWMgc2V0dGluZ3M6IElTZXR0aW5ncztcclxuXHJcblxyXG5cdGdldFNldHRpbmdTdHJpbmcoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkZWNyeXB0ZWRWYWx1ZSA9IHRoaXMuc2V0dGluZ3Nba2V5XSAhPT0gdW5kZWZpbmVkID8gdGhpcy5zZXR0aW5nc1trZXldLnRvU3RyaW5nKCkgOiAnJ1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgU3RyaW5nOiBkZWNyeXB0ZWQgJHtrZXl9IGlzICR7ZGVjcnlwdFN0cmluZyhkZWNyeXB0ZWRWYWx1ZSl9YClcclxuXHRcdHJldHVybiBkZWNyeXB0U3RyaW5nKGRlY3J5cHRlZFZhbHVlKTtcclxuICAgIH1cclxuXHJcblx0Z2V0U2V0dGluZ051bWJlcihrZXk6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZGVjcnlwdGVkVmFsdWUgPSB0aGlzLnNldHRpbmdzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXMuc2V0dGluZ3Nba2V5XS50b1N0cmluZygpIDogJydcclxuXHRcdC8vY29uc29sZS5sb2coYE51bWJlcjogZGVjcnlwdGVkICR7a2V5fSBpcyAke2RlY3J5cHROdW1iZXIoZGVjcnlwdGVkVmFsdWUpfWApXHJcblx0XHRyZXR1cm4gZGVjcnlwdE51bWJlcihkZWNyeXB0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cdGdldFNldHRpbmdCb29sZWFuKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGVjcnlwdGVkVmFsdWUgPSB0aGlzLnNldHRpbmdzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXMuc2V0dGluZ3Nba2V5XS50b1N0cmluZygpIDogJydcclxuXHRcdC8vY29uc29sZS5sb2coYEJvb2xlYW46IGRlY3J5cHRlZCAke2tleX0gaXMgJHtkZWNyeXB0Qm9vbGVhbihkZWNyeXB0ZWRWYWx1ZSl9YClcclxuXHRcdHJldHVybiBkZWNyeXB0Qm9vbGVhbihkZWNyeXB0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHRzZXRTZXR0aW5nU3RyaW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gU2V0IGEgc3BlY2lmaWMgc2V0dGluZ1xyXG5cdFx0Y29uc3QgdmFsdWVFbmNyeXB0ZWQgPSBlbmNyeXB0U3RyaW5nKHZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3Nba2V5XSA9IHZhbHVlRW5jcnlwdGVkO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgU3RyaW5nOiBuZXcgdmFsdWUgZm9yICR7a2V5fSBpcyAke3ZhbHVlRW5jcnlwdGVkfWApXHJcbiAgICAgICAgLy90aGlzLnNldHRpbmdzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdH1cclxuXHJcblxyXG5cdHNldFNldHRpbmdOdW1iZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICAvLyBTZXQgYSBzcGVjaWZpYyBzZXR0aW5nXHJcblx0XHQvL2NvbnNvbGUubG9nKGBuZXcgdmFsdWUgZm9yICR7a2V5fSBpcyAke3ZhbHVlfWApXHJcblx0XHRjb25zdCB2YWx1ZUVuY3J5cHRlZCA9IGVuY3J5cHROdW1iZXIodmFsdWUpXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgbmV3IHZhbHVlIGZvciAke2tleX0gaXMgJHt2YWx1ZX0gXHUyMUQyICR7dmFsdWVFbmNyeXB0ZWR9YClcclxuXHRcdHRoaXMuc2V0dGluZ3Nba2V5XSA9IHZhbHVlRW5jcnlwdGVkO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYE51bWJlcjogbmV3IHZhbHVlIGZvciAke2tleX0gaXMgJHt2YWx1ZUVuY3J5cHRlZH1gKVxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0c2V0U2V0dGluZ0Jvb2xlYW4oa2V5OiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgLy8gU2V0IGEgc3BlY2lmaWMgc2V0dGluZ1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgbmV3IHZhbHVlIGZvciAke2tleX0gaXMgJHt2YWx1ZX1gKVxyXG5cdFx0Y29uc3QgdmFsdWVFbmNyeXB0ZWQgPSBlbmNyeXB0Qm9vbGVhbih2YWx1ZSlcclxuICAgICAgICB0aGlzLnNldHRpbmdzW2tleV0gPSB2YWx1ZUVuY3J5cHRlZDtcclxuXHRcdC8vY29uc29sZS5sb2coYEJvb2xlYW46IG5ldyB2YWx1ZSBmb3IgJHtrZXl9IGlzICR7dmFsdWVFbmNyeXB0ZWR9YClcclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdH1cclxuXHJcblxyXG5cdFxyXG5cclxuXHRcclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnb2JzaWRpYW4tcGttLWdhbWlmaWNhdGlvbiBsb2FkZWQhJyk7XHJcblx0XHQvL3RoaXMuc2V0dGluZ3MgPSBkZWZhdWx0U2V0dGluZ3M7XHJcblxyXG5cdCBcclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3ModGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblxyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHQvLyB0YWtlIGNhcmUgdG8gcmVzZXQgd2hlbiBvcGVuZWQgb24gYSBuZXcgZGF5LCBkb24ndCB3YWl0IGZvciB0cmlnZ2VyXHJcblx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0Ly8gQ29kZSB0aGF0IHlvdSB3YW50IHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGRlbGF5XHJcblx0XHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2RlbGF5TG9hZFRpbWUnKSoxMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblxyXG5cdFx0Ly8gdG8gc2V0IHRpbWVyIGZvciByZXNldCBkYWlseSBhbmQgd2Vla2x5IGdvYWxzXHJcblx0XHR0aGlzLnRpbWVySW50ZXJ2YWwgPSAzMCAqIDYwICogMTAwMDsgLy8gbWludXRlcyB4IHNlY29uZHMgeCBtaWxsaXNlY29uZHNcclxuXHRcdHRoaXMudGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnJlc2V0RGFpbHlHb2Fscy5iaW5kKHRoaXMpLCB0aGlzLnRpbWVySW50ZXJ2YWwpO1xyXG5cclxuXHRcdFxyXG5cclxuXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignZGVidWcnKSl7XHJcblx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihcImFjY2Vzc2liaWxpdHlcIiwgXCJjcmFmdGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vdGhpcy5hY3F1aXJlSW5ncmVkaWVudHMoKTtcclxuXHRcdFx0XHQvL3RoaXMucmVzZXREYWlseUdvYWxzKCk7XHJcblx0XHRcdFx0Ly90aGlzLnNldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnLCB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0XHQvL3RoaXMuc2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0XHQvL3RoaXMuc2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0XHQvL2F3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0bmV3IE1vZGFsQm9vc3Rlcih0aGlzLmFwcCwgYCBgLCB0aGlzKS5vcGVuKCk7XHJcblx0XHRcdFx0Ly90aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZih0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2NvdW50ZXJNYWp1cml0eUNhbGNJbml0aWFsJykgPj0gNTApe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJ0ZXN0LXR1YmUtMlwiLCBcIkJvb3N0ZXJzXCIsIGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdFx0bmV3IE1vZGFsQm9vc3Rlcih0aGlzLmFwcCwgYCBgLCB0aGlzKS5vcGVuKCk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2Jvb3N0ZXJzJyxcclxuXHRcdFx0XHRuYW1lOiAnb3BlbiBib290ZXIgcGFsbGV0ZScsXHJcblx0XHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdG5ldyBNb2RhbEJvb3N0ZXIodGhpcy5hcHAsIGAgYCwgdGhpcykub3BlbigpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkUmliYm9uSWNvbihcInNwcm91dFwiLCBcIkNhbGN1bGF0ZSBOb3RlIE1hdHVyaXR5XCIsIGFzeW5jICgpID0+IHtcclxuXHRcdFx0Ly9jb25zdCBmaWxlOiBURmlsZSB8IG51bGwgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNhbGN1bGF0ZU5vdGVNYWp1cml0eSgpO1xyXG5cdFx0fSk7XHJcblxyXG5cclxuXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignZW5hYmxlSW5pdENvbW1hbmQnKSl7XHJcblx0XHRcdC8vIGNvbW1hbmQgSW5pdGlhbGl6ZSBnYW1pZmljYXRpb24gcmF0aW5nc1xyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAnaW5pdC1yYXRlLWdhbWlmaWNhdGlvbicsXHJcblx0XHRcdFx0bmFtZTogJ0luaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3MnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVHYW1lKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignZW5hYmxlSW5pdENvbW1hbmQnKSl7XHJcblx0XHRcdC8vIGNvbW1hbmQgY3JlYXRlIGF2YXRhciBwcm9maWxlIHBhZ2VcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2NyZWF0ZS1hdmF0YXItcGFnZScsXHJcblx0XHRcdFx0bmFtZTogJ2NyZWF0ZSBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcDtcclxuXHRcdFx0XHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSlcclxuXHRcdFx0XHRcdC8vY29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0Ly9hd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgY2hhcnRTdHJpbmcpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdlbmFibGVJbml0Q29tbWFuZCcpKSB7XHJcblx0XHRcdC8vIGNvbW1hbmQ6IHJlc2V0IGdhbWVcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ3Jlc2V0LWdhbWUnLFxyXG5cdFx0XHRcdG5hbWU6ICdyZXNldCB0aGUgZ2FtZScsXHJcblx0XHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2V0R2FtZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdFxyXG5cdFx0Ly8gY29tbWFuZDogcmF0ZSBub3RlIG1hdHVyaXR5XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3JhdGUtbm90ZS1tYXR1cml0eScsXHJcblx0XHRcdG5hbWU6ICdSYXRlIG5vdGUgbWFqdXJpdHknLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0Ly8gY29tbWFuZDogY2hhbmdlIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3ltYm9sc1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjaGFuZ2UtcHJvZ3Jlc3NpdmUtZm9ybWF0dGluZycsXHJcblx0XHRcdG5hbWU6ICd0b2dnbGUgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBmb3JtYXR0aW5nJyxcclxuXHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRhd2FpdCByZXBsYWNlRm9ybWF0U3RyaW5ncyh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3Byb2dyZXNzaXZlU3VtTGF5ZXIyJyksIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygncHJvZ3Jlc3NpdmVTdW1MYXllcjMnKSk7XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHJcblx0fVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHJlc2V0R2FtZSgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKTtcclxuICAgICAgICB0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJywgMSlcclxuICAgICAgICB0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0YXR1c1BvaW50cycsIDApXHJcbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nTnVtYmVyKCd4cEZvck5leHRMZXZlbCcsIDEwMDApXHJcbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYmFkZ2VCb29zdGVyU3RhdGUnLCBmYWxzZSlcclxuICAgICAgICB0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicsIDEpXHJcbiAgICAgICAgLy9hd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cygwLCcnKVxyXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG4gICAgICAgIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgR2FtZSBpcyBub3cgcmVzZXRlZC4gUGxlYXNlIGRlbGV0ZSB0aGUgUHJvZmlsZSBQYWdlOiBcIiR7dGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpfS5tZFwiIG1hbnVhbGx5LmApLm9wZW4oKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplR2FtZShzdGF0dXNiYXJHYW1pZmljYXRpb246IEhUTUxTcGFuRWxlbWVudCkge1xyXG5cdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCdnYW1pZmljYXRpb25TdGFydERhdGUnLCBmb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQnKSk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSlcclxuXHRcdC8vY29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0Ly9hd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgY2hhcnRTdHJpbmcpXHJcblx0XHRhd2FpdCB0aGlzLm9wZW5BdmF0YXJGaWxlKClcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcDogVEZpbGVbXSA9IGF3YWl0IGdldEZpbGVNYXAodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygndGFnc0V4Y2x1ZGUnKSwgdGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdmb2xkZXJFeGNsdWRlJykpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3Byb2dyZXNzaXZlU3VtTGF5ZXIyJyksIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygncHJvZ3Jlc3NpdmVTdW1MYXllcjMnKSk7XHJcblx0XHRcdGNvbnN0IHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyID0gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCk7XHJcblx0XHRcdGNvbnN0IGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUpO1xyXG5cdFx0XHRjb25zdCBpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRjb25zdCBpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgZmlsZUNvdW50TWFwLnNpemUpO1xyXG5cdFx0XHRjb25zdCByYXRlT3V0ID0gcmF0ZU91dGxpbmtzKGdldE51bWJlck9mT3V0bGlua3MoZmlsZSkpO1xyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZS5iYXNlbmFtZX0gaW4gcGF0aCAke2ZpbGVOYW1lLnBhdGh9YCk7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSwnZnJvbU5vdGVNYWp1cml0eScpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSksJ2Zyb21Ob3RlTWFqdXJpdHlGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpID49IDEgJiYgJ3RpdGxlLWNsYXNzJyBpbiBmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpLCdmcm9tVGl0bGVDbGFzcycpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ3RpdGxlLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSwnZnJvbVRpdGxlQ2xhc3NGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSwnZnJvbU5vdGVMZW5ndGhDbGFzcycpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aCksJ2Zyb21Ob3RlTGVuZ3RoQ2xhc3NGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSwnZnJvbUlubGlua0NsYXNzJylcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBpbmxpbmtDbGFzcyksJ2Zyb21JbmxpbmtDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpLCdmcm9tT3V0bGlua0NsYXNzJylcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSwnZnJvbU91dGxpbmtDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pLCdmcm9tUHJvZ3Jlc3NpdmVUdW1tYXJpemF0aW9uTWF0dXJpdHknKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlUHJvZ3Jlc3NpdmVTdW0pLCdmcm9tUHJvZ3Jlc3NpdmVUdW1tYXJpemF0aW9uTWF0dXJpdHlGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRuZXcgTm90aWNlKGAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMgcmVjZWl2ZWRgLDQwMDApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMgcmVjZWl2ZWRgKVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpKTtcclxuXHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2luaXRCYWRnZS5uYW1lfVwiIGJhZGdlLiAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gLDUwMDApXHJcblx0XHRcdGNvbnNvbGUubG9nKGBZb3UgZWFybmVkICR7aW5pdEJhZGdlLm5hbWV9IC0gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmJvb3N0ZXJGb3JJbml0KClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGBGaW5hbGxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXN0YXRpb24hXFxuQ29uZ3JhdHVsYXRpb24sIHlvdSBlYXJuZWQgJHtwb2ludHNSZWNlaXZlZH0gUG9pbnRzIVxcblxcbkNoZWNrIHRoZSBQcm9maWxlIFBhZ2U6IFwiJHt0aGlzLmdldFNldHRpbmdTdHJpbmcoJ2F2YXRhclBhZ2VOYW1lJyl9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgd3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlcjogYW55LCBmaWxlTmFtZVJhdGU6IG51bWJlciwgcmF0ZUZpbGVMZW5ndGg6IG51bWJlciwgaW5saW5rQ2xhc3M6IG51bWJlciwgcmF0ZU91dDogbnVtYmVyLCByYXRlUHJvZ3Jlc3NpdmVTdW06IG51bWJlciwgbm90ZU1hanVyaXR5OiBudW1iZXIpIHtcclxuXHRcdGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcylcclxuXHRcdGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpXHJcblx0fVxyXG5cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnb2JzaWRpYW4tcGttLWdhbWlmaWNhdGlvbiB1bmxvYWRlZCEnKTtcclxuXHJcblx0XHQvLyBDbGVhciB0aGUgdGltZXIgd2hlbiB0aGUgcGx1Z2luIGlzIHVubG9hZGVkXHJcblx0XHRpZiAodGhpcy50aW1lcklkICE9PSBudWxsKSB7XHJcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkKTtcclxuXHRcdFx0dGhpcy50aW1lcklkID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cdFx0XHJcblxyXG5cdFx0bGV0IHJhdGVGaWxlTGVuZ3RoID0gMDtcclxuXHRcdGxldCBmaWxlTGVuZ3RoID0gMDtcclxuXHRcdGxldCByYXRlUHJvZ3Jlc3NpdmVTdW0gPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlQ29udGVudHMgIT09IHVuZGVmaW5lZCAmJiBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZSk7XHJcblx0XHRcdHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiBmaWxlQ29udGVudHMgYW5kIGZpbGVOYW1lIGFyZSBub3QgbnVsbFxyXG5cdFx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSBudWxsICYmIGZpbGVOYW1lICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgeyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9ID0gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGZpbGVDb250ZW50cywgZmlsZU5hbWUsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygncHJvZ3Jlc3NpdmVTdW1MYXllcjInKSwgdGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdwcm9ncmVzc2l2ZVN1bUxheWVyMycpKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cdFx0XHRcclxuXHRcdFx0XHJcblx0XHRcdFxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2NvdW50ZXJNYWp1cml0eUNhbGMnLHRoaXMuZ2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsYycpICsgMSlcclxuXHRcdFx0XHJcblx0XHRcdFxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRsZXQgcG9pbnRzUmVjZWl2ZWQgPSAwOyAvLyB0byBoYXZlIG9uZSBtZXNzYWdlIGF0IHRoZSBlbmQgaG93IG1hbnkgcG9pbnRzIHJlY2VpdmVkXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYG5vdGUtbWF0dXJpdHkgPj0xYClcclxuXHRcdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNOb3RlTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVwiLCBub3RlTWFqdXJpdHkpLCdmcm9tTm90ZU1hanVyaXR5JylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSksJ2Zyb21Ob3RlTWFqdXJpdHlGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsY0luaXRpYWwnLHRoaXMuZ2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsY0luaXRpYWwnKSArIDEpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hY3F1aXJlSW5ncmVkaWVudHMoY2hhbmNlVG9FYXJuSW5ncmVkaWVudCwxLDMpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMuZ2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsY0luaXRpYWwnKSA9PSA1MCl7XHJcblx0XHRcdFx0XHRcdFx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYFx1RDgzRFx1REU4MCBJbnRyb2R1Y2luZyBCb29zdGVycyEgXHVEODNEXHVERTgwTGV2ZWwgdXAgZmFzdGVyLCB5b3UgZW5hYmxlZCB0aGUgbmV4dCBzdGFnZSEgQ3JhZnQgQm9vc3RlcnMgZm9yIGFuIGFjY2VsZXJhdGVkIGtub3dsZWRnZSBqb3VybmV5LiBDbGljayB0aGUgXCJ0ZXN0LXR1YmVcIiBvbiB0aGUgcmlnaHQgb3IgdHlwZSAnT3BlbiBCb29zdGVyIFBhbGV0dGUnIHRvIGdldCBzdGFydGVkISB5b3UgZ290IG9uZSBib29zdGVyIGFzIGEgZ2lmdCwgc28gdHJ5IGl0IG91dCFcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREFcdUQ4M0RcdUREMERgKS5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSwnZnJvbVRpdGxlQ2xhc3MnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpLCdmcm9tVGl0bGVDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpLCdmcm9tTm90ZUxlbmd0aENsYXNzJylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnbm90ZS1sZW5ndGgtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKSwnZnJvbU5vdGVMZW5ndGhDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpLCdmcm9tSW5saW5rQ2xhc3MnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdpbmxpbmstY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSwnZnJvbUlubGlua0NsYXNzRmlyc3RUaW1lJylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dCksJ2Zyb21PdXRsaW5rQ2xhc3MnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVPdXQpLCdmcm9tT3V0bGlua0NsYXNzRmlyc3RUaW1lJylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSksJ2Zyb21Qcm9ncmVzc2l2ZVR1bW1hcml6YXRpb25NYXR1cml0eScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVQcm9ncmVzc2l2ZVN1bSksJ2Zyb21Qcm9ncmVzc2l2ZVR1bW1hcml6YXRpb25NYXR1cml0eUZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGBwb2ludHNSZWNlaXZlZDogJHtwb2ludHNSZWNlaXZlZH1gKVxyXG5cdFx0XHRcdFx0XHRpZiAocG9pbnRzUmVjZWl2ZWQgPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlUG9pbnRzID0gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHNSZWNlaXZlZCk7XHJcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlUG9pbnRzLDQwMDApXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgNDAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdkYWlseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2RhaWx5Tm90ZUNyZWF0aW9uVGFzaycsIDApO1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdTdHJpbmcoJ2RhaWx5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoIWlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJyksICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRjb25zdCBkYXlzUGFzc2VkID0gd2luZG93Lm1vbWVudCgpLmRpZmYod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSwgJ2RheXMnKSAtIDE7IC8vdG9kYXkgaXMgc3RpbGwgYSBjaGFuY2UuIFxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3dlZWtseU5vdGVDcmVhdGlvblRhc2snLCAwKTtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0dGhpcy5kZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGF5c1Bhc3NlZClcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7ZGF5c1Bhc3NlZH0gZGF5cyBwYXNzZWRgKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0Y29uc29sZS5sb2coYHdlZWtseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJyksICdERC5NTS5ZWVlZJykpICYmIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3dlZWtseU5vdGVDcmVhdGlvblRhc2snLCAwKTtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHJlc2V0KXtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZGVhdGl2YXRlIGJvb3N0ZXJzXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzJykgPT0gdHJ1ZSAmJiBpc01pbnV0ZXNQYXNzZWQod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ2Jvb3N0ZXJEYXRlUGVycGV0dWFsUHJvZ3Jlc3MnKSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKSxnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKCdwZXJwZXR1YWxQcm9ncmVzcycpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzcycsZmFsc2UpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnXCJQZXJwZXR1YWwgUHJvZ3Jlc3NcIiBoYXMgZW5kZWQuJylcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMnKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVTdHJhdGVnaWNTeW5hcHNlcycpLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLGdldEJvb3N0ZXJSdW5UaW1lRnJvbVZhck5hbWUoJ3N0cmF0ZWdpY1N5bmFwc2VzJykpKXtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlN0cmF0ZWdpYyBTeW5hcHNlc1wiIGhhcyBlbmRlZC4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZScpID09IHRydWUgJiYgaXNNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdib29zdGVyRGF0ZUxpbmtlcnNMb2RlJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgnbGlua2Vyc0xvZGUnKSkpe1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yTGlua2Vyc0xvZGUnLGZhbHNlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1wiTGlua2VycyBMb2RlXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24nKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVSZWN1cnNpdmVSZWZsZWN0aW9uJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgncmVjdXJzaXZlUmVmbGVjdGlvbicpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JSZWN1cnNpdmVSZWZsZWN0aW9uJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlJlY3Vyc2l2ZSBSZWZsZWN0aW9uXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN5bmFwdGljU3VyZ2UnKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVTeW5hcHRpY1N1cmdlJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgnc3luYXB0aWNTdXJnZScpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlN5bmFwdGljIFN1cmdlXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclRpdGxlVGl0YW4nKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVUaXRsZVRpdGFuJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgndGl0bGVUaXRhbicpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlRpdGxlIFRpdGFuXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtJykgPT0gdHJ1ZSAmJiBpc01pbnV0ZXNQYXNzZWQod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ2Jvb3N0ZXJEYXRlUHJlY2lzaW9uUHJpc20nKSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKSxnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKCdwcmVjaXNpb25QcmlzbScpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbScsZmFsc2UpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnXCJQcmVjaXNpb24gUHJpc21cIiBoYXMgZW5kZWQuJylcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueScpID09IHRydWUgJiYgaXNNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdib29zdGVyRGF0ZUh5cGVybGlua0hhcm1vbnknKSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKSxnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKCdoeXBlcmxpbmtIYXJtb255JykpKXtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3Rvckh5cGVybGlua0hhcm1vbnknLGZhbHNlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1wiSHlwZXJsaW5rIEhhcm1vbnlcIiBoYXMgZW5kZWQuJylcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEnKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVFcGhlbWVyYWxFdXBob3JpYScpLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLGdldEJvb3N0ZXJSdW5UaW1lRnJvbVZhck5hbWUoJ2VwaGVtZXJhbEV1cGhvcmlhJykpKXtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIkVwaGVtZXJhbCBFdXBob3JpYVwiIGhhcyBlbmRlZC4nKVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcignZGFpbHlOb3RlQ3JlYXRpb25UYXNrJyk7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcignZGFpbHlOb3RlQ3JlYXRpb25UYXNrJywgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoc3RyZWFrYm9vc3RlckluY3JlYXNlRGFpbHkpXHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UsJ2Zvcm1JbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCcpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuZ2V0U2V0dGluZ051bWJlcignYmFkZ2VCb29zdGVyRmFjdG9yJykgKyB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKSkpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSw0MDAwKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScpLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScpLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nTnVtYmVyKCd3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrJywgMSk7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpKVxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3dlZWtseU5vdGVDcmVhdGlvblRhc2snLCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKHN0cmVha2Jvb3N0ZXJJbmNyZWFzZVdlZWtseSk7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlLCAnZnJvbUNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24nKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicpICsgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJykpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlLDQwMDApXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c1BvaW50cycpKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RhdHVzUG9pbnRzJykgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMDtcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJyl9IHwgJHt0aGlzLmNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhciwgYmFyTGVuZ3RoKX18XHVEODNEXHVERTgwJHtib29zdGVyRmFjdG9yfSR7dGhpcy5yYXRlQm9vc3RlckRpcmVjdGlvbigpfWApXHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTIxOTVcdUZFMEYnXHJcblx0XHRpZih0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2RhaWx5Tm90ZUNyZWF0aW9uVGFzaycpPT0xKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MjdBMVx1RkUwRic7XHJcblx0XHR9IGVsc2UgaWYodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignc3RyZWFrYm9vc3RlckRhdGUnKSl7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnO1xyXG5cdFx0fSBlbHNlIGlmKCF0aGlzLmdldFNldHRpbmdCb29sZWFuKCdzdHJlYWtib29zdGVyRGF0ZScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwN1x1RkUwRic7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZGlyZWN0aW9uXHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIsIGNhbGxlcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJyk7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzID0gMDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMgPSAwO1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZSA9IDA7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24gPSAwO1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlID0gMDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9yVGl0bGVUaXRhbiA9IDA7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtID0gMDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueSA9IDA7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhID0gMDtcclxuXHRcdFxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2JhZGdlQm9vc3RlclN0YXRlJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUGVycGV0dWFsUHJvZ3Jlc3MnKSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzcyA9IDM7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMgPSAzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZScpKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvckxpbmtlcnNMb2RlID0gMTA7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24nKSAmJiAoIGNhbGxlciA9PSAnZnJvbU5vdGVNYWp1cml0eScgfHwgY2FsbGVyID09ICdmcm9tVGl0bGVDbGFzcycgfHwgY2FsbGVyID09ICdmcm9tTm90ZUxlbmd0aENsYXNzJyB8fCBjYWxsZXIgPT0gJ2Zyb21JbmxpbmtDbGFzcycgfHwgY2FsbGVyID09ICdmcm9tT3V0bGlua0NsYXNzJyB8fCBjYWxsZXIgPT0gJ2Zyb21Qcm9ncmVzc2l2ZVR1bW1hcml6YXRpb25NYXR1cml0eScpKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24gPSA1O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlJykgJiYgKGNhbGxlciA9PSAnZnJvbUlubGlua0NsYXNzJyB8fCBjYWxsZXIgPT0gJ2Zyb21PdXRsaW5rQ2xhc3MnKSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlID0gMjA7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclRpdGxlVGl0YW4nKSAmJiBjYWxsZXIgPT0gJ2Zyb21UaXRsZUNsYXNzJyl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuID0gNDtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUHJlY2lzaW9uUHJpc20nKSAmJiBjYWxsZXIgPT0gJ2Zyb21Ob3RlTGVuZ3RoQ2xhc3MnKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvclByZWNpc2lvblByaXNtID0gNDtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueScpICYmIChjYWxsZXIgPT0gJ2Zyb21JbmxpbmtDbGFzcycgfHwgY2FsbGVyID09ICdmcm9tT3V0bGlua0NsYXNzJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueSA9IDU7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEgPSA4MDtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0cG9pbnRzVG9SZWNlaXZlZCA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyICsgYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzICsgYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzICsgYm9vc3RlckZhY3RvckxpbmtlcnNMb2RlICsgYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24gKyBib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZSArIGJvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuICsgYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtICsgYm9vc3RlckZhY3Rvckh5cGVybGlua0hhcm1vbnkgKyBib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEgKVxyXG5cdFx0dGhpcy5zZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNQb2ludHMnLCBwb2ludHNUb1JlY2VpdmVkICsgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNQb2ludHMnKSlcclxuXHRcdC8vYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdCb29zdGVyRmFrZm9yID0gcGFyc2VGbG9hdCgodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJykgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKGBuZXdCb29zdGVyRmFrZm9yOiAke25ld0Jvb3N0ZXJGYWtmb3J9YClcclxuXHRcdC8vY29uc29sZS5sb2coYG9sZCB2YWx1ZSBzdHJlYWtib29zdGVyOiAke3RoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpfWApXHJcblx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInLCBuZXdCb29zdGVyRmFrZm9yKTtcclxuXHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ3N0cmVha2Jvb3N0ZXJEYXRlJywgdHJ1ZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBuZXcgdmFsdWUgc3RyZWFrYm9vc3RlcjogJHt0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKX1gKVxyXG5cdFx0Ly9hd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpfWApXHJcblx0XHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKSAtIGRlY3JlYXNlVmFsdWUgKiBzdHJlYWtib29zdGVyRGVjcmVhc2UpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInLCBuZXdCb29zdGVyRmFrZm9yKVxyXG5cdFx0aWYgKG5ld0Jvb3N0ZXJGYWtmb3IgPCAwKXtcclxuXHRcdFx0bmV3Qm9vc3RlckZha2ZvciA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicsIG5ld0Jvb3N0ZXJGYWtmb3IpXHJcblx0XHR0aGlzLnNldFNldHRpbmdCb29sZWFuKCdzdHJlYWtib29zdGVyRGF0ZScsIGZhbHNlKTtcclxuXHRcdC8vYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZUF2YXRhclBhZ2UoYXZhdGFyUGFnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IGxldmVsQW5kUG9pbnRzUmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2U0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBsZXZlbEFuZFBvaW50c0VuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgbGV2ZWxBbmRQb2ludHNTdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZGFpbHlOb3Rlc0NoYWxsZW5nZUVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGRhaWx5Tm90ZXNDaGFsbGVuZ2VTdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHdlZWtseU5vdGVzQ2hhbGxlbmdlRW5kMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgd2Vla2x5Tm90ZXNDaGFsbGVuZ2VTdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3JFbmQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9yU3RhcnQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5sZXZlbEFuZFBvaW50c1wiKSB7XHJcblx0XHRcdFx0aWYgKGxldmVsQW5kUG9pbnRzUmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRsZXZlbEFuZFBvaW50c1JlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c1BvaW50cycpXHJcblxyXG5cdFx0Y29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhuZXdQb2ludHMpO1xyXG5cdFx0bGV0IG5leHRMZXZlbEF0ID0gdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCd4cEZvck5leHRMZXZlbCcpO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmAsNTAwMClcclxuXHRcdFx0Ly8gY2hlY2sgZmlyc3QgaWYgdGhpcyBtZWFucyBhIG5ldyBiYWRnZSBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlblxyXG5cdFx0XHRyZWNlaXZlQmFkZ2UgPSBjaGVja0lmUmVjZWl2ZUFCYWRnZSh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJyksIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJywgbGV2ZWwubGV2ZWwpO1xyXG5cdFx0XHRuZXh0TGV2ZWxBdCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcigneHBGb3JOZXh0TGV2ZWwnLCBsZXZlbC5wb2ludHNOZXh0KTtcclxuXHRcdFx0Ly9hd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NCYXJFbmQgPSBuZXh0TGV2ZWxBdCAtIG5ld1BvaW50cztcclxuXHRcdGNvbnN0IG5ld1BvaW50c1N0cmluZyA9ICd8ICoqTGV2ZWwqKiAgfCAqKicgKyBsZXZlbC5sZXZlbCArICcqKiB8XFxufCBQb2ludHMgfCAnICsgbmV3UG9pbnRzICsgJyAgICB8XFxuXmxldmVsQW5kUG9pbnRzXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxcbiAgICBkYXRhOiBbJyArIG5ld1BvaW50cyArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIHByb2dyZXNzQmFyRW5kICsgJ11cXG54TWluOiAnICsgbGV2ZWwucG9pbnRzICsgJ1xcbnhNYXg6ICcgKyBsZXZlbC5wb2ludHNOZXh0ICsgJ1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCdcclxuXHRcdGNvbnN0IGRhaWx5Q2hhbGxlbmdlID0gJ3wgKipkYWlseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSAqICh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicpICsgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJykpICsgJ0VQKiB8ICoqJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignZGFpbHlOb3RlQ3JlYXRpb25UYXNrJykgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpO1xyXG5cdFx0bGV0IHdlZWtseUNoYWxsZW5nZSA9ICcnXHJcblx0XHRpZihpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InKSArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpKSArICdFUCogICAgIHwgICoqJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJ1x1MjcxNFx1RkUwRi83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InKSArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpKSArICdFUCogICAgIHwgICoqJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSAnfCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKicgKyB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKSArICcqKiB8J1xyXG5cclxuXHRcdGlmIChsZXZlbEFuZFBvaW50c1JlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwgJiYgcmVmZXJlbmNlNCAhPSBudWxsKXtcclxuXHRcdFx0bGV2ZWxBbmRQb2ludHNTdGFydCA9IGxldmVsQW5kUG9pbnRzUmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0bGV2ZWxBbmRQb2ludHNFbmQgPSBsZXZlbEFuZFBvaW50c1JlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRkYWlseU5vdGVzQ2hhbGxlbmdlU3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRkYWlseU5vdGVzQ2hhbGxlbmdlRW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHR3ZWVrbHlOb3Rlc0NoYWxsZW5nZVN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHR3ZWVrbHlOb3Rlc0NoYWxsZW5nZUVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdoeSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JTdGFydDQgPSByZWZlcmVuY2U0IC0gMSAtIDI1OyAvLyBubyBpZGVhIHdoeSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JFbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgbGV2ZWxBbmRQb2ludHNTdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UobGV2ZWxBbmRQb2ludHNFbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIGRhaWx5Tm90ZXNDaGFsbGVuZ2VTdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZGFpbHlOb3Rlc0NoYWxsZW5nZUVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCB3ZWVrbHlOb3Rlc0NoYWxsZW5nZVN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKHdlZWtseU5vdGVzQ2hhbGxlbmdlRW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIGJvb3N0ZXJGYWN0b3JTdGFydDQpLCBib29zdGVyRmFjdG9yLCAuLi5uZXdMaW5lczMuc2xpY2UoYm9vc3RlckZhY3RvckVuZDQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczQuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LypcclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdjaGFydFJlZHV6aWVydW5nTW9uYXRlJykpXHJcblx0fVxyXG5cdCovXHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RhdHVzTGV2ZWwnKSwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCw1MDAwKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYmFkZ2VCb29zdGVyU3RhdGUnLCBmYWxzZSk7XHJcblx0XHRcdFx0dGhpcy5zZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InLCAxKTtcclxuXHRcdFx0XHQvL3RoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygndGFnc0V4Y2x1ZGUnKSwgdGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdmb2xkZXJFeGNsdWRlJykpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIDQwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RhdHVzUG9pbnRzJykpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicsIGJvb3N0ZXJGYWN0b3IpXHJcblx0XHR0aGlzLnNldFNldHRpbmdCb29sZWFuKCdiYWRnZUJvb3N0ZXJTdGF0ZScsIHRydWUpXHJcblx0XHQvL2F3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRnZXRSYW5kb21JbnQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuXHQgIH1cclxuXHJcblx0YXN5bmMgYWNxdWlyZUluZ3JlZGllbnRzKGNoYW5jZTpudW1iZXIsIG1pbjpudW1iZXIsIG1heDpudW1iZXIpIHtcclxuXHRcdGxldCBlYXJuZWRJbmdyZWRpZW50VG9TaG93ID0gW107XHJcblx0XHRpZiAoTWF0aC5yYW5kb20oKSA8IGNoYW5jZSkge1xyXG5cdFx0XHRjb25zdCByYW5kb21BbW91bnQgPSB0aGlzLmdldFJhbmRvbUludChtaW4sbWF4KTtcclxuXHRcdFx0Zm9yIChsZXQgaT0xO2k8PXJhbmRvbUFtb3VudDtpKyspe1xyXG5cdFx0XHRcdGNvbnN0IHJhbmRvbUluZ3JlZGllbnRJbmRleCA9IHRoaXMuZ2V0UmFuZG9tSW50KDAsIGxpc3RPZlVzZWFibGVJbmdyZWRpZW50c1RvQmVTaG93bi5sZW5ndGgtMSk7XHJcblx0XHRcdFx0Y29uc3QgZWFybmVkSW5ncmVkaWVudCA9IGVsZW1lbnRzW3JhbmRvbUluZ3JlZGllbnRJbmRleF07XHJcblx0XHRcdFx0bGV0IGVsZW1lbnRDb3VudCA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcihlYXJuZWRJbmdyZWRpZW50LnZhck5hbWUpO1xyXG5cdFx0XHRcdGVhcm5lZEluZ3JlZGllbnRUb1Nob3cucHVzaChlYXJuZWRJbmdyZWRpZW50Lm5hbWUpO1xyXG5cclxuXHRcdFx0XHQvLyBQZXJmb3JtIGEgbnVsbCBjaGVja1xyXG5cdFx0XHRcdGlmIChlbGVtZW50Q291bnQgIT09IG51bGwgJiYgdHlwZW9mIGVsZW1lbnRDb3VudCA9PT0gJ251bWJlcicpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcihlYXJuZWRJbmdyZWRpZW50LnZhck5hbWUsIGVsZW1lbnRDb3VudCArIDEpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBJbnZhbGlkIGVsZW1lbnQgY291bnQgZm9yICR7ZWFybmVkSW5ncmVkaWVudC52YXJOYW1lfWApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgWW91IGVhcm5lZDogJHtjb25jYXRlbmF0ZVN0cmluZ3MoZWFybmVkSW5ncmVkaWVudFRvU2hvdyl9YCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSBlYXJuZWQgJHtjb25jYXRlbmF0ZVN0cmluZ3MoZWFybmVkSW5ncmVkaWVudFRvU2hvdyl9YCwzMDAwKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1lvdSBkaWQgbm90IGVhcm4gYW4gaW5ncmVkaWVudCB0aGlzIHRpbWUuJyk7XHJcblx0XHR9XHJcblx0XHRcclxuXHR9XHJcblx0XHJcblx0XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vY29uc3Qgb3JpZ2luYWxEYXRhID0gJzIwMjMtMDgtMTUgMjA6MDA6MDAnO1xyXG4vL2NvbnN0IGVuY3J5cHRlZERhdGEgPSBlbmNyeXB0U3RyaW5nKG9yaWdpbmFsRGF0YSk7XHJcblxyXG4vLyBTYXZlIGBlbmNyeXB0ZWREYXRhYCBpbiB5b3VyIHNldHRpbmdzXHJcblxyXG4vLyBMYXRlciwgd2hlbiB5b3UgcmV0cmlldmUgdGhlIGRhdGFcclxuLy9jb25zdCBkZWNyeXB0ZWREYXRhID0gZGVjcnlwdFNydGluZyhlbmNyeXB0ZWREYXRhKTtcclxuXHJcbi8vIFVzZSBgZGVjcnlwdGVkRGF0YWAgaW4geW91ciBwbHVnaW5cclxuXHJcblxyXG5mdW5jdGlvbiBjb25jYXRlbmF0ZVN0cmluZ3MoYXJyOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBhcnJbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeU1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG5cclxuICAgICAgICBhcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGZyZXF1ZW5jeU1hcFtpdGVtXSkge1xyXG4gICAgICAgICAgICAgICAgZnJlcXVlbmN5TWFwW2l0ZW1dKys7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmcmVxdWVuY3lNYXBbaXRlbV0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdEFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmcmVxdWVuY3lNYXApKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0QXJyYXkucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0QXJyYXkucHVzaChgJHt2YWx1ZX0geCAke2tleX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5LmpvaW4oJywgJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKGJvb3N0ZXJWYXJOYW1lOiBzdHJpbmcpIHtcclxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdGlmIChlbGVtZW50LnZhcm5hbWUgPT09IGJvb3N0ZXJWYXJOYW1lKSB7XHJcblx0XHRcdHJldHVybiBlbGVtZW50LmJvb3N0ZXJSdW5UaW1lIGFzIG51bWJlcjtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIDA7IC8vIFJldHVybiBudWxsIGlmIG5vIG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmRcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc01pbnV0ZXNQYXNzZWQoaW5wdXREYXRlOiBNb21lbnQsIG1pbnV0ZXNQYXNzZWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbWludXRlc0FnbyA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdChtaW51dGVzUGFzc2VkLCAnbWludXRlcycpOyAvLyBDYWxjdWxhdGUgdGltZSAnbWludXRlc1Bhc3NlZCcgbWludXRlcyBhZ29cclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZU9yQmVmb3JlKG1pbnV0ZXNBZ28pO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhvdXJzVW50aWxNaW51dGVzUGFzc2VkKGlucHV0RGF0ZTogTW9tZW50LCBtaW51dGVzVG9QYXNzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lXHJcbiAgICBjb25zdCB0YXJnZXRUaW1lID0gaW5wdXREYXRlLmNsb25lKCkuYWRkKG1pbnV0ZXNUb1Bhc3MsICdtaW51dGVzJyk7IC8vIENhbGN1bGF0ZSB0aGUgdGFyZ2V0IHRpbWVcclxuXHJcbiAgICBpZiAodGFyZ2V0VGltZS5pc0FmdGVyKGN1cnJlbnRUaW1lKSkge1xyXG4gICAgICAgIGNvbnN0IGhvdXJzUmVtYWluaW5nID0gdGFyZ2V0VGltZS5kaWZmKGN1cnJlbnRUaW1lLCAnaG91cnMnKTtcclxuICAgICAgICByZXR1cm4gaG91cnNSZW1haW5pbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcclxuaW1wb3J0IHR5cGUge01vbWVudElucHV0fSBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBlbmNyeXB0VmFsdWUsIGVuY3J5cHRTdHJpbmcsIGRlY3J5cHRTdHJpbmcsIGVuY3J5cHROdW1iZXIsIGRlY3J5cHROdW1iZXIsIGVuY3J5cHRCb29sZWFuLCBkZWNyeXB0Qm9vbGVhbiB9IGZyb20gJ2VuY3J5cHRpb24nO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xyXG4gIGVuYWJsZUluaXRDb21tYW5kOiBcIlUyRnNkR1ZrWDErN2xXZS9oOTV1cXpnbDI3SkJHVzJpa2k3c0J3azQ0WVE9XCIsXHJcbiAgYmluZEVudGVyOiBcIlUyRnNkR1ZrWDE4UnpHa3lMRWFUU25ZdWdsVDlsZmhqdnNpMW1tSThCTG89XCIsXHJcbiAgYmluZFRhYjogXCJVMkZzZEdWa1gxOGh2cU1vaGxrT2xRV1JyRFh0aE5oMFk2aUlVMzErZmdNPVwiLFxyXG4gIGF2YXRhclBhZ2VOYW1lOiBcIlUyRnNkR1ZrWDE5dHg3SE9oRmUvL2pGWnlUN004aVAvNTd5VksxMDhRUzZqeWpIU1VlNm1jNVdxenB0MnZkaVFcIixcclxuICB0YWdzRXhjbHVkZTogXCJVMkZzZEdWa1gxLzFERExUcStlbVlTd01ZZFRkTGZadEZNRXkrdisybFRNPVwiLFxyXG4gIGZvbGRlckV4Y2x1ZGU6IFwiVTJGc2RHVmtYMThoNDUxT1NpRHR6V2Npc2V1WGJyMWFpb2Q1MkQvWnRodz1cIixcclxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogXCJVMkZzZEdWa1gxOENZN294dHlJUEY3QmUwcStEc3FoNHVGNDJDWjliK3N3PVwiLFxyXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBcIlUyRnNkR1ZrWDErSmR3U2NyTVVlbHQxYXkyWDJnS20rcGp3aklmb2VRVlU9XCIsXHJcbiAgbnVtQWxsRmlsZXM6IFwiVTJGc2RHVmtYMTkrK3BlaWQ4VXVFb1VhUkJ1Vlo1N29ObG15QlJEWGd5UT1cIixcclxuICBudW1BbGxGaWxlc0NvdW50OiBcIlUyRnNkR1ZrWDE5N052QTEvKytEcVROR2RCZW56cUtreG9sYjgyWGxIVUU9XCIsXHJcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogXCJVMkZzZEdWa1gxK2l1Snp5S0pNbndZcUpra0REL3FNTU9oZkY2Z0lUMHI0PVwiLFxyXG4gIHN0YXR1c1BvaW50czogXCJVMkZzZEdWa1gxOXExYUFXMW1idTA3U0xlY3g0aGhMb0d1VTJ4c09ZTFFvPVwiLFxyXG4gIHN0YXR1c0xldmVsOiBcIlUyRnNkR1ZrWDErbXJXOS8reG1LRVNMa3NOL1U4c3V1YTZ3aEhjb21wbWM9XCIsXHJcbiAgeHBGb3JOZXh0TGV2ZWw6IFwiVTJGc2RHVmtYMTk4STRqK1pKSFl2VzM5U0xHOGY5cnRRRUxZSVRaK2p3MD1cIixcclxuICBnYW1pZmljYXRpb25TdGFydERhdGU6IFwiVTJGc2RHVmtYMS9pUVNsRFp6ZUlTYTJyVXp3YnVlWmhMODhianJ3d3FnQT1cIixcclxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogXCJVMkZzZEdWa1gxK2U2UVhVOFkxalhmZTBGbmJrdm5IaDFiVnZpMUE1ZXVJPVwiLFxyXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogXCJVMkZzZEdWa1gxL2dxOEtsWDk1V2E0Tjl3SWRkcms4NTVLQ2RUcHJDR0xNPVwiLFxyXG4gIGRlYnVnOiBcIlUyRnNkR1ZrWDErVGhSS2R2NVVuWHRlTldsbDIxZXhpRWo1YlZ3K1pxMGc9XCIsXHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBcIlUyRnNkR1ZrWDEvaEFqMVpaOVZLMG5GbEpoK20vcjhCM0xyZzJ0UW9QaTQ9XCIsXHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBcIlUyRnNkR1ZrWDE5NXYzM0VoVFF2b1F0UjIveGZiQzJJYWcyTHkxVUZTajg9XCIsXHJcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogXCJVMkZzZEdWa1gxL01ZZmkwcjBCdG4ySjdQbWRRY1dvZEphd0MvdVpBVVNRPVwiLFxyXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IFwiVTJGc2RHVmtYMThPWDUzME9QT2FVUmcvYnY4eHJNMTdoRTBZNjY0MWUzMD1cIixcclxuICBuZXh1c05vZGU6IFwiVTJGc2RHVmtYMSs1K3dnNk9qT3hCVXZFZTV3L1NVMGdydkNMSXNoVS85cz1cIixcclxuICBjb25uZWN0aW9uQ3J5c3RhbDogXCJVMkZzZEdWa1gxOVNGbXJRcG1ISndBZWlCL3cxelV3bU4zbk92ZmJmczhjPVwiLFxyXG4gIG1hc3RlcnlTY3JvbGw6IFwiVTJGc2RHVmtYMThLdzBycDNiL25rSU5OTjNTcHF2d2VKVkUvckFUQ0h0TT1cIixcclxuICBpbnNpZ2h0UHJpc206IFwiVTJGc2RHVmtYMSsrSFovMmhHSCs2TjJ0cm9xNlFMZVVlRU1PMjZ0QWNmST1cIixcclxuICByZWZsZWN0aXZlRXNzZW5jZTogXCJVMkZzZEdWa1gxOVo3RjJHaDhiWlh2RGQ3TjE4bDF3K0hiY0prMGdmV0EwPVwiLFxyXG4gIGFtcGxpZmljYXRpb25DcnlzdGFsOiBcIlUyRnNkR1ZrWDE4eU1pZHVnOXpBOUFXRW1ITUdnOUFaZ2VJN2VaK0FYZWs9XCIsXHJcbiAgY3JlYXRpdmVDYXRhbHlzdDogXCJVMkZzZEdWa1gxOVZ0QmhSeXg2cFYvSmJFa0lubXBnY1djMTRLQW5SUURZPVwiLFxyXG4gIHByZWNpc2lvbkxlbnM6IFwiVTJGc2RHVmtYMThzTnNYRmd5cUZVb0NXc2tmeU5COFBJREdhTFdMbG9OQT1cIixcclxuICB0ZW1wb3JhbFR3ZWFrZXI6IFwiVTJGc2RHVmtYMTlnRVprTUdyQzlXZkRYUUoxZFhCVHBHVlY3RnNncUw2Yz1cIixcclxuICBwZXJwZXR1YWxQcm9ncmVzczogXCJVMkZzZEdWa1gxKzNHL29WTnZpSEpGUnFGTUI0QnNQT0NRNElkcmYvMTdJPVwiLFxyXG4gIHN0cmF0ZWdpY1N5bmFwc2VzOiBcIlUyRnNkR1ZrWDEvQnJGSWVwdkJFV0hEekd5VHo1WXNMT00yWVZyZXdINGM9XCIsXHJcbiAgYWNjZWxlcmF0ZWRBY3F1aXNpdGlvbjogXCJVMkZzZEdWa1gxOVpoN2xoSW51THBWZm1UeUVray82N3JYSjNRQ2lJTjBnPVwiLFxyXG4gIGxpbmtlcnNMb2RlOiBcIlUyRnNkR1ZrWDE5eGFZMkdEMHNxU01NZjlZZDdib2NiS2hJMTB4aDVtRTg9XCIsXHJcbiAgZWZmb3J0bGVzc0V4cGFuc2lvbjogXCJVMkZzZEdWa1gxK3FYRW4rVXhIc3M0STE0SWpoaUFMR1dQUmJMa1ZkalFRPVwiLFxyXG4gIHJlY3Vyc2l2ZVJlZmxlY3Rpb246IFwiVTJGc2RHVmtYMS9HbXQwWkZJVjFkYmdFVmhWMVpXZ1lVRDZ5Mm55blg3bz1cIixcclxuICBzeW5hcHRpY1N1cmdlOiBcIlUyRnNkR1ZrWDE4K29vV1hGOXBhVFBUS09GeVIyWDRHOU1BNGxVK2xZYkk9XCIsXHJcbiAgaW5zcGlyYXRpb25JbmZ1c2lvbjogXCJVMkZzZEdWa1gxOG56N0VUcjZ5U0hpTzBabUVCL1dyYXpnTmlsUG5sS2tRPVwiLFxyXG4gIHRpdGxlVGl0YW46IFwiVTJGc2RHVmtYMS9JTWtEY21jOEEyMFV2OWlmcHBZSDV0eVZLT2FNYWdFWT1cIixcclxuICBwcmVjaXNpb25QcmlzbTogXCJVMkZzZEdWa1gxKzcyWXdUL1hkUXpicE9Md0E5bHRKWThhKzNHV0IrSWtRPVwiLFxyXG4gIGh5cGVybGlua0hhcm1vbnk6IFwiVTJGc2RHVmtYMTkxbFlkM2thZUxPS2RXVG85R2xsREwyNXROMzZ6UFl4RT1cIixcclxuICBlcGhlbWVyYWxFdXBob3JpYTogXCJVMkZzZEdWa1gxK2lqTnB1dEhxSFc1Z0swZnJmbXN3R3g3RVVkYUh4am5rPVwiLFxyXG4gIGZvcnR1bmVJbmZ1c2lvbjogXCJVMkZzZEdWa1gxK2lqTnB1dEhxSFc1Z0swZnJmbXN3R3g3RVVkYUh4am5rPVwiLFxyXG4gIGJvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzczogXCJVMkZzZEdWa1gxOS9Gc3MyWCtoZCt3NlptSTV5TkpjdVVXQStJbXJPR21nPVwiLFxyXG4gIGJvb3N0ZXJEYXRlUGVycGV0dWFsUHJvZ3Jlc3M6IFwiVTJGc2RHVmtYMStSUWx0T01MeDlheGFZTG1xeUdFVTlxMkVKNmFGa1J5dm5DV1RTaE1MR2h5Rm1ZelQzNUJhWVwiLFxyXG4gIGJvb3N0ZXJGYWN0b3JTdHJhdGVnaWNTeW5hcHNlczogXCJVMkZzZEdWa1gxODU3NW1HSVZTakdrL3FKcG9zSXJmUlV5K3YvQ3M4ZEswPVwiLFxyXG4gIGJvb3N0ZXJEYXRlU3RyYXRlZ2ljU3luYXBzZXM6IFwiVTJGc2RHVmtYMS9UOVUweUI1ajZpYkdBdlY4UktyY3JqWnJLdHlnS2dyaGh5L3NQbWtSemowTEhVMEZ6cWhER1wiLFxyXG4gIGJvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZTogXCJVMkZzZEdWa1gxL0pEVVVVb1RGcHVEaTU0OGYyTnc4TUora0Z3RDdsSzlzPVwiLFxyXG4gIGJvb3N0ZXJEYXRlTGlua2Vyc0xvZGU6IFwiVTJGc2RHVmtYMSsxallPQ2hJZnpHZ3RKOCtDWUNONDFRbnJ1anEvdG1lQnBVVnJaSS9YWCtJenVoYzdTV0NKd1wiLFxyXG4gIGJvb3N0ZXJGYWN0b3JSZWN1cnNpdmVSZWZsZWN0aW9uOiBcIlUyRnNkR1ZrWDErdFJqalI4QUkvNkQwRWF1TXVBOXZSWjJtaGp4ZHlSSDQ9XCIsXHJcbiAgYm9vc3RlckRhdGVSZWN1cnNpdmVSZWZsZWN0aW9uOiBcIlUyRnNkR1ZrWDErbnRDQWxsS0U3dW1sWXBmTGdpNkt0UkIxTzlpSXV0VTJNUElEcUhmbmg2YngvcTlLWXRmZjdcIixcclxuICBib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZTogXCJVMkZzZEdWa1gxOUliY2FROTdUMlRHTmRGcjFmdHZxOSs2Z2x0YWh2YzVRPVwiLFxyXG4gIGJvb3N0ZXJEYXRlU3luYXB0aWNTdXJnZTogXCJVMkZzZEdWa1gxOElQSzJoVXFUOThwcWhqbGU0dWJBN25KbGdKOVpoSy9yOE45eHpqZTNveU1jTkN3NE9HTDlGXCIsXHJcbiAgYm9vc3RlckZhY3RvclRpdGxlVGl0YW46IFwiVTJGc2RHVmtYMThHd3pnaFRRWlNZMFp1ZHFXQndDTUlrM09NVDdjaHNMTT1cIixcclxuICBib29zdGVyRGF0ZVRpdGxlVGl0YW46IFwiVTJGc2RHVmtYMTlKSnlJWVlyYUdkRWZiSzZDR2FHVUw5VHRsSDhienBKNW1MSytXcjFwZ2ZRcXZXQ0JCTEpWb1wiLFxyXG4gIGJvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbTogXCJVMkZzZEdWa1gxK05NVjgwcm03R0E1M0M2d2hsd0tkU3hDQWlObWJlRUNzPVwiLFxyXG4gIGJvb3N0ZXJEYXRlUHJlY2lzaW9uUHJpc206IFwiVTJGc2RHVmtYMThPd1RCYldxTExGUEU0Q3dXQUZIYmpBMDUwRXpBYS9PNzdwSDBSQ1hoVlh5dmZRVU4wZitZaVwiLFxyXG4gIGJvb3N0ZXJGYWN0b3JIeXBlcmxpbmtIYXJtb255OiBcIlUyRnNkR1ZrWDEvRzkrQTlKSXBxcHFCYkdEQ3poSVREemJEOVZVMzBnT1E9XCIsXHJcbiAgYm9vc3RlckRhdGVIeXBlcmxpbmtIYXJtb255OiBcIlUyRnNkR1ZrWDErcVVuejZMTis5dzhnRHZwVlBQT21neTNCTkFPYS9tbTFPd2pVYVZYMDVMcW9yTzJ3clhMaG9cIixcclxuICBib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWE6IFwiVTJGc2RHVmtYMStweE0rVlVSd1RBajhlQUFHT3NiMkVSdWgxTGg3WkxuRT1cIixcclxuICBib29zdGVyRGF0ZUVwaGVtZXJhbEV1cGhvcmlhOiBcIlUyRnNkR1ZrWDE5cEpwdzJhM2YwU3ZmcGpmVVM3ejlNbFBBdXFBU3dRRkpCTGpXanlIVWo1cVlHZk42cmIvU1lcIixcclxuICBib29zdGVyRmFjdG9yRm9ydHVuZUluZnVzaW9uOiBcIlUyRnNkR1ZrWDErcHhNK1ZVUndUQWo4ZUFBR09zYjJFUnVoMUxoN1pMbkU9XCIsXHJcbiAgYm9vc3RlckRhdGVGb3J0dW5lSW5mdXNpb246IFwiVTJGc2RHVmtYMTlwSnB3MmEzZjBTdmZwamZVUzd6OU1sUEF1cUFTd1FGSkJMaldqeUhVajVxWUdmTjZyYi9TWVwiLFxyXG4gIHN0cmVha2Jvb3N0ZXI6IFwiVTJGc2RHVmtYMS9sVTh6MTI2OUdDaC9lQWJYY212TWVJOE15Zkw3bnpFST1cIixcclxuICBzdHJlYWtib29zdGVyRGF0ZTogXCJVMkZzZEdWa1gxK0RCVUJtcnpYdVNpWmxScDFqTzkvVUp2OHNUVGZlU05JPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudDogXCJVMkZzZEdWa1gxL1ZXbW5pdWhYUjZGQXg2UFRCZTlOUyt0Q3Y5WGJLMzJRPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFRlbXBvcmFsVHdlYWtlcjogXCJVMkZzZEdWa1gxL3IySmplUWlXSkFyejAzRW4zV1pPMk1lY0paNEtBL1U4PVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFBlcnBldHVhbFByb2dyZXNzOiBcIlUyRnNkR1ZrWDE5bVNRZVUzU2pXaHdLVVY4R1NMSENOdWRmMFZhK2svZk09XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50U3RyYXRlZ2ljU3luYXBzZXM6IFwiVTJGc2RHVmtYMStVVno5ZXZ2eSs5VkpiZnVmQnk1TXYwMEE5T1dHbzNNOD1cIixcclxuICBib29zdGVyVXNlQ291bnRBY2NlbGVyYXRlZEFjcXVpc2l0aW9uOiBcIlUyRnNkR1ZrWDErNklOSjF1cFhreUFwVTJ0MG9VWDZHbTMzeVN0WFRzR009XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50TGlua2Vyc0xvZGU6IFwiVTJGc2RHVmtYMS9QcUtrTGdXYitxU20rTUVZU2NLYU45ZGMvMk8xTklBND1cIixcclxuICBib29zdGVyVXNlQ291bnRFZmZvcnRsZXNzRXhwYW5zaW9uOiBcIlUyRnNkR1ZrWDE4dFoxVU1zTmV2Z3AxNWRvU2JETmdiMWlCVlBDc29qbWs9XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50ckVjdXJzaXZlUmVmbGVjdGlvbjogXCJVMkZzZEdWa1gxL2NSTU5mMHhkOTJkZGt5RWlrY2ZaVDgwS3BTVjJyZVhvPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFN5bmFwdGljU3VyZ2U6IFwiVTJGc2RHVmtYMTlhVXR6OHdHcFNwdUs2UFYxcmxKcUE5NDdTQ2dHcnJuWT1cIixcclxuICBib29zdGVyVXNlQ291bnRJbnNwaXJhdGlvbkluZnVzaW9uOiBcIlUyRnNkR1ZrWDEvMUZpZlI2Nzh3a3RzV0NJQU9hdXpPTjloVnFNZUdpZWs9XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50VGl0bGVUaXRhbjogXCJVMkZzZEdWa1gxOEo5dVRKMjVaVmFxbkVNc1ovRG4xVVF6TjdETXZOMHVnPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFByZWNpc2lvblByaXNtOiBcIlUyRnNkR1ZrWDE4L2tuY3VTRzRrbEZaNkxwREhrcDgwd21wMlUwa25ycjQ9XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50SHlwZXJsaW5rSGFybW9ueTogXCJVMkZzZEdWa1gxK1I0ZlUvb0RJZGIzNGtDSWVkeGM0MTY1UFgzb09uQ0xjPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudEVwaGVtZXJhbEV1cGhvcmlhOiBcIlUyRnNkR1ZrWDE5MWhKQU5ZcjhKSEkxYm4xWVJySmZCaDBjUTB2Z2tLUk09XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50Rm9ydHVuZUluZnVzaW9uOiBcIlUyRnNkR1ZrWDE5MWhKQU5ZcjhKSEkxYm4xWVJySmZCaDBjUTB2Z2tLUk09XCIsXHJcbiAgY291bnRlck1hanVyaXR5Q2FsYzogXCJVMkZzZEdWa1gxOVRMbmRvbkdZNFk4dkh1WkZmTEo1Z1oydC9DTHByaDBvPVwiLFxyXG4gIGNvdW50ZXJNYWp1cml0eUNhbGNJbml0aWFsOiBcIlUyRnNkR1ZrWDErMlFpaThxaEZTcXJOcW1LUjFXaDZzYUVqWWJ3UGRpOFE9XCIsXHJcbiAgZGVsYXlMb2FkVGltZTogXCJVMkZzZEdWa1gxOVRMbmRvbkdZNFk4dkh1WkZmTEo1Z1oydC9DTHByaDBvPVwiXHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNTZXR0aW5ncyB7XHJcbiAgW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2V0dGluZ3MgZXh0ZW5kcyBEeW5hbWljU2V0dGluZ3N7XHJcbiAgZW5hYmxlSW5pdENvbW1hbmQ6IHN0cmluZztcclxuICBiaW5kRW50ZXI6IHN0cmluZztcclxuICBiaW5kVGFiOiBzdHJpbmc7XHJcbiAgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcclxuICB0YWdzRXhjbHVkZTogc3RyaW5nO1xyXG4gIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcclxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xyXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBzdHJpbmc7XHJcbiAgbnVtQWxsRmlsZXM6IHN0cmluZztcclxuICBudW1BbGxGaWxlc0NvdW50OiBzdHJpbmc7XHJcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogc3RyaW5nO1xyXG4gIHN0YXR1c1BvaW50czogc3RyaW5nO1xyXG4gIHN0YXR1c0xldmVsOiBzdHJpbmc7XHJcbiAgeHBGb3JOZXh0TGV2ZWw6IHN0cmluZztcclxuICBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcclxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogc3RyaW5nO1xyXG4gIGJhZGdlQm9vc3RlckZhY3Rvcjogc3RyaW5nO1xyXG4gIGRlYnVnOiBzdHJpbmc7XHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBzdHJpbmc7XHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XHJcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogc3RyaW5nO1xyXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcclxuICBzdHJlYWtib29zdGVyOiBzdHJpbmc7XHJcbiAgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcclxuICBuZXh1c05vZGU6IHN0cmluZztcclxuICBjb25uZWN0aW9uQ3J5c3RhbDogc3RyaW5nO1xyXG4gIG1hc3RlcnlTY3JvbGw6IHN0cmluZztcclxuICBpbnNpZ2h0UHJpc206IHN0cmluZztcclxuICByZWZsZWN0aXZlRXNzZW5jZTogc3RyaW5nO1xyXG4gIGFtcGxpZmljYXRpb25DcnlzdGFsOiBzdHJpbmc7XHJcbiAgY3JlYXRpdmVDYXRhbHlzdDogc3RyaW5nO1xyXG4gIHByZWNpc2lvbkxlbnM6IHN0cmluZztcclxuICB0ZW1wb3JhbFR3ZWFrZXI6IHN0cmluZztcclxuICBwZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nO1xyXG4gIHN0cmF0ZWdpY1N5bmFwc2VzOiBzdHJpbmc7XHJcbiAgYWNjZWxlcmF0ZWRBY3F1aXNpdGlvbjogc3RyaW5nO1xyXG4gIGxpbmtlcnNMb2RlOiBzdHJpbmc7XHJcbiAgZWZmb3J0bGVzc0V4cGFuc2lvbjogc3RyaW5nO1xyXG4gIHJlY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZztcclxuICBzeW5hcHRpY1N1cmdlOiBzdHJpbmc7XHJcbiAgaW5zcGlyYXRpb25JbmZ1c2lvbjogc3RyaW5nO1xyXG4gIHRpdGxlVGl0YW46IHN0cmluZztcclxuICBwcmVjaXNpb25QcmlzbTogc3RyaW5nO1xyXG4gIGh5cGVybGlua0hhcm1vbnk6IHN0cmluZztcclxuICBlcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlUGVycGV0dWFsUHJvZ3Jlc3M6IHN0cmluZ1xyXG4gIGJvb3N0ZXJGYWN0b3JTdHJhdGVnaWNTeW5hcHNlczogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlU3RyYXRlZ2ljU3luYXBzZXM6IHN0cmluZztcclxuICBib29zdGVyRmFjdG9yTGlua2Vyc0xvZGU6IHN0cmluZztcclxuICBib29zdGVyRGF0ZUxpbmtlcnNMb2RlOiBzdHJpbmc7XHJcbiAgYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZztcclxuICBib29zdGVyRGF0ZVJlY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZztcclxuICBib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlU3luYXB0aWNTdXJnZTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuOiBzdHJpbmc7XHJcbiAgYm9vc3RlckRhdGVUaXRsZVRpdGFuOiBzdHJpbmdcclxuICBib29zdGVyRmFjdG9yUHJlY2lzaW9uUHJpc206IHN0cmluZztcclxuICBib29zdGVyRGF0ZVByZWNpc2lvblByaXNtOiBzdHJpbmdcclxuICBib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlSHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJGYWN0b3JFcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlRXBoZW1lcmFsRXVwaG9yaWE6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnQ6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRUZW1wb3JhbFR3ZWFrZXI6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRQZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudFN0cmF0ZWdpY1N5bmFwc2VzOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50QWNjZWxlcmF0ZWRBY3F1aXNpdGlvbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudExpbmtlcnNMb2RlOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50RWZmb3J0bGVzc0V4cGFuc2lvbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudHJFY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRTeW5hcHRpY1N1cmdlOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50SW5zcGlyYXRpb25JbmZ1c2lvbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudFRpdGxlVGl0YW46IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRQcmVjaXNpb25QcmlzbTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudEh5cGVybGlua0hhcm1vbnk6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRFcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIGNvdW50ZXJNYWp1cml0eUNhbGM6IHN0cmluZztcclxuICBjb3VudGVyTWFqdXJpdHlDYWxjSW5pdGlhbDogc3RyaW5nO1xyXG4gIGRlbGF5TG9hZFRpbWU6IHN0cmluZ1xyXG4gIC8vW2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IE1vbWVudElucHV0O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWlmaWNhdGlvblBsdWdpblNldHRpbmdzIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBwbHVnaW46IGdhbWlmaWNhdGlvbjtcclxuICBwdWJsaWMgc2V0dGluZ3M6IElTZXR0aW5ncztcclxuICBwdWJsaWMgZW5hYmxlSW5pdENvbW1hbmQ6IHN0cmluZztcclxuICBwdWJsaWMgYmluZEVudGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGJpbmRUYWI6IHN0cmluZztcclxuICBwdWJsaWMgYXZhdGFyUGFnZU5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgdGFnc0V4Y2x1ZGU6IHN0cmluZztcclxuICBwdWJsaWMgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMjogc3RyaW5nO1xyXG4gIHB1YmxpYyBwcm9ncmVzc2l2ZVN1bUxheWVyMzogc3RyaW5nO1xyXG4gIHB1YmxpYyBudW1BbGxGaWxlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBudW1BbGxGaWxlc0NvdW50OiBzdHJpbmc7XHJcbiAgcHVibGljIGNoYXJ0UmVkdXppZXJ1bmdNb25hdGU6IHN0cmluZztcclxuICBwdWJsaWMgc3RhdHVzUG9pbnRzOiBzdHJpbmc7XHJcbiAgcHVibGljIHN0YXR1c0xldmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHhwRm9yTmV4dExldmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJTdGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYWRnZUJvb3N0ZXJGYWN0b3I6IHN0cmluZztcclxuICBwdWJsaWMgZGVidWc6IHN0cmluZztcclxuICBwdWJsaWMgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBzdHJpbmc7XHJcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBzdHJpbmc7XHJcbiAgcHVibGljIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcclxuICBwdWJsaWMgc3RyZWFrYm9vc3Rlcjogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBuZXh1c05vZGU6IHN0cmluZztcclxuICBwdWJsaWMgY29ubmVjdGlvbkNyeXN0YWw6IHN0cmluZztcclxuICBwdWJsaWMgbWFzdGVyeVNjcm9sbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpbnNpZ2h0UHJpc206IHN0cmluZztcclxuICBwdWJsaWMgcmVmbGVjdGl2ZUVzc2VuY2U6IHN0cmluZztcclxuICBwdWJsaWMgYW1wbGlmaWNhdGlvbkNyeXN0YWw6IHN0cmluZztcclxuICBwdWJsaWMgY3JlYXRpdmVDYXRhbHlzdDogc3RyaW5nO1xyXG4gIHB1YmxpYyBwcmVjaXNpb25MZW5zOiBzdHJpbmc7XHJcbiAgcHVibGljIHRlbXBvcmFsVHdlYWtlcjogc3RyaW5nO1xyXG4gIHB1YmxpYyBwZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHJhdGVnaWNTeW5hcHNlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBhY2NlbGVyYXRlZEFjcXVpc2l0aW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIGxpbmtlcnNMb2RlOiBzdHJpbmc7XHJcbiAgcHVibGljIGVmZm9ydGxlc3NFeHBhbnNpb246IHN0cmluZztcclxuICBwdWJsaWMgcmVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBzeW5hcHRpY1N1cmdlOiBzdHJpbmc7XHJcbiAgcHVibGljIGluc3BpcmF0aW9uSW5mdXNpb246IHN0cmluZztcclxuICBwdWJsaWMgdGl0bGVUaXRhbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBwcmVjaXNpb25QcmlzbTogc3RyaW5nO1xyXG4gIHB1YmxpYyBoeXBlcmxpbmtIYXJtb255OiBzdHJpbmc7XHJcbiAgcHVibGljIGVwaGVtZXJhbEV1cGhvcmlhOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZVBlcnBldHVhbFByb2dyZXNzOiBzdHJpbmdcclxuICBwdWJsaWMgYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJEYXRlU3RyYXRlZ2ljU3luYXBzZXM6IHN0cmluZ1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yTGlua2Vyc0xvZGU6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlckRhdGVMaW5rZXJzTG9kZTogc3RyaW5nXHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JSZWN1cnNpdmVSZWZsZWN0aW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJEYXRlUmVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nXHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJEYXRlU3luYXB0aWNTdXJnZTogc3RyaW5nXHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJEYXRlVGl0bGVUaXRhbjogc3RyaW5nXHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZVByZWNpc2lvblByaXNtOiBzdHJpbmdcclxuICBwdWJsaWMgYm9vc3RlckZhY3Rvckh5cGVybGlua0hhcm1vbnk6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlckRhdGVIeXBlcmxpbmtIYXJtb255OiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JFcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZUVwaGVtZXJhbEV1cGhvcmlhOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudDogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRUZW1wb3JhbFR3ZWFrZXI6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50UGVycGV0dWFsUHJvZ3Jlc3M6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50U3RyYXRlZ2ljU3luYXBzZXM6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50QWNjZWxlcmF0ZWRBY3F1aXNpdGlvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRMaW5rZXJzTG9kZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRFZmZvcnRsZXNzRXhwYW5zaW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudHJFY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50U3luYXB0aWNTdXJnZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRJbnNwaXJhdGlvbkluZnVzaW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudFRpdGxlVGl0YW46IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50UHJlY2lzaW9uUHJpc206IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50SHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRFcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBjb3VudGVyTWFqdXJpdHlDYWxjOiBzdHJpbmc7XHJcbiAgcHVibGljIGNvdW50ZXJNYWp1cml0eUNhbGNJbml0aWFsOiBzdHJpbmc7XHJcbiAgcHVibGljIGRlbGF5TG9hZFRpbWU6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogZ2FtaWZpY2F0aW9uKSB7XHJcblx0ICBzdXBlcihhcHAsIHBsdWdpbik7XHJcblx0ICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuXHJcbiAgICBsZXQgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MpO1xyXG5cclxuICAgIC8qXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzZXR0aW5ncykge1xyXG4gICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGlmKHR5cGVvZiBrZXkgPT09ICdudW1iZXInKXtcclxuICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBlbmNyeXB0TnVtYmVyKHNldHRpbmdzW2tleV0gYXMgbnVtYmVyKVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpe1xyXG4gICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IGVuY3J5cHRTdHJpbmcoc2V0dGluZ3Nba2V5XSBhcyBzdHJpbmcpXHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ID09PSAnYm9vbGVhbicpe1xyXG4gICAgICAgICAgc2V0dGluZ3Nba2V5XSA9IGVuY3J5cHRCb29sZWFuKHNldHRpbmdzW2tleV0gYXMgYm9vbGVhbilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuKi9cclxuICAgIC8vIFNhdmUgYHNldHRpbmdzYCB3aXRoIGVuY3J5cHRlZCB2YWx1ZXMgdG8geW91ciBzdG9yYWdlXHJcblxyXG5cdH1cclxuICBcclxuXHRwdWJsaWMgZGlzcGxheSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XHJcblx0XHRjb250YWluZXJFbC5hZGRDbGFzcyhcImV4Y2FsaWRyYXctc2V0dGluZ3NcIik7XHJcblx0XHR0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblxyXG5cdFx0Y29uc3QgY29mZmVlRGl2ID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KFwiY29mZmVlXCIpO1xyXG5cdFx0Y29mZmVlRGl2LmFkZENsYXNzKFwiZXgtY29mZmVlLWRpdlwiKTtcclxuXHRcdGNvbnN0IGNvZmZlZUxpbmsgPSBjb2ZmZWVEaXYuY3JlYXRlRWwoXCJhXCIsIHtcclxuXHRcdGhyZWY6IFwiaHR0cHM6Ly9rby1maS5jb20vYW5kcmVhc3RyZWJpbmdcIixcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgY29mZmVlSW1nID0gY29mZmVlTGluay5jcmVhdGVFbChcImltZ1wiLCB7XHJcblx0XHRhdHRyOiB7XHJcblx0XHRcdHNyYzogXCJodHRwczovL2Nkbi5rby1maS5jb20vY2RuL2tvZmkzLnBuZz92PTNcIixcclxuXHRcdH0sXHJcblx0XHR9KTtcclxuXHRcdGNvZmZlZUltZy5oZWlnaHQgPSA0NTtcclxuXHJcblx0XHQvL2NvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XHJcblx0XHQvL2NvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgXHJcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdHYW1pZnkgeW91ciBQS00gLSBTZXR0aW5ncycgfSk7XHJcblx0XHRjb25zb2xlLmxvZygnc2V0dGluZ3MgY2FsbGVkJylcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnI3RhZ3MgdG8gaWdub3JlJylcclxuXHRcdFx0LnNldERlc2MoJ2VudGVyIHRhZ3Mgd2l0aG91dCAjIGFuZCBzZXBhcmF0ZSB3aXRoIFwiLCBcIi5cXG5JbmNsdWRlIG5lc3RlZCB0YWdzLicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciB0YWcxLCB0YWcyL3N1YnRhZywgXHUyMDI2JylcclxuXHRcdFx0XHQvLy5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSlcclxuICAgICAgICAuc2V0VmFsdWUoZGVjcnlwdFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzRXhjbHVkZSkpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUgPSBlbmNyeXB0U3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcblx0XHRcdFx0XHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ2ZvbGRlciB0byBpZ25vcmUnKVxyXG5cdFx0XHQuc2V0RGVzYygnZW50ZXIgZm9sZGVyIHdoaWNocyBjb250ZW50IHNoYWxsIGJlIGlnbm9yZWQuIFNlcGFyYXRlIHdpdGggXCIsIFwiLicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignRW50ZXIgeW91ciBmb2xkZXIxLCBmb2xkZXIyLCBcdTIwMjYnKVxyXG5cdFx0XHRcdC8vLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpXHJcbiAgICAgICAgLnNldFZhbHVlKGRlY3J5cHRTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSkpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyRXhjbHVkZSA9IGVuY3J5cHRTdHJpbmcodmFsdWUpO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnUHJvZmlsZSBQYWdlIE5hbWUnKVxyXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2UgaGVyZSB0aGUgbmFtZSBvZiB5b3VyIHByb2ZpbGUgcGFnZSBpZiB5b3UgbGlrZS4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignbmFtZScpXHJcblx0XHRcdFx0XHQvLy5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSlcclxuICAgICAgICAgIC5zZXRWYWx1ZShkZWNyeXB0U3RyaW5nKHRoaXMucGx1Z2luLnNldHRpbmdzLmF2YXRhclBhZ2VOYW1lKSlcclxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSA9IGVuY3J5cHRTdHJpbmcodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdPdGhlciBTZXR0aW5ncycgfSk7XHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ0Rpc2FibGUgSW5pdCBDb21tYW5kJylcclxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gcmVtb3ZlIHRoZSBpbml0IGNvbW1hbmQgZnJvbSBjb21tYW5kIHByb21wdCBieSBzd2l0Y2hpbmcgb2ZmLlxcbnJlc3RhcnQgbmVlZGVkLicpXHJcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT4gXHJcblx0XHRcdFx0dG9nZ2xlXHJcbiAgICAgICAgICBcdFx0LnNldFZhbHVlKGRlY3J5cHRCb29sZWFuKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kKSlcclxuICAgICAgICBcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUluaXRDb21tYW5kID0gZW5jcnlwdEJvb2xlYW4odmFsdWUpO1xyXG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICBcdFx0XHR9KSxcclxuXHRcdFx0KTtcclxuXHJcbiAgXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ0RlbGF5IFNldHRpbmdzIGF0IHN0YXJ0dXAnKVxyXG5cdFx0XHQuc2V0RGVzYygnRW50ZXIgaW4gc2Vjb25kcyB0byBkZWxheSB0aGUgbG9hZCB0aW1lLiBlLmcuIHdoZW4gR0lUIHB1bGwgaXMgcGVyZm9ybWVkIGJlZm9yZSBhbmQgc2V0dGluZ3MgZ2V0IG1lcmdlIGNvbmZsaWN0cy4gV2l0aG91dCBHSVQgdXNhZ2UsIGtlZXAgaXQgdG8gMC4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignMCcpXHJcblx0XHRcdFx0XHQuc2V0VmFsdWUoZGVjcnlwdE51bWJlcih0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxheUxvYWRUaW1lKS50b1N0cmluZygpKVxyXG4gICAgICAgICAgLy8uc2V0VmFsdWUoXCIwXCIpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmRlbGF5TG9hZFRpbWUgPSBlbmNyeXB0TnVtYmVyKHBhcnNlSW50KHZhbHVlKSk7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0fSkpO1xyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnUHJvZ3Jlc3NpdmUgU3VtbWFyaXphdGlvbicpXHJcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIGNoYW5nZSB3aGljaCBmb3JtYXR0aW5nIHlvdSB1c2UgZm9yIExheWVyIDIgYW5kIDMuJylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0xheWVyIDIgaXMgdXN1YWxseSAqKicpXHJcblx0XHRcdFx0XHQuc2V0VmFsdWUoZGVjcnlwdFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMikpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIgPSBlbmNyeXB0U3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0fSkpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAzIGlzIHVzdWFsbHkgPT0nKVxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKGRlY3J5cHRTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjMpKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzID0gZW5jcnlwdFN0cmluZyh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KSk7XHJcblxyXG5cdH1cclxuICB9IiwgImV4cG9ydCBjb25zdCBwb2ludHNOb3RlTWFqdXJpdHk6IG51bWJlciA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c01hanVyaXR5OiBudW1iZXIgPSAxMDtcclxuZXhwb3J0IGNvbnN0IHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlOiBudW1iZXIgPSA1MDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2U6IG51bWJlciA9IDIwMDA7XHJcbmV4cG9ydCBjb25zdCBzdHJlYWtib29zdGVyRGVjcmVhc2U6IG51bWJlciA9IDAuMjtcclxuZXhwb3J0IGNvbnN0IHN0cmVha2Jvb3N0ZXJJbmNyZWFzZURhaWx5OiBudW1iZXIgPSAwLjE7XHJcbmV4cG9ydCBjb25zdCBzdHJlYWtib29zdGVySW5jcmVhc2VXZWVrbHk6IG51bWJlciA9IDE7XHJcbmV4cG9ydCBjb25zdCBDcnlwdG9KUyA9IHJlcXVpcmUoXCJjcnlwdG8tanNcIik7XHJcbmV4cG9ydCBjb25zdCBzZWNyZXRLZXkgPSBcIjJaVV4xMnkjUW1OQjUkeUVpbjVeXCI7XHJcbmV4cG9ydCBjb25zdCBhdmF0YXJJbml0Q29udGVudCA9ICBgIyBBdmF0YXJcclxuXHJcbnwgICAgICAgICAgIHwgICAgICAgICB8IFxyXG58IC0tLS0tLS0tLSB8IC0tLS0tLS0gfFxyXG58ICoqTGV2ZWwqKiAgfCAqKjEqKiB8XHJcbnwgUG9pbnRzIHwgMCAgICB8XHJcbl5sZXZlbEFuZFBvaW50c1xyXG5cXGBcXGBcXGBjaGFydFxyXG50eXBlOiBiYXJcclxubGFiZWxzOiBbRXhwcmlyaWVuY2VdXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxyXG4gICAgZGF0YTogWzBdXHJcbiAgLSB0aXRsZTogcG9pbnRzIHRvIGVhcm4gdG8gbGV2ZWwgdXBcclxuICAgIGRhdGE6IFsxMDAwXVxyXG54TWluOiAwXHJcbnhNYXg6IDEwMDBcclxudGVuc2lvbjogMC4yXHJcbndpZHRoOiA0MCVcclxubGFiZWxDb2xvcnM6IGZhbHNlXHJcbmZpbGw6IGZhbHNlXHJcbmJlZ2luQXRaZXJvOiBmYWxzZVxyXG5iZXN0Rml0OiBmYWxzZVxyXG5iZXN0Rml0VGl0bGU6IHVuZGVmaW5lZFxyXG5iZXN0Rml0TnVtYmVyOiAwXHJcbnN0YWNrZWQ6IHRydWVcclxuaW5kZXhBeGlzOiB5XHJcbnhUaXRsZTogXCJwcm9ncmVzc1wiXHJcbmxlZ2VuZDogZmFsc2VcclxuXFxgXFxgXFxgXHJcblxyXG58ICAgICAgICAgICAgICAgICAgfCAgICAgICB8XHJcbnwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tIHxcclxufCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKjAqKiB8XHJcbl5ib29zdGVyRmFjdG9yXHJcblxyXG58ICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgXHJcbnwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0gfFxyXG58ICoqZGFpbHkgTm90ZXMqKiB8ICo1MDBFUCogfCAqKjAvMioqICAgfFxyXG5eZGFpbHlOb3Rlc0NoYWxsZW5nZVxyXG5cclxufCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgXHJcbnwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLSB8XHJcbnwgKip3ZWVrbHkgTm90ZXMqKiB8ICoyMDAwRVAqICAgICB8ICAqKjAvNyoqICAgfFxyXG5ed2Vla2x5Tm90ZXNDaGFsbGVuZ2VcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW2RheXMgZG9uZSBpbiBhIHJvd11cclxuc2VyaWVzOlxyXG4gIC0gdGl0bGU6IGRheXMgdG8gZG8gaW4gYSByb3dcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbN11cclxueE1pbjogMFxyXG54TWF4OiA3XHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCBMZXZlbCB8IENvdW50IHxcclxufCA6LS0tOiB8IDotLS06IHxcclxufCBNYWp1cml0eSA1IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNSwgJzUnLCAnNVx1MjdBMVx1RkUwRicsICc1XHUyQjA3XHVGRTBGJywgJzVcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSA0IHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbNCwgJzQnLCAnNFx1MjdBMVx1RkUwRicsICc0XHUyQjA3XHVGRTBGJywgJzRcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAzIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMywgJzMnLCAnM1x1MjdBMVx1RkUwRicsICczXHUyQjA3XHVGRTBGJywgJzNcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAyIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMiwgJzInLCAnMlx1MjdBMVx1RkUwRicsICcyXHUyQjA3XHVGRTBGJywgJzJcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAxIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMSwgJzEnLCAnMVx1MjdBMVx1RkUwRicsICcxXHUyQjA3XHVGRTBGJywgJzFcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxufCBNYWp1cml0eSAwIHxcXGAkPWR2LnBhZ2VzKCkud2hlcmUocCA9PiBbMCwgJzAnLCAnMFx1MjdBMVx1RkUwRicsICcwXHUyQjA3XHVGRTBGJywgJzBcdTJCMDZcdUZFMEYnXS5pbmNsdWRlcyhwLmZpbGUuZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSkpLmxlbmd0aFxcYHxcclxuXHJcblxyXG5cclxuIyMjIEJhZGdlc1xyXG4jIyMjIGFjaGlldmVkXHJcblxyXG5cclxuIyMjIyBvdXRzdGFuZGluZ1xyXG5sZXZlbCA1OiAqRW5saWdodGVuZWQgTm92aWNlKlxyXG5sZXZlbCAxMDogKkN1cmlvdXMgQ29ubm9pc3NldXIqXHJcbmxldmVsIDIwOiAqQnJhaW5pYWMgVHJhaWxibGF6ZXIqXHJcbmxldmVsIDI3OiAqU2Nob2xhcmx5IFRyYWlsYmxhemVyKlxyXG5sZXZlbCAzNTogKkluZm8gTmluamEgTWFzdGVyKlxyXG5sZXZlbCA0MjogKldpc2UgT3dsIEd1cnUqXHJcbmxldmVsIDUwOiAqRWluc3RlaW4gSW5jYXJuYXRlKlxyXG5sZXZlbCA2MDogKk1hc3Rlcm1pbmQgU2FnZSpcclxubGV2ZWwgNzU6ICpDZXJlYnJhbCBNYWVzdHJvKlxyXG5sZXZlbCA4MjogKlplbiBLbm93bGVkZ2UgS2VlcGVyKlxyXG5sZXZlbCA5MDogKkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCpcclxubGV2ZWwgMTAwOiAqT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcqXHJcblxyXG5cclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA1KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDUgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjICoqbm90ZS1tYXR1cml0eSA9IDQqKlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gNCBvciBub3RlLW1hdHVyaXR5ID0gXCI0XCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDNcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDMgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1wiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAyXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAyIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMVxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMSBvciBub3RlLW1hdHVyaXR5ID0gXCIxXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDBcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDAgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5gO1xyXG5leHBvcnQgY29uc3QgaW5jcmVkaW1lbnRzID0gW1xyXG4gICdOZXh1cyBOb2RlJyxcclxuICAnQ29ubmVjdGlvbiBDcnlzdGFsJyxcclxuICAnTWFzdGVyeSBTY3JvbGwnLFxyXG4gICdJbnNpZ2h0IFByaXNtJyxcclxuICAnUmVmbGVjdGl2ZSBFc3NlbmNlJyxcclxuICAnQW1wbGlmaWNhdGlvbiBDcnlzdGFsJyxcclxuICAnQ3JlYXRpdmUgQ2F0YWx5c3QnLFxyXG4gICdQcmVjaXNpb24gTGVucydcclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbmNyZWRpbWVudHNEYXRhTmFtZSA9IFtcclxuICAnbmV4dXNOb2RlJyxcclxuICAnY29ubmVjdGlvbkNyeXN0YWwnLFxyXG4gICdtYXN0ZXJ5U2Nyb2xsJyxcclxuICAnaW5zaWdodFByaXNtJyxcclxuICAncmVmbGVjdGl2ZUVzc2VuY2UnLFxyXG4gICdhbXBsaWZpY2F0aW9uQ3J5c3RhbCcsXHJcbiAgJ2NyZWF0aXZlQ2F0YWx5c3QnLFxyXG4gICdwcmVjaXNpb25MZW5zJ1xyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyYWZ0aW5nSXRlbXMgPSBbXHJcbiAgeyBuYW1lOiAnVGVtcG9yYWwgVHdlYWtlcicsIGluY3JlZGllbnRzOiBbJzJ4UzEnLCAnMXhTNiddIH0sXHJcbiAgeyBuYW1lOiAnUGVycGV0dWFsIFByb2dyZXNzJywgaW5jcmVkaWVudHM6IFsnMnhTMicsICcxeFM0J10gfSxcclxuICB7IG5hbWU6ICdTdHJhdGVnaWMgU3luYXBzZXMnLCBpbmNyZWRpZW50czogWyczeFMxJywgJzJ4UzInXSB9LFxyXG4gIHsgbmFtZTogJ0FjY2VsZXJhdGVkIEFjcXVpc2l0aW9uJywgaW5jcmVkaWVudHM6IFsnMXhTMycsICcyeFM0J10gfSxcclxuICB7IG5hbWU6ICdMaW5rZXJzIExvZGUnLCBpbmNyZWRpZW50czogWyczeFMyJywgJzF4UzEnXSB9LFxyXG4gIHsgbmFtZTogJ0VmZm9ydGxlc3MgRXhwYW5zaW9uJywgaW5jcmVkaWVudHM6IFsnMnhTMycsICcxeFM2J10gfSxcclxuICB7IG5hbWU6ICdSZWN1cnNpdmUgUmVmbGVjdGlvbicsIGluY3JlZGllbnRzOiBbJzJ4UzQnLCAnMXhTNSddIH0sXHJcbiAgeyBuYW1lOiAnU3luYXB0aWMgU3VyZ2UnLCBpbmNyZWRpZW50czogWycyeFMyJywgJzF4UzEnXSB9LFxyXG4gIHsgbmFtZTogJ0luc3BpcmF0aW9uIEluZnVzaW9uJywgaW5jcmVkaWVudHM6IFsnMnhTNycsICcxeFMxJ10gfSxcclxuICB7IG5hbWU6ICdUaXRsZSBUaXRhbicsIGluY3JlZGllbnRzOiBbJzJ4UzgnLCAnMXhTNyddIH0sXHJcbiAgeyBuYW1lOiAnUHJlY2lzaW9uIFByaXNtJywgaW5jcmVkaWVudHM6IFsnMnhTOCcsICcxeFMyJ10gfSxcclxuICB7IG5hbWU6ICdIeXBlcmxpbmsgSGFybW9ueScsIGluY3JlZGllbnRzOiBbJzJ4UzInLCAnMXhTNiddIH0sXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgbGlzdE9mVXNlYWJsZUJvb3N0ZXJzVG9CZVNob3duID0gWydQZXJwZXR1YWwgUHJvZ3Jlc3MnLCAnVGl0bGUgVGl0YW4nLCAnUHJlY2lzaW9uIFByaXNtJ11cclxuZXhwb3J0IGNvbnN0IGxpc3RPZlVzZWFibGVJbmdyZWRpZW50c1RvQmVTaG93biA9IFsnQ29ubmVjdGlvbiBDcnlzdGFsJywgJ0luc2lnaHQgUHJpc20nLCAnQ3JlYXRpdmUgQ2F0YWx5c3QnLCAnUHJlY2lzaW9uIExlbnMnXVxyXG5leHBvcnQgY29uc3QgY2hhbmNlVG9FYXJuSW5ncmVkaWVudCA9IDAuNTtcclxuXHJcbmV4cG9ydCBjb25zdCBlbGVtZW50cyA9IFtcclxuICB7IHNob3J0TmFtZTogJ1MyJywgbmFtZTogJ0Nvbm5lY3Rpb24gQ3J5c3RhbCcsIHZhck5hbWU6ICdjb25uZWN0aW9uQ3J5c3RhbCcgfSxcclxuICB7IHNob3J0TmFtZTogJ1M0JywgbmFtZTogJ0luc2lnaHQgUHJpc20nLCB2YXJOYW1lOiAnaW5zaWdodFByaXNtJyB9LFxyXG4gIHsgc2hvcnROYW1lOiAnUzcnLCBuYW1lOiAnQ3JlYXRpdmUgQ2F0YWx5c3QnLCB2YXJOYW1lOiAnY3JlYXRpdmVDYXRhbHlzdCcgfSxcclxuICB7IHNob3J0TmFtZTogJ1M4JywgbmFtZTogJ1ByZWNpc2lvbiBMZW5zJywgdmFyTmFtZTogJ3ByZWNpc2lvbkxlbnMnIH0sXHJcbiAgeyBzaG9ydE5hbWU6ICdTMScsIG5hbWU6ICdOZXh1cyBOb2RlJywgdmFyTmFtZTogJ25leHVzTm9kZScgfSxcclxuICB7IHNob3J0TmFtZTogJ1MzJywgbmFtZTogJ01hc3RlcnkgU2Nyb2xsJywgdmFyTmFtZTogJ21hc3RlcnlTY3JvbGwnIH0sXHJcbiAgeyBzaG9ydE5hbWU6ICdTNScsIG5hbWU6ICdSZWZsZWN0aXZlIEVzc2VuY2UnLCB2YXJOYW1lOiAncmVmbGVjdGl2ZUVzc2VuY2UnIH0sXHJcbiAgeyBzaG9ydE5hbWU6ICdTNicsIG5hbWU6ICdBbXBsaWZpY2F0aW9uIENyeXN0YWwnLCB2YXJOYW1lOiAnYW1wbGlmaWNhdGlvbkNyeXN0YWwnIH1cclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBib29zdGVyUmVjaXBlcyA9IFtcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRUZW1wb3JhbFR3ZWFrZXInLCBib29zdGVyUnVuVGltZTogMCwgYm9vc3RlckNvb2xkb3duOiAwLCBib29zdGVyRGF0ZTogJycsIGJvb3N0ZXJTd2l0Y2g6ICcnLCB2YXJuYW1lOiAndGVtcG9yYWxUd2Vha2VyJyAsbmFtZTogJ1RlbXBvcmFsIFR3ZWFrZXInLCBpbmNyZWRpZW50czogWycyMHhTMScsICcxMHhTNiddLCBkZXNjcmlwdGlvbjogJ1RlbXBvcmFsIFR3ZWFrZXI6IHJlc2V0IHRoZSBjb29sZG93biBwaGFzZSBmb3IgYSBib29zdGVyIHlvdXIgY2hvaWNlJyB9LFxyXG4gIHsgYm9vc3RlclVzZUNvdW50TmFtZTogJ2Jvb3N0ZXJVc2VDb3VudFBlcnBldHVhbFByb2dyZXNzJywgYm9vc3RlclJ1blRpbWU6IDQqNjAsIGJvb3N0ZXJDb29sZG93bjogMzYqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVQZXJwZXR1YWxQcm9ncmVzcycsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yUGVycGV0dWFsUHJvZ3Jlc3MnLCB2YXJuYW1lOiAncGVycGV0dWFsUHJvZ3Jlc3MnICxuYW1lOiAnUGVycGV0dWFsIFByb2dyZXNzJywgaW5jcmVkaWVudHM6IFsnMjB4UzInLCAnMTB4UzQnXSwgZGVzY3JpcHRpb246ICdQZXJwZXR1YWwgUHJvZ3Jlc3M6IGdldCAzIHRpbWVzIHBvaW50cyBhbiBhbGwgeW91ciBhY3Rpb25zIGZvciB0aGUgbmV4dCA0IGhvdXJzLiBZb3UgY2FuIHVzZSBQZXJwZXR1YWwgUHJvZ3Jlc3MgZXZlcnkgdGhyZWUgZGF5cywgaWYgeW91IGhhdmUgdGhlIGluZ3JlZGllbnRzIHRvIGNyYWZ0IGl0LicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRTdHJhdGVnaWNTeW5hcHNlcycsIGJvb3N0ZXJSdW5UaW1lOiA0KjYwLCBib29zdGVyQ29vbGRvd246IDEyMCo2MCwgYm9vc3RlckRhdGU6ICdib29zdGVyRGF0ZVN0cmF0ZWdpY1N5bmFwc2VzJywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JTdHJhdGVnaWNTeW5hcHNlcycsIHZhcm5hbWU6ICdzdHJhdGVnaWNTeW5hcHNlcycgLG5hbWU6ICdTdHJhdGVnaWMgU3luYXBzZXMnLCBpbmNyZWRpZW50czogWyczMHhTMScsICcyMHhTMiddLCBkZXNjcmlwdGlvbjogJ1N0cmF0ZWdpYyBTeW5hcHNlczogZ2FpbiAzIHRpbWVzIEVQIGZvciBhbGwgYWN0aW9ucyBvbiBNYXAgT2YgQ29udGVudCByYXRpbmdzIGZvciB0aGUgbmV4dCA0IGhvdXJzLiBUaGlzIGJvb3N0ZXIgaGFzIGEgY29vbGRvd24gdGltZSBvZiA1IGRheXMuJyB9LFxyXG4gIHsgYm9vc3RlclVzZUNvdW50TmFtZTogJ2Jvb3N0ZXJVc2VDb3VudEFjY2VsZXJhdGVkQWNxdWlzaXRpb24nLCBib29zdGVyUnVuVGltZTogMCwgYm9vc3RlckNvb2xkb3duOiAzNio2MCwgYm9vc3RlckRhdGU6ICcnLCBib29zdGVyU3dpdGNoOiAnJywgdmFybmFtZTogJ2FjY2VsZXJhdGVkQWNxdWlzaXRpb24nICxuYW1lOiAnQWNjZWxlcmF0ZWQgQWNxdWlzaXRpb24nLCBpbmNyZWRpZW50czogWycxMHhTMycsICcyMHhTNCddLCBkZXNjcmlwdGlvbjogJ0FjY2VsZXJhdGVkIEFjcXVpc2l0aW9uOiBVc2UgQWNjZWxlcmF0ZWQgQWNxdWlzaXRpb24gYW5kIGNvbGxlY3QgbXVjaCBmYXN0ZXIgZm9yIHRoZSBuZXh0IDEyIGhvdXJzIGFsbCBzb3J0cyBvZiBpbmdyZWRpZW50cyB3aGVuIGNyZWF0aW5nIGFuZCBpbXByb3Zpbmcgbm90ZXMnIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50TGlua2Vyc0xvZGUnLCBib29zdGVyUnVuVGltZTogMyo2MCwgYm9vc3RlckNvb2xkb3duOiA0OCo2MCwgYm9vc3RlckRhdGU6ICdib29zdGVyRGF0ZUxpbmtlcnNMb2RlJywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZScsIHZhcm5hbWU6ICdsaW5rZXJzTG9kZScgLG5hbWU6ICdMaW5rZXJzIExvZGUnLCBpbmNyZWRpZW50czogWyczMHhTMicsICcxMHhTMSddLCBkZXNjcmlwdGlvbjogJ0xpbmtlcnMgTG9kZTogY29sbGVjdCBleHRyYSBwb2ludHMgd2hlbiBjcmVhdGluZyBjaGFpbiBvZiB0aG91Z2h0cyBmb3IgdGhlIG5leHQgMyBob3Vycy4gKGNvb2xkb3duIDIgZGF5cyknIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50RWZmb3J0bGVzc0V4cGFuc2lvbicsIGJvb3N0ZXJSdW5UaW1lOiAwLCBib29zdGVyQ29vbGRvd246IDQ4MCo2MCwgYm9vc3RlckRhdGU6ICcnLCBib29zdGVyU3dpdGNoOiAnJywgdmFybmFtZTogJ2VmZm9ydGxlc3NFeHBhbnNpb24nICxuYW1lOiAnRWZmb3J0bGVzcyBFeHBhbnNpb24nLCBpbmNyZWRpZW50czogWycyMHhTMycsICcxMHhTNiddLCBkZXNjcmlwdGlvbjogJ0VmZm9ydGxlc3MgRXhwYW5zaW9uOiBDYXN0IFwiRWZmb3J0bGVzcyBFeHBhbnNpb25cIiBhbmQgbG93ZXIgdGhlIGNhcCB0byB0aGUgbmV4dCBsZXZlbCBhYm91dCAyMCUgaW4gdGhlIG5leHQgNSBkYXlzLiAoQ29vbGRvd24gMjAgZGF5cyknIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50ckVjdXJzaXZlUmVmbGVjdGlvbicsIGJvb3N0ZXJSdW5UaW1lOiA1KjYwLCBib29zdGVyQ29vbGRvd246IDM2KjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlUmVjdXJzaXZlUmVmbGVjdGlvbicsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yUmVjdXJzaXZlUmVmbGVjdGlvbicsIHZhcm5hbWU6ICdyZWN1cnNpdmVSZWZsZWN0aW9uJyAsbmFtZTogJ1JlY3Vyc2l2ZSBSZWZsZWN0aW9uJywgaW5jcmVkaWVudHM6IFsnMjB4UzQnLCAnMTB4UzUnXSwgZGVzY3JpcHRpb246ICdSZWN1cnNpdmUgUmVmbGVjdGlvbjogSW1wcm92ZSB5b3VyIG5vdGVzIGFuZCBnZXQgNSB0aW1lcyB0aGUgcG9pbnRzIHlvdSBnZXQgb24gbm9ybWFsIGNvbmRpdGlvbiBmb3IgdGhlIG5leHQgNSBob3Vycy4gQ29vbGRvd24gMyBkYXlzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRTeW5hcHRpY1N1cmdlJywgYm9vc3RlclJ1blRpbWU6IDIqNjAsIGJvb3N0ZXJDb29sZG93bjogMzYqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVTeW5hcHRpY1N1cmdlJywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlJywgdmFybmFtZTogJ3N5bmFwdGljU3VyZ2UnICxuYW1lOiAnU3luYXB0aWMgU3VyZ2UnLCBpbmNyZWRpZW50czogWycyMHhTMicsICcxMHhTMSddLCBkZXNjcmlwdGlvbjogJ1N5bmFwdGljIFN1cmdlOiBMaW5rIHlvdXIgaWRlYXMgdG9nZXRoZXIsIGV2ZXJ5IGluY3JlYXNlIGluIFwibGlua2luZyBtYXR1cml0eVwiIHBheXMgb3V0IDIwIHRpbWVzIGZvciB0aGUgbmV4dCAyIGhvdXJzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRJbnNwaXJhdGlvbkluZnVzaW9uJywgYm9vc3RlclJ1blRpbWU6IDAsIGJvb3N0ZXJDb29sZG93bjogNDgqNjAsIGJvb3N0ZXJEYXRlOiAnJywgYm9vc3RlclN3aXRjaDogJycsIHZhcm5hbWU6ICdpbnNwaXJhdGlvbkluZnVzaW9uJyAsbmFtZTogJ0luc3BpcmF0aW9uIEluZnVzaW9uJywgaW5jcmVkaWVudHM6IFsnMjB4UzcnLCAnMTB4UzEnXSwgZGVzY3JpcHRpb246ICdJbnNwaXJhdGlvbiBJbmZ1c2lvbjogSW5jcmVhc2UgdGhlIGZyZXF1ZW5jeSB0byBnZXQgaGVscGZ1bCBwcm9tcHRzIHRvIHBvd2VyIHVwIHlvdSBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBmb3IgdGhlIG5leHQgMiBkYXlzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRUaXRsZVRpdGFuJywgYm9vc3RlclJ1blRpbWU6IDMqNjAsIGJvb3N0ZXJDb29sZG93bjogMzYqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVUaXRsZVRpdGFuJywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuJywgdmFybmFtZTogJ3RpdGxlVGl0YW4nICxuYW1lOiAnVGl0bGUgVGl0YW4nLCBpbmNyZWRpZW50czogWycyMHhTOCcsICcxMHhTNyddLCBkZXNjcmlwdGlvbjogJ1RpdGxlIFRpdGFuOiBRdWFkcm8geW91ciBwb2ludHMgd2hlbiBtYWtpbmcgeW91ciBub3RlIHRpdGxlIG1vcmUgdG8gdGhlIHBvaW50IGV4cHJlc3NpbmcgdGhlIGlkZWEgb2YgeW91ciBub3RlIGZvciB0aGUgbmV4dCAzIGhvdXJzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRQcmVjaXNpb25QcmlzbScsIGJvb3N0ZXJSdW5UaW1lOiAzKjYwLCBib29zdGVyQ29vbGRvd246IDM2KjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlUHJlY2lzaW9uUHJpc20nLCBib29zdGVyU3dpdGNoOiAnYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtJywgdmFybmFtZTogJ3ByZWNpc2lvblByaXNtJyAsbmFtZTogJ1ByZWNpc2lvbiBQcmlzbScsIGluY3JlZGllbnRzOiBbJzIweFM4JywgJzEweFMyJ10sIGRlc2NyaXB0aW9uOiAnUHJlY2lzaW9uIFByaXNtOiA0IHRpbWVzIHRoZSBwb2ludHMgd2hlbiBpbmNyZWFzaW5nIHRoZSBcIm5vdGUgbGVuZ3RoIG1hanVyaXR5XCIgZm9yIGEgbm90ZSB0aGUgbmV4dCAzIGhvdXJzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRIeXBlcmxpbmtIYXJtb255JywgYm9vc3RlclJ1blRpbWU6IDMqNjAsIGJvb3N0ZXJDb29sZG93bjogMzYqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVIeXBlcmxpbmtIYXJtb255JywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JIeXBlcmxpbmtIYXJtb255JywgdmFybmFtZTogJ2h5cGVybGlua0hhcm1vbnknICxuYW1lOiAnSHlwZXJsaW5rIEhhcm1vbnknLCBpbmNyZWRpZW50czogWycyMHhTMicsICcxMHhTNiddLCBkZXNjcmlwdGlvbjogJ0h5cGVybGluayBIYXJtb255OiBHZXQgZm9yIFwiSW5saW5rIG1hanVyaXR5XCIgQU5EIFwib3V0bGluayBtYWp1cml0eVwiIGltcHJvdmVtZW50cyA1IHRpbWVzIHRoZSBwb2ludCB0aGUgbmV4dCAzIGhvdXJzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRFcGhlbWVyYWxFdXBob3JpYScsIGJvb3N0ZXJSdW5UaW1lOiAyKjYwLCBib29zdGVyQ29vbGRvd246IDIxNjAqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVFcGhlbWVyYWxFdXBob3JpYScsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEnLCB2YXJuYW1lOiAnZXBoZW1lcmFsRXVwaG9yaWEnICxuYW1lOiAnRXBoZW1lcmFsIEV1cGhvcmlhJywgaW5jcmVkaWVudHM6IFsnMTAwMHhTWCddLCBkZXNjcmlwdGlvbjogJ1VuZWFydGggdGhlIGhpZGRlbiBwb3RlbnRpYWwgd2l0aGluIHlvdXIga25vd2xlZGdlIHJlcG9zaXRvcnkgd2l0aCB0aGUgRXBoZW1lcmFsIEV1cGhvcmlhIGJvb3N0ZXIuIEZvciBhIGZsZWV0aW5nIHR3by1ob3VyIHdpbmRvdywgeW91ciBub3RlcyB3aWxsIHJlc29uYXRlIHdpdGggYW4gZXh0cmFvcmRpbmFyeSB2aXRhbGl0eSwgYWxsb3dpbmcgeW91IHRvIGVhcm4gcG9pbnRzIGF0IGFuIGFzdG9uaXNoaW5nIHJhdGUuIFNlaXplIHRoaXMgbW9tZW50IG9mIGJvdW5kbGVzcyBvcHBvcnR1bml0eSBhbmQgd2F0Y2ggeW91ciBrbm93bGVkZ2UgZmxvdXJpc2ggbGlrZSBuZXZlciBiZWZvcmUhIEJlIGF3YXJlLCB5b3UgbmVlZCBpbiBzdW0gMTAwMCBpbmdyZWRpbWVudHMgdG8gY3JhZnQsIGluZ3JlZGltZW50cyB3aWxsIGJlIHRha2VuIGZyb20gYWxsIHBvdHMuJyB9LFxyXG4gIHsgYm9vc3RlclVzZUNvdW50TmFtZTogJ2Jvb3N0ZXJVc2VDb3VudEZvcnR1bmVJbmZ1c2lvbicsIGJvb3N0ZXJSdW5UaW1lOiAwLCBib29zdGVyQ29vbGRvd246IDIyKjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlRm9ydHVuZUluZnVzaW9uJywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JGb3J0dW5lSW5mdXNpb24nLCB2YXJuYW1lOiAnZm9ydHVuZUluZnVzaW9uJyAsbmFtZTogJ0ZvcnR1bmUgSW5mdXNpb24nLCBpbmNyZWRpZW50czogWydmcmVlIGFsbCAyMmgnXSwgZGVzY3JpcHRpb246IFwiSW5mdXNlIHlvdXIga25vd2xlZGdlIGpvdXJuZXkgd2l0aCBhIGRhc2ggb2YgcmFuZG9tbmVzcyB1c2luZyB0aGUgRm9ydHVuZSBJbmZ1c2lvbiBib29zdGVyLiBVcG9uIGFjdGl2YXRpb24sIHlvdSdsbCByZWNlaXZlIGEgcmFuZG9taXplZCBhbW91bnQgb2YgdmFsdWFibGUgaW5ncmVkaWVudHMgdG8gYWlkIHlvdXIga25vd2xlZGdlIGNyYWZ0aW5nIGVuZGVhdm9ycy4gU29tZXRpbWVzLCB5b3UnbGwgc3RyaWtlIGl0IGx1Y2t5IHdpdGggYSBib3VudGlmdWwgeWllbGQgb2YgMTAgaW5ncmVkaWVudHMsIHdoaWxlIG1vc3Qgb2YgdGhlIHRpbWUsIHlvdSdsbCBzZWN1cmUgYSBtb3JlIG1vZGVzdCAyLiBUaGUgcmFyZXIsIHRoZSBtb3JlIGluZ3JlZGllbnRzIHlvdSBtaWdodCBhY3F1aXJlLiBBZGQgYSB0d2lzdCBvZiB1bnByZWRpY3RhYmlsaXR5IHRvIHlvdXIga25vd2xlZGdlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIHNlZSBob3cgeW91ciBwb2ludHMgc29hciFcIiB9LFxyXG5dO1xyXG5cclxuIiwgImltcG9ydCB7XHJcblx0Q3J5cHRvSlMsXHJcblx0c2VjcmV0S2V5XHJcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5cclxuLy8gRnVuY3Rpb24gdG8gZW5jcnlwdCBhIHN0cmluZ1xyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFZhbHVlKGRhdGE6IHN0cmluZykge1xyXG5cdHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhKSwgc2VjcmV0S2V5KS50b1N0cmluZygpO1xyXG59XHJcblxyXG4vLyBGdW5jdGlvbiB0byBlbmNyeXB0IGEgc3RyaW5nXHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U3RyaW5nKGRhdGE6IHN0cmluZykge1xyXG5cdHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdChKU09OLnN0cmluZ2lmeShkYXRhKSwgc2VjcmV0S2V5KS50b1N0cmluZygpO1xyXG59XHJcbi8vIEZ1bmN0aW9uIHRvIGRlY3J5cHQgYSBzdHJpbmdcclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTdHJpbmcoZW5jcnlwdGVkRGF0YTogc3RyaW5nKSB7XHJcblx0Y29uc3QgYnl0ZXMgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChlbmNyeXB0ZWREYXRhLCBzZWNyZXRLZXkpO1xyXG5cdHJldHVybiBKU09OLnBhcnNlKGJ5dGVzLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KSk7XHJcbn1cclxuLy8gRnVuY3Rpb24gdG8gZW5jcnlwdCBhIG51bWJlclxyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdE51bWJlcihudW1iZXI6IG51bWJlcikge1xyXG5cdHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdChudW1iZXIudG9TdHJpbmcoKSwgc2VjcmV0S2V5KS50b1N0cmluZygpO1xyXG59XHJcbi8vIEZ1bmN0aW9uIHRvIGRlY3J5cHQgYW4gZW5jcnlwdGVkIG51bWJlclxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdE51bWJlcihlbmNyeXB0ZWROdW1iZXI6IHN0cmluZykge1xyXG5cdGNvbnN0IGJ5dGVzID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkTnVtYmVyLCBzZWNyZXRLZXkpO1xyXG5cdC8vcmV0dXJuIHBhcnNlSW50KGJ5dGVzLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KSk7XHJcblx0cmV0dXJuIHBhcnNlRmxvYXQoYnl0ZXMudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpKTtcclxufVxyXG4vLyBGdW5jdGlvbiB0byBlbmNyeXB0IGEgYm9vbGVhblxyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdEJvb2xlYW4oYm9vbGVhblZhbHVlOiBib29sZWFuKSB7XHJcblx0cmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KGJvb2xlYW5WYWx1ZS50b1N0cmluZygpLCBzZWNyZXRLZXkpLnRvU3RyaW5nKCk7XHJcbn1cclxuLy8gRnVuY3Rpb24gdG8gZGVjcnlwdCBhbiBlbmNyeXB0ZWQgYm9vbGVhblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdEJvb2xlYW4oZW5jcnlwdGVkQm9vbGVhbjogc3RyaW5nKSB7XHJcblx0Y29uc3QgYnl0ZXMgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChlbmNyeXB0ZWRCb29sZWFuLCBzZWNyZXRLZXkpO1xyXG5cdHJldHVybiBKU09OLnBhcnNlKGJ5dGVzLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KSk7XHJcbn1cclxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcXVpcmVkQXJncyhyZXF1aXJlZCwgYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocmVxdWlyZWQgKyAnIGFyZ3VtZW50JyArIChyZXF1aXJlZCA+IDEgPyAncycgOiAnJykgKyAnIHJlcXVpcmVkLCBidXQgb25seSAnICsgYXJncy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgfVxufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIHZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGFyZ3VtZW50IC0gdGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50IHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHwgX3R5cGVvZihhcmd1bWVudCkgPT09ICdvYmplY3QnICYmIGFyZ1N0ciA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgLy8gUHJldmVudCB0aGUgZGF0ZSB0byBsb3NlIHRoZSBtaWxsaXNlY29uZHMgd2hlbiBwYXNzZWQgdG8gbmV3IERhdGUoKSBpbiBJRTEwXG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50LmdldFRpbWUoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fCBhcmdTdHIgPT09ICdbb2JqZWN0IE51bWJlcl0nKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycgfHwgYXJnU3RyID09PSAnW29iamVjdCBTdHJpbmddJykgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFwiU3RhcnRpbmcgd2l0aCB2Mi4wLjAtYmV0YS4xIGRhdGUtZm5zIGRvZXNuJ3QgYWNjZXB0IHN0cmluZ3MgYXMgZGF0ZSBhcmd1bWVudHMuIFBsZWFzZSB1c2UgYHBhcnNlSVNPYCB0byBwYXJzZSBzdHJpbmdzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNzdHJpbmctYXJndW1lbnRzXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG59IiwgImltcG9ydCBpc0RhdGUgZnJvbSBcIi4uL2lzRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZX1cbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSB7Kn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdGhlIGRhdGUgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0YWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1ZhbGlkKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgaWYgKCFpc0RhdGUoZGlydHlEYXRlKSAmJiB0eXBlb2YgZGlydHlEYXRlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICByZXR1cm4gIWlzTmFOKE51bWJlcihkYXRlKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvSW50ZWdlcihkaXJ0eU51bWJlcikge1xuICBpZiAoZGlydHlOdW1iZXIgPT09IG51bGwgfHwgZGlydHlOdW1iZXIgPT09IHRydWUgfHwgZGlydHlOdW1iZXIgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG4gIHJldHVybiBudW1iZXIgPCAwID8gTWF0aC5jZWlsKG51bWJlcikgOiBNYXRoLmZsb29yKG51bWJlcik7XG59IiwgImltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIGFkZE1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEFkZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgZGF0ZSB0byBiZSBjaGFuZ2VkXG4gKiBAcGFyYW0ge051bWJlcn0gYW1vdW50IC0gdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gYmUgYWRkZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIGFkZGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFkZCA3NTAgbWlsbGlzZWNvbmRzIHRvIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NTozMC43NTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciB0aW1lc3RhbXAgPSB0b0RhdGUoZGlydHlEYXRlKS5nZXRUaW1lKCk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gbmV3IERhdGUodGltZXN0YW1wICsgYW1vdW50KTtcbn0iLCAiaW1wb3J0IGFkZE1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgc3ViTWlsbGlzZWNvbmRzXG4gKiBAY2F0ZWdvcnkgTWlsbGlzZWNvbmQgSGVscGVyc1xuICogQHN1bW1hcnkgU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBTdWJ0cmFjdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIHN1YnRyYWN0ZWQuIFBvc2l0aXZlIGRlY2ltYWxzIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5mbG9vcmAsIGRlY2ltYWxzIGxlc3MgdGhhbiB6ZXJvIHdpbGwgYmUgcm91bmRlZCB1c2luZyBgTWF0aC5jZWlsYC5cbiAqIEByZXR1cm5zIHtEYXRlfSB0aGUgbmV3IGRhdGUgd2l0aCB0aGUgbWlsbGlzZWNvbmRzIHN1YnRyYWN0ZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU3VidHJhY3QgNzUwIG1pbGxpc2Vjb25kcyBmcm9tIDEwIEp1bHkgMjAxNCAxMjo0NTozMC4wMDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdWJNaWxsaXNlY29uZHMobmV3IERhdGUoMjAxNCwgNiwgMTAsIDEyLCA0NSwgMzAsIDApLCA3NTApXG4gKiAvLz0+IFRodSBKdWwgMTAgMjAxNCAxMjo0NToyOS4yNTBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ViTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgZGlydHlBbW91bnQpIHtcbiAgcmVxdWlyZWRBcmdzKDIsIGFyZ3VtZW50cyk7XG4gIHZhciBhbW91bnQgPSB0b0ludGVnZXIoZGlydHlBbW91bnQpO1xuICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRpcnR5RGF0ZSwgLWFtb3VudCk7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX0RBWSA9IDg2NDAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDRGF5T2ZZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlllYXJUaW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgdmFyIGRpZmZlcmVuY2UgPSB0aW1lc3RhbXAgLSBzdGFydE9mWWVhclRpbWVzdGFtcDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIE1JTExJU0VDT05EU19JTl9EQVkpICsgMTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IDE7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkYXkgPSBkYXRlLmdldFVUQ0RheSgpO1xuICB2YXIgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIGRpZmYpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDSVNPV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWsvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSkge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG4gIHZhciBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcbiAgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKTtcbiAgdmFyIGZvdXJ0aE9mSmFudWFyeSA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ0lTT1dlZWsoZGF0ZSkuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ0lTT1dlZWtZZWFyKGRhdGUpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAidmFyIGRlZmF1bHRPcHRpb25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vZGVmYXVsdE9wdGlvbnMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0T2ZVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyR3ZWVrU3RhcnRzT24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgd2Vla1N0YXJ0c09uID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDApO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMCBhbmQgNiBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKHdlZWtTdGFydHNPbiA+PSAwICYmIHdlZWtTdGFydHNPbiA8PSA2KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd3ZWVrU3RhcnRzT24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrWWVhcihkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciBmaXJzdFdlZWtPZk5leHRZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDRnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2Vla09mVGhpc1llYXIgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYgPSAoX3JlZjIgPSAoX3JlZjMgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlJG9wdGlvID0gX29wdGlvbnMkbG9jYWxlLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlJG9wdGlvLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogMSk7XG4gIHZhciB5ZWFyID0gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKTtcbiAgdmFyIGZpcnN0V2VlayA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWsuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgZGF0ZSA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2VlayBmcm9tIFwiLi4vc3RhcnRPZlVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBzdGFydE9mVVRDV2Vla1llYXIgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG52YXIgTUlMTElTRUNPTkRTX0lOX1dFRUsgPSA2MDQ4MDAwMDA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENXZWVrKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRpZmYgPSBzdGFydE9mVVRDV2VlayhkYXRlLCBvcHRpb25zKS5nZXRUaW1lKCkgLSBzdGFydE9mVVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyXG4gIC8vIGJlY2F1c2UgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudFxuICAvLyAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZiB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBNSUxMSVNFQ09ORFNfSU5fV0VFSykgKyAxO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwID8gJy0nIDogJyc7XG4gIHZhciBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCk7XG4gIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgb3V0cHV0ID0gJzAnICsgb3V0cHV0O1xuICB9XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufSIsICJpbXBvcnQgYWRkTGVhZGluZ1plcm9zIGZyb20gXCIuLi8uLi9hZGRMZWFkaW5nWmVyb3MvaW5kZXguanNcIjtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gJ3l5JyA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gJ00nID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0RhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gYShkYXRlLCB0b2tlbikge1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldFVUQ0hvdXJzKCkgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlICdhYWFhYSc6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09ICdhbScgPyAnYS5tLicgOiAncC5tLic7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFVUQ1NlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgdmFyIGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdHRlcnM7IiwgImltcG9ydCBnZXRVVENEYXlPZlllYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDRGF5T2ZZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDSVNPV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ1dlZWsvaW5kZXguanNcIjtcbmltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG5pbXBvcnQgbGlnaHRGb3JtYXR0ZXJzIGZyb20gXCIuLi9saWdodEZvcm1hdHRlcnMvaW5kZXguanNcIjtcbnZhciBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogJ2FtJyxcbiAgcG06ICdwbScsXG4gIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICBub29uOiAnbm9vbicsXG4gIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICBuaWdodDogJ25pZ2h0J1xufTtcbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG52YXIgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIEcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGVyYSA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgJ0cnOlxuICAgICAgY2FzZSAnR0cnOlxuICAgICAgY2FzZSAnR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgJ0dHR0dHJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdydcbiAgICAgICAgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSAnR0dHRyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIHkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICd5bycpIHtcbiAgICAgIHZhciBzaWduZWRZZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIHZhciB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gWShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgc2lnbmVkV2Vla1llYXIgPSBnZXRVVENXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIHZhciB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICAgIHZhciB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gJ1lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHtcbiAgICAgICAgdW5pdDogJ3llYXInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gUihkYXRlLCB0b2tlbikge1xuICAgIHZhciBpc29XZWVrWWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIHUoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gUShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdRJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdRUSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ1FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdRUVFRUSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ1FRUVEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiBxKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgJ3EnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgJ3FxJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSAncW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7XG4gICAgICAgICAgdW5pdDogJ3F1YXJ0ZXInXG4gICAgICAgIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgJ3FxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgJ3FxcXFxJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSAncXFxcSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiBNKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ01vJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTU1NJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdNTU1NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTU1NTSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIEwoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIG1vbnRoID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgJ0xMJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSAnTG8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHtcbiAgICAgICAgICB1bml0OiAnbW9udGgnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlICdMTEwnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgJ0xMTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlICdMTExMJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIHcoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHdlZWsgPSBnZXRVVENXZWVrKGRhdGUsIG9wdGlvbnMpO1xuICAgIGlmICh0b2tlbiA9PT0gJ3dvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gSShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaXNvV2VlayA9IGdldFVUQ0lTT1dlZWsoZGF0ZSk7XG4gICAgaWYgKHRva2VuID09PSAnSW8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7XG4gICAgICAgIHVuaXQ6ICd3ZWVrJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiBkKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENEYXRlKCksIHtcbiAgICAgICAgdW5pdDogJ2RhdGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gRChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZZZWFyID0gZ2V0VVRDRGF5T2ZZZWFyKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0RvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICdkYXlPZlllYXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIEUoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlICdFJzpcbiAgICAgIGNhc2UgJ0VFJzpcbiAgICAgIGNhc2UgJ0VFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnRUVFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnRUVFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdFRUVFJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiBlKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSAnZSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSAnZWUnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnZW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdlZWVlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdlZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2VlZWUnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIGMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIGRheU9mV2VlayA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gICAgdmFyIGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgJ2MnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2NjJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSAnY28nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2Vlaywge1xuICAgICAgICAgIHVuaXQ6ICdkYXknXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdjY2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdjY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2NjY2MnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiBpKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgJ2knOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSAnaWknOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSAnaW8nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlICdpaWlpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlICdpaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnc2hvcnQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgJ2lpaWknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgIGNhc2UgJ2FhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdhYWFhJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIGIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdiJzpcbiAgICAgIGNhc2UgJ2JiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSAnYmJiYmInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdiYmJiJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIEIoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIHZhciBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ0InOlxuICAgICAgY2FzZSAnQkInOlxuICAgICAgY2FzZSAnQkJCJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ0JCQkInOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIGgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnaG8nKSB7XG4gICAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnSG8nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ0hvdXJzKCksIHtcbiAgICAgICAgdW5pdDogJ2hvdXInXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gSyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCkgJSAxMjtcbiAgICBpZiAodG9rZW4gPT09ICdLbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIGsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcbiAgICBpZiAodG9rZW4gPT09ICdrbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiBtKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ21vJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENNaW51dGVzKCksIHtcbiAgICAgICAgdW5pdDogJ21pbnV0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdzbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDU2Vjb25kcygpLCB7XG4gICAgICAgIHVuaXQ6ICdzZWNvbmQnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiBYKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1onO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSAnWCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgY2FzZSAnWFgnOlxuICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgfVxuICB9LFxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiB4KGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gb3JpZ2luYWxEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlICd4eHh4JzpcbiAgICAgIGNhc2UgJ3h4JzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gTyhkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICdPJzpcbiAgICAgIGNhc2UgJ09PJzpcbiAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICdPT09PJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24geihkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlICd6JzpcbiAgICAgIGNhc2UgJ3p6JzpcbiAgICAgIGNhc2UgJ3p6eic6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlICd6enp6JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnR01UJyArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gdChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBNYXRoLmZsb29yKG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiBUKGRhdGUsIHRva2VuLCBfbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3JpZ2luYWxEYXRlID0gb3B0aW9ucy5fb3JpZ2luYWxEYXRlIHx8IGRhdGU7XG4gICAgdmFyIHRpbWVzdGFtcCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICB2YXIgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gIHZhciBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHZhciBkZWxpbWl0ZXIgPSBkaXJ0eURlbGltaXRlciB8fCAnJztcbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgdmFyIHNpZ24gPSBvZmZzZXQgPiAwID8gJy0nIDogJysnO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkaXJ0eURlbGltaXRlcikge1xuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gIHZhciBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJ2YXIgZGF0ZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ1AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ1BQUFAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgdGltZUxvbmdGb3JtYXR0ZXIgPSBmdW5jdGlvbiB0aW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgJ3AnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcCc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdtZWRpdW0nXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgIGNhc2UgJ3BwcHAnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gIH1cbn07XG52YXIgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZVRpbWVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpIHtcbiAgdmFyIG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIHZhciBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICB2YXIgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuICB2YXIgZGF0ZVRpbWVGb3JtYXQ7XG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnc2hvcnQnXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFAnOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdsb25nJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHtcbiAgICAgICAgd2lkdGg6ICdmdWxsJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXQucmVwbGFjZSgne3tkYXRlfX0nLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpLnJlcGxhY2UoJ3t7dGltZX19JywgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG52YXIgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXJcbn07XG5leHBvcnQgZGVmYXVsdCBsb25nRm9ybWF0dGVyczsiLCAiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgdmFyIHV0Y0RhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyhkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC0gdXRjRGF0ZS5nZXRUaW1lKCk7XG59IiwgInZhciBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMgPSBbJ0QnLCAnREQnXTtcbnZhciBwcm90ZWN0ZWRXZWVrWWVhclRva2VucyA9IFsnWVknLCAnWVlZWSddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHByb3RlY3RlZERheU9mWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWRXZWVrWWVhclRva2Vucy5pbmRleE9mKHRva2VuKSAhPT0gLTE7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBpZiAodG9rZW4gPT09ICdZWVlZJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdEJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH0gZWxzZSBpZiAodG9rZW4gPT09ICdERCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCAoaW4gYFwiLmNvbmNhdChmb3JtYXQsIFwiYCkgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdG8gdGhlIGlucHV0IGBcIikuY29uY2F0KGlucHV0LCBcImA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFwiKSk7XG4gIH1cbn0iLCAidmFyIGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiAnbGVzcyB0aGFuIGEgc2Vjb25kJyxcbiAgICBvdGhlcjogJ2xlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6ICcxIHNlY29uZCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gc2Vjb25kcydcbiAgfSxcbiAgaGFsZkFNaW51dGU6ICdoYWxmIGEgbWludXRlJyxcbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIG1pbnV0ZScsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiAnMSBtaW51dGUnLFxuICAgIG90aGVyOiAne3tjb3VudH19IG1pbnV0ZXMnXG4gIH0sXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBob3VyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeEhvdXJzOiB7XG4gICAgb25lOiAnMSBob3VyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBob3VycydcbiAgfSxcbiAgeERheXM6IHtcbiAgICBvbmU6ICcxIGRheScsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gZGF5cydcbiAgfSxcbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6ICdhYm91dCAxIHdlZWsnLFxuICAgIG90aGVyOiAnYWJvdXQge3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICB4V2Vla3M6IHtcbiAgICBvbmU6ICcxIHdlZWsnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHdlZWtzJ1xuICB9LFxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6ICdhYm91dCAxIG1vbnRoJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIHhNb250aHM6IHtcbiAgICBvbmU6ICcxIG1vbnRoJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtb250aHMnXG4gIH0sXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgeFllYXJzOiB7XG4gICAgb25lOiAnMSB5ZWFyJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogJ292ZXIgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ292ZXIge3tjb3VudH19IHllYXJzJ1xuICB9LFxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6ICdhbG1vc3QgMSB5ZWFyJyxcbiAgICBvdGhlcjogJ2FsbW9zdCB7e2NvdW50fX0geWVhcnMnXG4gIH1cbn07XG52YXIgZm9ybWF0RGlzdGFuY2UgPSBmdW5jdGlvbiBmb3JtYXREaXN0YW5jZSh0b2tlbiwgY291bnQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgdmFyIHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKCd7e2NvdW50fX0nLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiAnaW4gJyArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArICcgYWdvJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREaXN0YW5jZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgdmFyIGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRGb3JtYXRMb25nRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4vaW5kZXguanNcIjtcbnZhciBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogJ0VFRUUsIE1NTU0gZG8sIHknLFxuICBsb25nOiAnTU1NTSBkbywgeScsXG4gIG1lZGl1bTogJ01NTSBkLCB5JyxcbiAgc2hvcnQ6ICdNTS9kZC95eXl5J1xufTtcbnZhciB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogJ2g6bW06c3MgYSB6enp6JyxcbiAgbG9uZzogJ2g6bW06c3MgYSB6JyxcbiAgbWVkaXVtOiAnaDptbTpzcyBhJyxcbiAgc2hvcnQ6ICdoOm1tIGEnXG59O1xudmFyIGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06ICd7e2RhdGV9fSwge3t0aW1lfX0nLFxuICBzaG9ydDogJ3t7ZGF0ZX19LCB7e3RpbWV9fSdcbn07XG52YXIgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiAnZnVsbCdcbiAgfSksXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0TG9uZzsiLCAidmFyIGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogJ1AnXG59O1xudmFyIGZvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmUodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSB7XG4gIHJldHVybiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UmVsYXRpdmU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGlydHlJbmRleCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0ID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiAnc3RhbmRhbG9uZSc7XG4gICAgdmFyIHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSAnZm9ybWF0dGluZycgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICB2YXIgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFyIHdpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9kZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciBfd2lkdGggPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCAmJiBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW193aWR0aF0gfHwgYXJncy52YWx1ZXNbX2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayhkaXJ0eUluZGV4KSA6IGRpcnR5SW5kZXg7XG4gICAgLy8gQHRzLWlnbm9yZTogRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufSIsICJpbXBvcnQgYnVpbGRMb2NhbGl6ZUZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qc1wiO1xudmFyIGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0InLCAnQSddLFxuICBhYmJyZXZpYXRlZDogWydCQycsICdBRCddLFxuICB3aWRlOiBbJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknXVxufTtcbnZhciBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFsnMScsICcyJywgJzMnLCAnNCddLFxuICBhYmJyZXZpYXRlZDogWydRMScsICdRMicsICdRMycsICdRNCddLFxuICB3aWRlOiBbJzFzdCBxdWFydGVyJywgJzJuZCBxdWFydGVyJywgJzNyZCBxdWFydGVyJywgJzR0aCBxdWFydGVyJ11cbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbnZhciBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ10sXG4gIGFiYnJldmlhdGVkOiBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10sXG4gIHdpZGU6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddXG59O1xudmFyIGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXSxcbiAgc2hvcnQ6IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sXG4gIHdpZGU6IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXVxufTtcbnZhciBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiAnYScsXG4gICAgcG06ICdwJyxcbiAgICBtaWRuaWdodDogJ21pJyxcbiAgICBub29uOiAnbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06ICdBTScsXG4gICAgcG06ICdQTScsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICB3aWRlOiB7XG4gICAgYW06ICdhLm0uJyxcbiAgICBwbTogJ3AubS4nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfVxufTtcbnZhciBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH1cbn07XG52YXIgb3JkaW5hbE51bWJlciA9IGZ1bmN0aW9uIG9yZGluYWxOdW1iZXIoZGlydHlOdW1iZXIsIF9vcHRpb25zKSB7XG4gIHZhciBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgdmFyIHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3N0JztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICduZCc7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAncmQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgJ3RoJztcbn07XG52YXIgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXI6IG9yZGluYWxOdW1iZXIsXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgYXJndW1lbnRDYWxsYmFjazogZnVuY3Rpb24gYXJndW1lbnRDYWxsYmFjayhxdWFydGVyKSB7XG4gICAgICByZXR1cm4gcXVhcnRlciAtIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZScsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiAnd2lkZSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGl6ZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB2YXIgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUGF0dGVybnMgPSB3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdIHx8IGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcbiAgICB2YXIga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCBmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKTtcbiAgICB9KSA6IGZpbmRLZXkocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwcmVkaWNhdGUob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIHZhciBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG4gICAgdmFyIHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICByZXN0OiByZXN0XG4gICAgfTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTWF0Y2hGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4vaW5kZXguanNcIjtcbmltcG9ydCBidWlsZE1hdGNoUGF0dGVybkZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4vaW5kZXguanNcIjtcbnZhciBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xudmFyIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xudmFyIG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaVxufTtcbnZhciBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXVxufTtcbnZhciBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pXG59O1xudmFyIHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXVxufTtcbnZhciBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaVxufTtcbnZhciBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9eai9pLCAvXmYvaSwgL15tL2ksIC9eYS9pLCAvXm0vaSwgL15qL2ksIC9eai9pLCAvXmEvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldLFxuICBhbnk6IFsvXmphL2ksIC9eZi9pLCAvXm1hci9pLCAvXmFwL2ksIC9ebWF5L2ksIC9eanVuL2ksIC9eanVsL2ksIC9eYXUvaSwgL15zL2ksIC9eby9pLCAvXm4vaSwgL15kL2ldXG59O1xudmFyIG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2lcbn07XG52YXIgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldXG59O1xudmFyIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pXG59O1xudmFyIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaVxuICB9XG59O1xudmFyIG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2sodmFsdWUpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgfSksXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueScsXG4gICAgdmFsdWVDYWxsYmFjazogZnVuY3Rpb24gdmFsdWVDYWxsYmFjayhpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgICB9XG4gIH0pLFxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ2FueScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogJ2FueSdcbiAgfSlcbn07XG5leHBvcnQgZGVmYXVsdCBtYXRjaDsiLCAiaW1wb3J0IGZvcm1hdERpc3RhbmNlIGZyb20gXCIuL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRMb25nIGZyb20gXCIuL19saWIvZm9ybWF0TG9uZy9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdFJlbGF0aXZlIGZyb20gXCIuL19saWIvZm9ybWF0UmVsYXRpdmUvaW5kZXguanNcIjtcbmltcG9ydCBsb2NhbGl6ZSBmcm9tIFwiLi9fbGliL2xvY2FsaXplL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2ggZnJvbSBcIi4vX2xpYi9tYXRjaC9pbmRleC5qc1wiO1xuLyoqXG4gKiBAdHlwZSB7TG9jYWxlfVxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF17QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnB9XG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3Nde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3N9XG4gKi9cbnZhciBsb2NhbGUgPSB7XG4gIGNvZGU6ICdlbi1VUycsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBsb2NhbGU7IiwgImltcG9ydCBkZWZhdWx0TG9jYWxlIGZyb20gXCIuLi8uLi9sb2NhbGUvZW4tVVMvaW5kZXguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7IiwgImltcG9ydCBpc1ZhbGlkIGZyb20gXCIuLi9pc1ZhbGlkL2luZGV4LmpzXCI7XG5pbXBvcnQgc3ViTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9zdWJNaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IGZvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBsb25nRm9ybWF0dGVycyBmcm9tIFwiLi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMvaW5kZXguanNcIjtcbmltcG9ydCBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIGZyb20gXCIuLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbiwgdGhyb3dQcm90ZWN0ZWRFcnJvciB9IGZyb20gXCIuLi9fbGliL3Byb3RlY3RlZFRva2Vucy9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vX2xpYi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9fbGliL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzXCI7IC8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xudmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbnZhciBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xudmFyIGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbnZhciBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xudmFyIHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiBcdTI2QTBcdUZFMEYgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcn1cbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXJ9KS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZm9ybWF0IC0gdGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBhbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICogQHBhcmFtIHtMb2NhbGV9IFtvcHRpb25zLmxvY2FsZT1kZWZhdWx0TG9jYWxlXSAtIHRoZSBsb2NhbGUgb2JqZWN0LiBTZWUgW0xvY2FsZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9Mb2NhbGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zPWZhbHNlXSAtIGlmIHRydWUsIGFsbG93cyB1c2FnZSBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgYFlZYCBhbmQgYFlZWVlgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIGRheSBvZiB5ZWFyIHRva2VucyBgRGAgYW5kIGBERGA7XG4gKiAgIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy53ZWVrU3RhcnRzT25gIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3XG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KGRpcnR5RGF0ZSwgZGlydHlGb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9vcHRpb25zJGxvY2FsZSwgX3JlZjIsIF9yZWYzLCBfcmVmNCwgX29wdGlvbnMkZmlyc3RXZWVrQ29uLCBfb3B0aW9ucyRsb2NhbGUyLCBfb3B0aW9ucyRsb2NhbGUyJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiwgX3JlZjUsIF9yZWY2LCBfcmVmNywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUzLCBfb3B0aW9ucyRsb2NhbGUzJG9wdGksIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQ7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgZm9ybWF0U3RyID0gU3RyaW5nKGRpcnR5Rm9ybWF0U3RyKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIGxvY2FsZSA9IChfcmVmID0gKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbGUpICE9PSBudWxsICYmIF9vcHRpb25zJGxvY2FsZSAhPT0gdm9pZCAwID8gX29wdGlvbnMkbG9jYWxlIDogZGVmYXVsdE9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogZGVmYXVsdExvY2FsZTtcbiAgdmFyIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IHRvSW50ZWdlcigoX3JlZjIgPSAoX3JlZjMgPSAoX3JlZjQgPSAoX29wdGlvbnMkZmlyc3RXZWVrQ29uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX29wdGlvbnMkZmlyc3RXZWVrQ29uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyRmaXJzdFdlZWtDb24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUyLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTIkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMiRvcHRpLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjQgIT09IHZvaWQgMCA/IF9yZWY0IDogZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsID0gZGVmYXVsdE9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIuZmlyc3RXZWVrQ29udGFpbnNEYXRlKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiAxKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDEgYW5kIDcgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoIShmaXJzdFdlZWtDb250YWluc0RhdGUgPj0gMSAmJiBmaXJzdFdlZWtDb250YWluc0RhdGUgPD0gNykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZmlyc3RXZWVrQ29udGFpbnNEYXRlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZjUgPSAoX3JlZjYgPSAoX3JlZjcgPSAoX29wdGlvbnMkd2Vla1N0YXJ0c09uID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX29wdGlvbnMkd2Vla1N0YXJ0c09uICE9PSB2b2lkIDAgPyBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPSBfb3B0aW9ucyRsb2NhbGUzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZTMkb3B0aSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX29wdGlvbnMkbG9jYWxlMyRvcHRpLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjcgIT09IHZvaWQgMCA/IF9yZWY3IDogZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNiAhPT0gdm9pZCAwID8gX3JlZjYgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDQud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmNSAhPT0gdm9pZCAwID8gX3JlZjUgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgaWYgKCFsb2NhbGUubG9jYWxpemUpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBsb2NhbGl6ZSBwcm9wZXJ0eScpO1xuICB9XG4gIGlmICghbG9jYWxlLmZvcm1hdExvbmcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbG9jYWxlIG11c3QgY29udGFpbiBmb3JtYXRMb25nIHByb3BlcnR5Jyk7XG4gIH1cbiAgdmFyIG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGRhdGUgaW4gc3lzdGVtIHRpbWV6b25lIHRvIHRoZSBzYW1lIGRhdGUgaW4gVVRDKzAwOjAwIHRpbWV6b25lLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIFVUQyBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwgbG9jYWxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGVtLlxuICAvLyBTZWUgYW4gaXNzdWUgYWJvdXQgVVRDIGZ1bmN0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNzZcbiAgdmFyIHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUpO1xuICB2YXIgdXRjRGF0ZSA9IHN1Yk1pbGxpc2Vjb25kcyhvcmlnaW5hbERhdGUsIHRpbWV6b25lT2Zmc2V0KTtcbiAgdmFyIGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uOiB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgX29yaWdpbmFsRGF0ZTogb3JpZ2luYWxEYXRlXG4gIH07XG4gIHZhciByZXN1bHQgPSBmb3JtYXRTdHIubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gJ3AnIHx8IGZpcnN0Q2hhcmFjdGVyID09PSAnUCcpIHtcbiAgICAgIHZhciBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApLm1hcChmdW5jdGlvbiAoc3Vic3RyaW5nKSB7XG4gICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgcmV0dXJuIGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgaWYgKGZvcm1hdHRlcikge1xuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMpICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHN1YnN0cmluZykpIHtcbiAgICAgICAgdGhyb3dQcm90ZWN0ZWRFcnJvcihzdWJzdHJpbmcsIGRpcnR5Rm9ybWF0U3RyLCBTdHJpbmcoZGlydHlEYXRlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKHV0Y0RhdGUsIHN1YnN0cmluZywgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Zvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgJyArIGZpcnN0Q2hhcmFjdGVyICsgJ2AnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSkuam9pbignJyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgdmFyIG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn0iLCAiaW1wb3J0IHsgVEZpbGUsIEFwcCwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudFRvdGFsOiBudW1iZXIsIGxheWVyMmNvdW50OiBudW1iZXIsIGxheWVyM2NvdW50OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdGNvbnN0IHBlcmNlbnRMYXllcjIgPSBsYXllcjJjb3VudCAqIDEwMCAvIGNoYXJDb3VudFRvdGFsO1xyXG4gICAgY29uc3QgcGVyY2VudExheWVyMyA9IGxheWVyM2NvdW50ICogMTAwIC8gbGF5ZXIyY291bnQ7XHJcblx0dmFyIGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHR2YXIgbGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdHZhciBtYWp1cml0eSA9IDA7XHJcblx0aWYgKGNoYXJDb3VudFRvdGFsIDwgMzAwMCkge1xyXG5cdFx0bWFqdXJpdHkgPSAwO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgTm90ZSBpcyBub3QgbG9uZyBlbm91Z2ggdG8gZ2V0IGludG8gY2FsY3VsYXRpb24gZm9yIG1hanVyaXR5LiBUaGUgdG90YWwgY2hhcmFjdGVyIGNvdW50IGlzICR7Y2hhckNvdW50VG90YWx9YCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGlmIChwZXJjZW50TGF5ZXIyID09IDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMzApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDQwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMjtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyM2NvdW50ID09IDApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIzIDw9IDEwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAyMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxheWVyMm1hanVyaXR5ID09IDEgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDE7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDIgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID49IDMgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gMCkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDM7XHJcblx0XHR9IGVsc2UgaWYgKChsYXllcjJtYWp1cml0eSA9PSAzIHx8IGxheWVyMm1hanVyaXR5ID09IDQpICYmIChsYXllcjNtYWp1cml0eSA9PSA0IHx8IGxheWVyM21hanVyaXR5ID09IDUpKSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNDtcclxuXHRcdH0gZWxzZSBpZiAobGF5ZXIybWFqdXJpdHkgPT0gNSAmJiBsYXllcjNtYWp1cml0eSA9PSA1KSB7XHJcblx0XHRcdG1hanVyaXR5ID0gNTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdFxyXG5cdC8vY29uc29sZS5sb2coYGxheWVyMm1hanVyaXR5OiAke2xheWVyMm1hanVyaXR5fSBcXHRsYXllcjNtYWp1cml0eTogJHtsYXllcjNtYWp1cml0eX0gXFx0bWFqdXJpdHk6ICR7bWFqdXJpdHl9YCk7XHJcblx0Ly9jb25zb2xlLmxvZyhgcGVyY2VudExheWVyMjogJHtwZXJjZW50TGF5ZXIyfSBcXHRwZXJjZW50TGF5ZXIzOiAke3BlcmNlbnRMYXllcjN9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYGNoYXJDb3VudFRvdGFsOiAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdHJldHVybiBtYWp1cml0eTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudExheWVyMkFuZExheWVyM0NoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYXllcjI6IHN0cmluZywgbGF5ZXIzOiBzdHJpbmcpOiB7IGNoYXJDb3VudDogbnVtYmVyOyBoaWdobGlnaHRlZENvdW50OiBudW1iZXI7IGJvbGRDb3VudDogbnVtYmVyIH0ge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHJcblx0Ly8gY2FsY3VsYXRlIExheWVyIDIgJiAzIExlbmd0aFxyXG5cclxuXHQvLyBDb3VudCB0aGUgaGlnaGxpZ2h0ZWQgYW5kIGJvbGQgY2hhcmFjdGVyc1xyXG5cdGxldCBoaWdobGlnaHRlZENvdW50ID0gMDtcclxuXHRsZXQgYm9sZENvdW50ID0gMDtcclxuICBcclxuXHR2YXIgbGF5ZXIyZXhjbHVkZSA9ICc9J1xyXG5cdHZhciBsYXllcjNleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdC8vIHRvIGhhdmUgdGhlIHJlZyBleCBjb3JyZWN0LiBvdGhlcndpc2UgaXQgd2lsbCBnZXQgc3R1YyB3aXRoICoqLlxyXG5cdGlmKGxheWVyMyA9PSAnKionKXtcclxuXHRcdGxheWVyMyA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHRcdGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR9XHJcblx0aWYobGF5ZXIyID09ICcqKicpe1xyXG5cdFx0bGF5ZXIyID0gJ1xcXFwqXFxcXConXHJcblx0XHRsYXllcjNleGNsdWRlID0gJz0nXHJcblx0XHRsYXllcjJleGNsdWRlID0gJ1xcXFwqJ1xyXG5cdH1cclxuICBcdFxyXG5cclxuXHRjb25zdCBoaWdobGlnaHRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIyfVteJHtsYXllcjJleGNsdWRlfV0rJHtsYXllcjJ9YCwgXCJnXCIpO1xyXG4gICAgY29uc3QgYm9sZFJlZ2V4ID0gbmV3IFJlZ0V4cChgJHtsYXllcjN9W14ke2xheWVyM2V4Y2x1ZGV9XSske2xheWVyM31gLCBcImdcIik7XHJcbiAgXHJcblx0Ly8gQ291bnQgaGlnaGxpZ2h0ZWQgY2hhcmFjdGVyc1xyXG5cdGNvbnN0IGhpZ2hsaWdodGVkTWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goaGlnaGxpZ2h0UmVnZXgpO1xyXG5cdGlmIChoaWdobGlnaHRlZE1hdGNoZXMpIHtcclxuXHQgIGhpZ2hsaWdodGVkQ291bnQgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoaGlnaGxpZ2h0ZWRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICc9PSdcclxuXHQgIC8vIGZpcnN0IHRha2UgdGhlIGxheWVyMiAoaGlnaGxpZ2h0ZWRDb3VudCkgYW5kIHJ1biBvbiB0aGlzIHRoZSAnYm9sZFJlZ2V4J1xyXG5cdCAgLy8gQ291bnQgYm9sZCBjaGFyYWN0ZXJzXHJcblx0ICBjb25zdCBsYXllcjJTdHJpbmcgPSBoaWdobGlnaHRlZE1hdGNoZXMuam9pbihcIlwiKTtcclxuXHQgIGNvbnN0IGJvbGRNYXRjaGVzID0gbGF5ZXIyU3RyaW5nLm1hdGNoKGJvbGRSZWdleCk7XHJcblx0ICBpZiAoYm9sZE1hdGNoZXMpIHtcclxuXHQgICAgYm9sZENvdW50ID0gYm9sZE1hdGNoZXMuam9pbihcIlwiKS5sZW5ndGggLSAoYm9sZE1hdGNoZXMubGVuZ3RoICogNCk7IC8vIFN1YnRyYWN0IHRoZSBsZW5ndGggb2YgJyoqJ1xyXG5cdCAgfVxyXG5cdH1cclxuICBcclxuXHRcclxuXHRcclxuICBcclxuXHRyZXR1cm4geyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9O1xyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGV2ZWxPZk1hdHVyaXR5KG5vdGVMZW5ndGg6IG51bWJlciwgbGVuZ3RoT2ZUaXRsZTogbnVtYmVyLCBJbmxpbmtzOiBudW1iZXIsIG91dGdvaW5nTGlua3M6IG51bWJlciwgcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgbm90ZUxlbmd0aDogJHtub3RlTGVuZ3RofVxcdGxlbmd0aE9mVGl0bGU6ICR7bGVuZ3RoT2ZUaXRsZX1cXHRJbmxpbmtzOiAke0lubGlua3N9XFx0b3V0Z29pbmdMaW5rczogJHtvdXRnb2luZ0xpbmtzfWApXHJcblx0XHJcblx0Ly8gZGVjaWRlIGlmIG5vdGVMZW5ndGgtbWFqdXJpdHkgb3IgcHJvZ3Jlc3NpdmVTdW0tbWFqdXJpdHkgc2hhbGwgYmUgdXNlZFxyXG5cdHZhciBsZW5ndGhNYWp1cml0eSA9IDA7XHJcblx0aWYobm90ZUxlbmd0aCA+PSBwcm9ncmVzc2l2ZVN1bU1hanVyaXR5KSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IG5vdGVMZW5ndGg7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxlbmd0aE1hanVyaXR5ID0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eTtcclxuXHR9XHJcblx0XHJcblx0Y29uc3QgdG90YWxXZWlnaHQgOiBudW1iZXIgPSBsZW5ndGhNYWp1cml0eSArIGxlbmd0aE9mVGl0bGUgKyBJbmxpbmtzICsgb3V0Z29pbmdMaW5rcztcclxuXHRjb25zdCBhdmVyYWdlV2VpZ2h0ID0gdG90YWxXZWlnaHQgLyA1O1xyXG5cdC8vIGNvbnNvbGUubG9nKGB0b3RhbFdlaWdodDogJHt0b3RhbFdlaWdodH1cXHRhdmVyYWdlV2VpZ2h0OiAke2F2ZXJhZ2VXZWlnaHR9YClcclxuXHRpZiAoYXZlcmFnZVdlaWdodCA8IDAuNSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDEpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAyKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMykge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMuNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDQpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZU91dGxpbmtzKG91dGxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vIGNvbnNvbGUubG9nKGBvdXRsaW5rczogJHtvdXRsaW5rc31gKVxyXG5cdGlmIChvdXRsaW5rcyA8IDIpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAzKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgNSkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDkpIHtcclxuXHRcdHJldHVybiA1O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDEyKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVJbmxpbmtzKG51bUlubGlua3M6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly92YXIgcHJvemVudElubGlua3MgPSBudW1JbmxpbmtzICogMTAwIC8gbnVtQWxsRmlsZXM7XHJcblx0Ly9jb25zb2xlLmxvZyhgbnVtSW5saW5rczogJHtudW1JbmxpbmtzfVxcdG51bUFsbEZpbGVzOiAke251bUFsbEZpbGVzfVxcdHByb3plbnRJbmxpbmtzOiAke3Byb3plbnRJbmxpbmtzfWApXHJcblx0LyppZiAocHJvemVudElubGlua3MgPCAwLjAwNSB8fCBwcm96ZW50SW5saW5rcyA+IDAuMSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlICovIGlmIChudW1JbmxpbmtzID09IDApIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDQpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDgpIHtcclxuXHRcdHJldHVybiAyO1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA8IDExKSB7XHJcblx0XHRyZXR1cm4gMztcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxNikge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzID49IDE2ICYmIG51bUlubGlua3MgPCA1MDAgKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVEaXJlY3Rpb24ocmF0aW5nQ3VycmVudDogc3RyaW5nLCByYXRpbmdOZXc6IG51bWJlcik6IHN0cmluZyB7XHJcblx0bGV0IHJhdGluZyA9IFwiXCJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID4gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyQjA3XHVGRTBGXCJcclxuXHR9IGVsc2UgaWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA8IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwNlx1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPT0gcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXHUyN0ExXHVGRTBGXCJcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcIlxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJhdGluZ1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMzApIHtcclxuXHRyZXR1cm4gMDtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDgwKSB7XHJcblx0cmV0dXJuIDE7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxMDApIHtcclxuXHRyZXR1cm4gMztcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE1MCkge1xyXG5cdHJldHVybiA1O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTkwKSB7XHJcblx0cmV0dXJuIDQ7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyMTApIHtcclxuXHRyZXR1cm4gMjtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDI1MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVOb3RlTGVuZ3RoKGNvbnRlbmxlbmd0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRpZiAoY29udGVubGVuZ3RoIDwgMjAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDU1MCkge1xyXG5cdFx0cmV0dXJuIDQ7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMDAwKSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDEyMDApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjAwMCkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAyNTAwKSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDMwMDApIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZPdXRsaW5rcyhhY3RpdmVGaWxlOiBURmlsZSk6IG51bWJlciB7XHJcblx0Ly8gY29uc3QgYWN0aXZlRmlsZTogVEZpbGUgfCBudWxsID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0aWYgKCFhY3RpdmVGaWxlKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0Y29uc3QgaW5saW5rcyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShhY3RpdmVGaWxlKT8ubGlua3M7XHJcblx0cmV0dXJuIGlubGlua3MgPyBPYmplY3Qua2V5cyhpbmxpbmtzKS5sZW5ndGggOiAwO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50Q2hhcmFjdGVyc0luQWN0aXZlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIFxyXG5cdGNvbnN0IGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbiA9IGZpbGVuYW1lOyAvLy5zbGljZSgwLCAtZmlsZW5hbWUubGVuZ3RoKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGZvcm1hdHRpbmcgc3ltYm9sc1xyXG5cdGNvbnN0IHN0cmlwcGVkQ29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvWypffmBdL2csIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb246ICR7ZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9ufWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbWFya2Rvd24gaGVhZGluZ3MgdGhhdCBtYXRjaCB0aGUgZmlsZW5hbWVcclxuXHRjb25zdCBoZWFkaW5nUmVnZXggPSAvXigjKylcXHMoLiopJC9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dEhlYWRpbmdzID0gc3RyaXBwZWRDb250ZW50LnJlcGxhY2UoaGVhZGluZ1JlZ2V4LCAobWF0Y2gsIHAxLCBwMikgPT4ge1xyXG5cdFxyXG5cdFx0Ly8gY29uc29sZS5sb2coYHAyOiAke3AyfWApO1xyXG5cdFx0aWYgKHAyID09PSBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24pIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0fSk7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0SGVhZGluZ3M6ICR7Y29udGVudFdpdGhvdXRIZWFkaW5nc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1ldGFkYXRhIGJsb2NrcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbWV0YWRhdGFSZWdleCA9IC9eLS0tW1xcc1xcU10qPy0tLS9nbTtcclxuXHRjb25zdCBjb250ZW50V2l0aG91dE1ldGFkYXRhID0gY29udGVudFdpdGhvdXRIZWFkaW5ncy5yZXBsYWNlKG1ldGFkYXRhUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dE1ldGFkYXRhOiAke2NvbnRlbnRXaXRob3V0TWV0YWRhdGF9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSAjdGFncyBmcm9tIGNvdW50XHJcblx0Y29uc3QgdGFnUmVnZXggPSAvI1teXFxzXSsvZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dFRhZ3MgPSBjb250ZW50V2l0aG91dE1ldGFkYXRhLnJlcGxhY2UodGFnUmVnZXgsIFwiXCIpO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dFRhZ3M6ICR7Y29udGVudFdpdGhvdXRUYWdzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgbGlua3MgYW5kIFdpa2lwZWRpYS1saW5rcyBmcm9tIGNvdW50XHJcblx0Y29uc3QgbGlua1JlZ2V4ID0gL1xcWy4qP1xcXVxcKC4qP1xcKXxcXFtcXFsuKj9cXF1cXF0vZztcclxuXHRjb25zdCBjb250ZW50V2l0aG91dExpbmtzID0gY29udGVudFdpdGhvdXRUYWdzLnJlcGxhY2UobGlua1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRMaW5rczogJHtjb250ZW50V2l0aG91dExpbmtzfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgYmxhbmsgbmV3bGluZXNcclxuXHRjb25zdCBmaWx0ZXJlZENvbnRlbnQ6IHN0cmluZyA9IGNvbnRlbnRXaXRob3V0TGlua3NcclxuXHQuc3BsaXQoJ1xcbicpIC8vIFNwbGl0IHRoZSBjb250ZW50IGludG8gYW4gYXJyYXkgb2YgbGluZXNcclxuXHQuZmlsdGVyKGxpbmUgPT4gbGluZS50cmltKCkgIT09ICcnKSAvLyBGaWx0ZXIgb3V0IGxpbmVzIHRoYXQgYXJlIGVtcHR5IG9yIGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnLS0tJykgLy8gcmVtb3ZlIC0tLSBvbiBzaW5nbGUgbGluZXNcclxuXHQuam9pbignXFxuJyk7IC8vIEpvaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBiYWNrIGludG8gYSBzdHJpbmcsIHNlcGFyYXRlZCBieSBuZXdsaW5lc1xyXG5cdC8vIGNvbnNvbGUubG9nKGBmaWx0ZXJlZENvbnRlbnQ6ICR7ZmlsdGVyZWRDb250ZW50fWApO1xyXG5cclxuXHQvLyBDb3VudCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnNcclxuXHRjb25zdCBjaGFyQ291bnQgPSBmaWx0ZXJlZENvbnRlbnQubGVuZ3RoO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjaGFyQ291bnQ6ICR7Y2hhckNvdW50fWApO1xyXG5cclxuXHRyZXR1cm4gY2hhckNvdW50O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50X2lubGlua3Nfc2luZ2xlKGZpbGVfcGF0aDogc3RyaW5nLCB2YXVsdF9wYXRoOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdC8vIEdldCB0aGUgZmlsZW5hbWUgYW5kIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB3ZSdyZSBjb3VudGluZyBsaW5rcyB0b1xyXG5cdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlX3BhdGgpO1xyXG5cdGNvbnN0IGRpcmVjdG9yeSA9IHBhdGguZGlybmFtZShmaWxlX3BhdGgpO1xyXG5cclxuXHQvLyBDcmVhdGUgYSBzZXQgdG8gaG9sZCBhbGwgdGhlIGZpbGVzIHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCBsaW5raW5nX2ZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgc2VhcmNoIGZvciBmaWxlcyBpbiB0aGUgdmF1bHQgZGlyZWN0b3J5IHRoYXQgbGluayB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRjb25zdCB3YWxrU3luYyA9IChkaXI6IHN0cmluZywgZmlsZWxpc3Q6IHN0cmluZ1tdKSA9PiB7XHJcblx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XHJcblx0XHRmaWxlbGlzdCA9IGZpbGVsaXN0IHx8IFtdO1xyXG5cdFx0ZmlsZXMuZm9yRWFjaCgoZmlsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSkuaXNEaXJlY3RvcnkoKSkge1xyXG5cdFx0XHRcdGZpbGVsaXN0ID0gd2Fsa1N5bmMocGF0aC5qb2luKGRpciwgZmlsZSksIGZpbGVsaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHQvLyBJZ25vcmUgbm9uLW1kIGZpbGVzIGFuZCBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpIHx8IGZpbGUgPT09IGZpbGVuYW1lKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBSZWFkIHRoZSBmaWxlIGFuZCBsb29rIGZvciBsaW5rcyB0byBvdXIgdGFyZ2V0IGZpbGVcclxuXHRcdFx0XHRjb25zdCBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBcInV0Zi04XCIpO1xyXG5cdFx0XHRcdGRhdGEuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxpbmUuaW5jbHVkZXMoYFtbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XV1gKSB8fCBsaW5lLmluY2x1ZGVzKGBbJHtmaWxlbmFtZS5zbGljZSgwLCAtMyl9XWApKSB7XHJcblx0XHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgbGluayB0byBvdXIgdGFyZ2V0IGZpbGUhXHJcblx0XHRcdFx0XHRcdGxpbmtpbmdfZmlsZXMuYWRkKHBhdGgucmVsYXRpdmUoZGlyZWN0b3J5LCBwYXRoLmpvaW4oZGlyLCBmaWxlKSkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBmaWxlbGlzdDtcclxuXHR9O1xyXG5cclxuXHR3YWxrU3luYyh2YXVsdF9wYXRoLCBbXSk7XHJcblxyXG5cdC8vIGNvdW50IGhvdyBtYW55IGZpbGVzIGFyZSBtZW50aW9uaW5nIHRoZSBpbnB1dCBmaWxlXHJcblx0cmV0dXJuIGxpbmtpbmdfZmlsZXMuc2l6ZTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzKGZpbGU6IFRGaWxlKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHsgYXBwOiB7IG1ldGFkYXRhQ2FjaGU6IHsgcmVzb2x2ZWRMaW5rcyB9IH0gfSA9IHRoaXM7XHJcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XHJcblxyXG4gICAgY29uc3Qgc3VtSW5saW5rcyA9IE9iamVjdC52YWx1ZXMocmVzb2x2ZWRMaW5rcylcclxuICAgICAgICAubWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0pID0+IHZhbFtwYXRoXSA/PyAwKVxyXG4gICAgICAgIC5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0ICsgcmlnaHQsIDApO1xyXG5cclxuICAgIHJldHVybiBzdW1JbmxpbmtzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVDb3VudE1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcj4+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdFxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0XHJcblxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdFxyXG4gICAgY29uc3QgZmlsZUNvdW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcblx0XHRjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IGZpbGVDb3VudE1hcC5nZXQoZmlsZU5hbWUpIHx8IDA7XHJcblxyXG4gICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoIWV4Y2x1ZGVkU3Vic3RyaW5ncy5zb21lKHN1YnN0cmluZyA9PiBmaWxlQ29udGVudHMuaW5jbHVkZXMoc3Vic3RyaW5nKSkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICAgICAgZmlsZUNvdW50TWFwLnNldChmaWxlTmFtZSwgY3VycmVudENvdW50ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cdFx0XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVDb3VudE1hcDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RmlsZU1hcCA9IGFzeW5jIChhcHA6IEFwcCwgZXhjbHVkZVRhZzogc3RyaW5nLCBleGNsdWRlRm9sZGVyOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlW10+ID0+IHtcclxuXHJcbiAgICBjb25zdCB7IHZhdWx0IH0gPSBhcHA7XHJcblxyXG5cdC8vIGZpbGVzIHdpdGggdGhpcyAjdGFncyBpbiB0byBpZ25vcmVcclxuXHRsZXQgZXhjbHVkZWRTdWJzdHJpbmdzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlVGFnID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRTdWJzdHJpbmdzID0gZXhjbHVkZVRhZy5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0Ly9jb25zb2xlLmxvZyhgZXhjbHVkZWRTdWJzdHJpbmdzOiAke2V4Y2x1ZGVkU3Vic3RyaW5nc31gKVxyXG5cdC8vIGZvbGRlcnMgdG8gaWdub3JlIC5tZC1maWxlcyBpblxyXG5cdGxldCBleGNsdWRlZEZvbGRlcnMgOiBzdHJpbmdbXSA9IFtdXHJcblx0aWYgKGV4Y2x1ZGVGb2xkZXIgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBbXVxyXG5cdH0gZWxzZSB7XHJcblx0XHRleGNsdWRlZEZvbGRlcnMgPSBleGNsdWRlRm9sZGVyLnNwbGl0KCcsICcpO1xyXG5cdH1cclxuXHRleGNsdWRlZEZvbGRlcnMucHVzaCgnLm9ic2lkaWFuJywgJy50cmFzaCcpOyAvLyBoYXJkY29kZSB0aGUgYmFzaWMgZm9sZGVyc1xyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkRm9sZGVyczogJHtleGNsdWRlZEZvbGRlcnN9YClcdFxyXG4gICAgbGV0IGZpbGVBcnJheTogVEZpbGVbXSA9IFtdO1xyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBmaWxlLnBhdGg6ICR7ZmlsZS5wYXRofWApXHJcblx0XHRpZiAoKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpIHx8IGV4Y2x1ZGVUYWcubGVuZ3RoID09PSAwKSAmJiBcclxuICAgICAgICAgICAgIWV4Y2x1ZGVkRm9sZGVycy5zb21lKGZvbGRlciA9PiBmaWxlLnBhdGguaW5jbHVkZXMoZm9sZGVyKSkpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgZmlsZSAke2ZpbGV9IGdldCdzIGFkZGVkLmApXHJcblx0XHRcdGZpbGVBcnJheS5wdXNoKGZpbGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGVBcnJheTtcclxufTtcclxuIiwgImV4cG9ydCBpbnRlcmZhY2UgQmFkZ2Uge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGxldmVsOiBzdHJpbmc7XHJcbiAgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZSZWNlaXZlQUJhZGdlKGxldmVsT2xkOiBudW1iZXIsIGxldmVsTmV3OiBudW1iZXIpOiBib29sZWFuIHtcclxuICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgbGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcbiAgZm9yIChsZXQgaT0wOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspe1xyXG4gICAgaWYgKGxldmVsT2xkIDwgYmFkZ2VMZXZlbHNbaV0gJiYgbGV2ZWxOZXcgPj0gYmFkZ2VMZXZlbHNbaV0pe1xyXG4gICAgICByZWNlaXZlQmFkZ2UgPSB0cnVlXHJcbiAgICB9IFxyXG4gIH1cclxuICByZXR1cm4gcmVjZWl2ZUJhZGdlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWRnZUZvckxldmVsKGxldmVsOiBudW1iZXIsIGluZm9ybTogYm9vbGVhbik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlTGV2ZWxzOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDI3LCAzNSwgNDIsIDUwLCA2MCwgNzUsIDgyLCA5MCwgMTAwXTtcclxuICAgIGNvbnN0IGJhZGdlTmFtZXM6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJFbmxpZ2h0ZW5lZCBOb3ZpY2VcIiwgZGVzY3JpcHRpb246IFwiSHV6emFoISBZb3UndmUgZW1iYXJrZWQgb24gdGhlIHBhdGggb2Yga25vd2xlZGdlIGFuZCBlYXJuZWQgdGhlIHRpdGxlIG9mICdFbmxpZ2h0ZW5lZCBOb3ZpY2UuJyBUaGUgam91cm5leSBoYXMganVzdCBiZWd1biwgYW5kIHlvdSdyZSBhbHJlYWR5IHJhZGlhdGluZyB3aXNkb20gbGlrZSBhIGJhYnkgc3VuIVwiLCBsZXZlbDogXCJsZXZlbCA1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiICwgbGV2ZWw6IFwibGV2ZWwgMTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQnJhaW5pYWMgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiQnJhdm8hIEFzIGEgJ0JyYWluaWFjIFRyYWlsYmxhemVyLCcgeW91J3ZlIGNhcnZlZCB5b3VyIHdheSB0aHJvdWdoIGEganVuZ2xlIG9mIGluZm9ybWF0aW9uIGFuZCBlbWVyZ2VkIHZpY3RvcmlvdXMuIFlvdXIgaW50ZWxsZWN0IGlzIGEgYmVhY29uIHNoaW5pbmcgYnJpZ2h0bHkgZm9yIG90aGVycyB0byBmb2xsb3chXCIgLCBsZXZlbDogXCJsZXZlbCAyMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiSW5mbyBOaW5qYSBNYXN0ZXJcIiwgZGVzY3JpcHRpb246IFwiSW5jcmVkaWJsZSEgWW91J3ZlIHJlYWNoZWQgdGhlIHBpbm5hY2xlIG9mIHN0ZWFsdGh5IGtub3dsZWRnZSBtYW5hZ2VtZW50LiBBcyBhbiAnSW5mbyBOaW5qYSBNYXN0ZXIsJyB5b3UgY2FuIHNuYXRjaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzaGFkb3dzIGxpa2UgYSBkaWdpdGFsIG5pbmphIVwiICwgbGV2ZWw6IFwibGV2ZWwgMzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiV2lzZSBPd2wgR3VydVwiLCBkZXNjcmlwdGlvbjogXCJXaG9vLWhvbyEgWW91J3ZlIGFjaGlldmVkICdXaXNlIE93bCBHdXJ1JyBzdGF0dXMuIFlvdXIgd2lzZG9tIGlzIGxlZ2VuZGFyeSwgYW5kIHlvdXIgaG9vdHMgb2Yga25vd2xlZGdlIGVjaG8gdGhyb3VnaCB0aGUgZm9yZXN0IG9mIGlnbm9yYW5jZSFcIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVpbnN0ZWluIEluY2FybmF0ZVwiLCBkZXNjcmlwdGlvbjogXCJFdXJla2EhIFlvdSd2ZSBiZWNvbWUgYW4gJ0VpbnN0ZWluIEluY2FybmF0ZSwnIHB1c2hpbmcgdGhlIGJvdW5kYXJpZXMgb2YgdW5kZXJzdGFuZGluZyBhbmQgYmVuZGluZyB0aGUgZmFicmljIG9mIGtub3dsZWRnZSB0byB5b3VyIHdpbGwhXCIgLCBsZXZlbDogXCJsZXZlbCA1MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJNYXN0ZXJtaW5kIFNhZ2VcIiwgZGVzY3JpcHRpb246IFwiTWFnbmlmaWNlbnQhIFlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgcmFuayBvZiAnTWFzdGVybWluZCBTYWdlLCcgZ3VpZGluZyB0aGUgcml2ZXJzIG9mIGluZm9ybWF0aW9uIGFuZCBlbmxpZ2h0ZW5pbmcgYWxsIHdobyBzZWVrIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDYwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkNlcmVicmFsIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQnJhdmlzc2ltbyEgWW91J3JlIG5vdyBhICdDZXJlYnJhbCBNYWVzdHJvLCcgY29uZHVjdGluZyB0aGUgc3ltcGhvbnkgb2Yga25vd2xlZGdlIHdpdGggdGhlIGZpbmVzc2Ugb2YgYSB2aXJ0dW9zbyBjb25kdWN0b3IhXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJaZW4gS25vd2xlZGdlIEtlZXBlclwiLCBkZXNjcmlwdGlvbjogXCJTZXJlbml0eSBhY2hpZXZlZCEgQXMgYSAnWmVuIEtub3dsZWRnZSBLZWVwZXIsJyB5b3UgbWFpbnRhaW4gYSB0cmFucXVpbCBtaW5kIHdoaWxlIG1hbmFnaW5nIHZhc3QgcG9vbHMgb2Yga25vd2xlZGdlIHdpdGggZ3JhY2UgYW5kIHBvaXNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkXCIsIGRlc2NyaXB0aW9uOiBcIkFsbCBoYWlsIHRoZSAnR3JhbmQgQXJjaGl2aXN0IE92ZXJsb3JkIScgWW91IHdpZWxkIHRoZSBrbm93bGVkZ2Ugb2YgYWdlcyBhbmQgaG9sZCB0aGUga2V5cyB0byB1bmxvY2sgdGhlIGdhdGVzIG9mIHdpc2RvbSFcIiAsIGxldmVsOiBcImxldmVsIDkwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nXCIsIGRlc2NyaXB0aW9uOiBcIkNvbmdyYXR1bGF0aW9ucywgb2ggd2lzZSBvbmUhIFlvdSd2ZSBhdHRhaW5lZCB0aGUgaGlnaGVzdCBsZXZlbCBvZiBlbmxpZ2h0ZW5tZW50IGFzIHRoZSAnT21uaXNjaWVudCBTYWdlIG9mIEV2ZXJ5dGhpbmcuJyBZb3VyIHVuZGVyc3RhbmRpbmcga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciB3aXNkb20gaXMgYXMgdmFzdCBhcyB0aGUgY29zbW9zIGl0c2VsZiFcIiwgbGV2ZWw6IFwibGV2ZWwgMTAwXCIgIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc1tpbmRleF1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuICBleHBvcnQgIGZ1bmN0aW9uIGdldEJhZGdlRm9ySW5pdExldmVsKGxldmVsOiBudW1iZXIpOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbMCwgMywgNywgMTUsIDIzLCAzMCwgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzSW5pdDogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgU2Vla2VyIEluaXRpYXRlXCIsIGRlc2NyaXB0aW9uOiBcIldlbGNvbWUgdG8gdGhlIGpvdXJuZXkgb2Yga25vd2xlZGdlISBBcyBhICdMb3JlIFNlZWtlciBJbml0aWF0ZSwnIHlvdSd2ZSB0YWtlbiB5b3VyIGZpcnN0IHN0ZXBzIGludG8gdGhlIHdvcmxkIG9mIG9yZ2FuaXplZCB3aXNkb20uIFlvdXIgcXVlc3QgaGFzIGp1c3QgYmVndW4sIGFuZCB3aXRoIGVhY2ggbm90ZSB5b3UgbWFrZSwgeW91IGxheSB0aGUgZm91bmRhdGlvbiBmb3IgYSBmdXR1cmUgcmljaCB3aXRoIGluc2lnaHRzIGFuZCB1bmRlcnN0YW5kaW5nLiBZb3VyIGpvdXJuZXkgc3RhcnRzIGhlcmUsIGFuZCB0aGUgcGF0aCBhaGVhZCBpcyBmaWxsZWQgd2l0aCBwb3RlbnRpYWwgYW5kIGRpc2NvdmVyeS5cIiwgbGV2ZWw6IFwibGV2ZWwgMVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEFwcHJlbnRpY2VcIiwgZGVzY3JpcHRpb246IFwiWW91J3ZlIGhpdCB0aGUgZ3JvdW5kIHJ1bm5pbmcgd2l0aCB5b3VyIGV4aXN0aW5nIGtub3dsZWRnZSB0cmVhc3VyZXMhIFlvdSdyZSBhbHJlYWR5IGFuICdMb3JlIEFwcHJlbnRpY2UsJyBhcm1lZCB3aXRoIGEgd2VhbHRoIG9mIHdpc2RvbSBhbmQgcmVhZHkgdG8gc2hhcGUgaXQgZnVydGhlci5cIiwgbGV2ZWw6IFwibGV2ZWwgM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTYXZ2eSBTY2hvbGFyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBnaXZlbiB5b3UgYSBoZWFkIHN0YXJ0ISBZb3UncmUgbm93IGEgJ1NhdnZ5IFNjaG9sYXIsJyBjb25maWRlbnRseSBkaXZpbmcgaW50byB0aGUgc2VhIG9mIGluZm9ybWF0aW9uIHdpdGggYSB0cmVhc3VyZSB0cm92ZSBvZiBpbnNpZ2h0cy5cIiAsIGxldmVsOiBcImxldmVsIDdcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2FnZSdzIEZvdW5kYXRpb25cIiwgZGVzY3JpcHRpb246IFwiQnVpbGRpbmcgdXBvbiB5b3VyIHByZS1leGlzdGluZyBub3RlcywgeW91J3JlIGVzdGFibGlzaGluZyB0aGUgJ1NhZ2UncyBGb3VuZGF0aW9uJyBmb3IgYW4gZXZlbiBncmFuZGVyIGVkaWZpY2Ugb2Yga25vd2xlZGdlLiBZb3VyIGdyb3VuZHdvcmsgaXMgaW1wcmVzc2l2ZSFcIiAsIGxldmVsOiBcImxldmVsIDE1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2RvbSBTZWVkbGluZ1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbnVydHVyZWQgdGhlIGdyb3d0aCBvZiBhICdXaXNkb20gU2VlZGxpbmcuJyBZb3UncmUgY3VsdGl2YXRpbmcgeW91ciBnYXJkZW4gb2Yga25vd2xlZGdlIHdpdGggY2FyZSBhbmQgcGF0aWVuY2UuXCIgLCBsZXZlbDogXCJsZXZlbCAyM1wiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJQcm9kaWdpb3VzIFByZXBhcmVyXCIsIGRlc2NyaXB0aW9uOiBcIlRoYW5rcyB0byB5b3VyIHByaW9yIGVmZm9ydHMsIHlvdSdyZSBhICdQcm9kaWdpb3VzIFByZXBhcmVyLCcgc3RhbmRpbmcgdGFsbCBhbW9uZyB5b3VyIG5vdGVzIGFuZCByZWFkeSB0byBjb25xdWVyIG5ldyByZWFsbXMgb2YgdW5kZXJzdGFuZGluZy5cIiAsIGxldmVsOiBcImxldmVsIDMwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkVwaWMgRXBpcGhhbnkgRXhwbG9yZXJcIiwgZGVzY3JpcHRpb246IFwiWW91ciBwYXN0IG5vdGVzIGhhdmUgbGVkIHlvdSB0byB0aGUgZ3JhbmQgJ0VwaWMgRXBpcGhhbnkgRXhwbG9yZXInIHN0YXR1cyEgWW91J3ZlIGFscmVhZHkgYmVlbiBkb3duIGEgZmV3IHJhYmJpdCBob2xlcyBhbmQgY29tZSBvdXQgd2l0aCBkYXp6bGluZyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkxvcmUgTHVtaW5hcnlcIiwgZGVzY3JpcHRpb246IFwiV2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzIGlsbHVtaW5hdGluZyB5b3VyIHBhdGgsIHlvdSd2ZSBiZWNvbWUgYSAnTG9yZSBMdW1pbmFyeSwnIHNoaW5pbmcgbGlnaHQgb24gdGhlIG15c3RlcmllcyBvZiB0aGUgdW5pdmVyc2UsIG9uZSBpZGVhIGF0IGEgdGltZS5cIiAsIGxldmVsOiBcImxldmVsIDQyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNjcmliZSBvZiB0aGUgQW5jaWVudHNcIiwgZGVzY3JpcHRpb246IFwiWW91ciBtYXN0ZXJ5IG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYW5hZ2VtZW50IGhhcyBlbGV2YXRlZCB5b3UgdG8gdGhlIGVzdGVlbWVkIHJhbmsgb2YgdGhlICdTY3JpYmUgb2YgdGhlIEFuY2llbnRzLicgWW91ciBleGlzdGluZyBub3RlcyBoYXZlIHRyYW5zZm9ybWVkIGludG8gdHJlYXN1cmVzLCBicmlkZ2luZyB0aGUgZ2FwIGJldHdlZW4gb2xkIHdpc2RvbSBhbmQgbmV3IGRpc2NvdmVyaWVzLlwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXVyZWthIE1hZXN0cm9cIiwgZGVzY3JpcHRpb246IFwiQXJtZWQgd2l0aCB5b3VyIGV4aXN0aW5nIG5vdGVzLCB5b3UncmUgdGhlICdFdXJla2EgTWFlc3RybywnIGNvbXBvc2luZyBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHdpdGggdGhlIG1lbG9keSBvZiBkaXNjb3ZlcnkuXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDaHJvbmljbGVzIENoYW1waW9uXCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBzdGFuZGluZyBhcyBhIHRlc3RhbWVudCwgeW91J3ZlIGFzY2VuZGVkIHRvIHRoZSBpbGx1c3RyaW91cyAnQ2hyb25pY2xlcyBDaGFtcGlvbicgbGV2ZWwuIFlvdXIgam91cm5leSB0aHJvdWdoIHRpbWUncyB0YXBlc3RyeSBoYXMgYnJvdWdodCBmb3J0aCBhIHN5bXBob255IG9mIGluc2lnaHRzIHRoYXQgaGFybW9uaXplIHBhc3QgYW5kIHByZXNlbnQuXCIgLCBsZXZlbDogXCJsZXZlbCA3NVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXJcIiwgZGVzY3JpcHRpb246IFwiQXMgJ1RoZSBDdXJpb3VzIENhcnRvZ3JhcGhlciwnIHlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYXBwZWQgb3V0IHVuY2hhcnRlZCB0ZXJyaXRvcmllcyBvZiB1bmRlcnN0YW5kaW5nLiBZb3VyIGN1cmlvc2l0eSBrbm93cyBubyBib3VuZHMsIGFuZCB5b3VyIG5vdGVzIGFyZSB0aGUgY29tcGFzcyBndWlkaW5nIHlvdXIgZXhwbG9yYXRpb24uXCIgLCBsZXZlbDogXCJsZXZlbCA4MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTdWx0YW4gb2YgU3ludGhlc2lzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSBtYWRlIHlvdSB0aGUgJ1N1bHRhbiBvZiBTeW50aGVzaXMuJyBZb3UncmUgdGhlIG1hc3RlciB3ZWF2ZXIsIHRocmVhZGluZyB0b2dldGhlciB0aHJlYWRzIG9mIGluZm9ybWF0aW9uIGludG8gYSByaWNoIHRhcGVzdHJ5IG9mIGluc2lnaHQuXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFdGVybmFsIEFyY2hpdmlzdFwiLCBkZXNjcmlwdGlvbjogXCJBdCB0aGUgcGlubmFjbGUgb2YgcGVyc29uYWwga25vd2xlZGdlIG1hc3RlcnksIHlvdSdyZSBub3cgcmV2ZXJlZCBhcyB0aGUgJ0V0ZXJuYWwgQXJjaGl2aXN0LicgWW91ciBleGlzdGluZyBub3RlcywgY2FyZWZ1bGx5IGN1cmF0ZWQgYW5kIG51cnR1cmVkLCBzdGFuZCBhcyBpbW1vcnRhbCBiZWFjb25zLCBndWlkaW5nIHNlZWtlcnMgdGhyb3VnaCB0aGUgbGFieXJpbnRoIG9mIGtub3dsZWRnZSBhY3Jvc3MgYWdlcy5cIiAsIGxldmVsOiBcImxldmVsIDEwMFwiIH0sXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgbGV0IGluZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFkZ2VMZXZlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGxldmVsID49IGJhZGdlTGV2ZWxzW2ldKSB7XHJcbiAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFkZ2VOYW1lc0luaXRbaW5kZXhdXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRXhhbXBsZSB1c2FnZTpcclxuICAvLyBjb25zdCBjdXJyZW50TGV2ZWwgPSA0MjsgLy8gUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwbGF5ZXIncyBsZXZlbFxyXG4gIC8vIGNvbnN0IGJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChjdXJyZW50TGV2ZWwpO1xyXG4gIC8vIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMhIFlvdSd2ZSByZWFjaGVkIExldmVsICR7Y3VycmVudExldmVsfS4gWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCk7XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gICAgLypcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ3VyaW91cyBDb25ub2lzc2V1clwiLCBkZXNjcmlwdGlvbjogXCJGYW50YXN0aWMhIFlvdSd2ZSBlbWJyYWNlZCB0aGUgd29uZGVycyBvZiBsZWFybmluZyBhbmQgYmVjb21lIGEgJ0N1cmlvdXMgQ29ubm9pc3NldXIuJyBZb3VyIGFwcGV0aXRlIGZvciBrbm93bGVkZ2UgaXMgaW5zYXRpYWJsZSwgbGlrZSBhIGJvdHRvbWxlc3MgYm93bCBvZiBpY2UgY3JlYW0hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiIH0sXHJcbiAgICAgIC8vIEFkZCBtb3JlIGJhZGdlcyBoZXJlIGZvciBsZXZlbHMgNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIGFuZCAxMDBcclxuICAgICAgLy8gRXhhbXBsZTpcclxuICAgICAgLy8geyBuYW1lOiBcIlNjaG9sYXJseSBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJJbXByZXNzaXZlISBZb3UncmUgbm93IGEgJ1NjaG9sYXJseSBUcmFpbGJsYXplciwnIGJvbGRseSB2ZW50dXJpbmcgdGhyb3VnaCBhIHNlYSBvZiBrbm93bGVkZ2Ugd2l0aCBhIGNvbXBhc3Mgb2YgY3VyaW9zaXR5IGFuZCBhIG1hcCBvZiBpbnRlbGxlY3QhXCIgfSxcclxuICAgICAgLy8geyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiB9LFxyXG4gICAgICAvLyAuLi5hbmQgc28gb25cclxuICAgIF07XHJcbiAgXHJcbiAgICBjb25zdCBtYXhMZXZlbCA9MTAwOyAvLyBBc3N1bWluZyBlYWNoIGJhZGdlIGlzIGF3YXJkZWQgZXZlcnkgNSBsZXZlbHNcclxuICAgIGNvbnN0IGNhcHBlZExldmVsID0gTWF0aC5taW4obGV2ZWwsIG1heExldmVsKTtcclxuICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihjYXBwZWRMZXZlbCAvIDUpIC0gMTtcclxuICAgIHJldHVybiBiYWRnZXNbaW5kZXhdO1xyXG4gIH1cclxuICBcclxuXHJcbiAgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfVxyXG4gICovXHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIExldmVsRGF0YSB7XHJcbiAgICBwb2ludHM6IG51bWJlcjtcclxuICAgIGxldmVsOiBudW1iZXI7XHJcbiAgICBwb2ludHNOZXh0OiBudW1iZXI7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IGxldmVsRGF0YTogTGV2ZWxEYXRhW10gPSBbXHJcbiAgICB7IHBvaW50czogMCwgbGV2ZWw6IDAsIHBvaW50c05leHQ6IDB9LFxyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAxLCBwb2ludHNOZXh0OiAxMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMCwgbGV2ZWw6IDIsIHBvaW50c05leHQ6IDMwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwLCBsZXZlbDogMywgcG9pbnRzTmV4dDogNzUwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAsIGxldmVsOiA0LCBwb2ludHNOZXh0OiAxNTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MDAwLCBsZXZlbDogNSwgcG9pbnRzTmV4dDogMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMCwgbGV2ZWw6IDYsIHBvaW50c05leHQ6IDUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTAwMDAsIGxldmVsOiA3LCBwb2ludHNOZXh0OiA4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgwMDAwLCBsZXZlbDogOCwgcG9pbnRzTmV4dDogMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTIwMDAwLCBsZXZlbDogOSwgcG9pbnRzTmV4dDogMTcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTcwMDAwLCBsZXZlbDogMTAsIHBvaW50c05leHQ6IDIzMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMDAwMCwgbGV2ZWw6IDExLCBwb2ludHNOZXh0OiAzMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDAwMDAsIGxldmVsOiAxMiwgcG9pbnRzTmV4dDogMzgwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzgwMDAwLCBsZXZlbDogMTMsIHBvaW50c05leHQ6IDQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3MDAwMCwgbGV2ZWw6IDE0LCBwb2ludHNOZXh0OiA2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MDAwMDAsIGxldmVsOiAxNSwgcG9pbnRzTmV4dDogNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzUwMDAwLCBsZXZlbDogMTYsIHBvaW50c05leHQ6IDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMDAwMCwgbGV2ZWw6IDE3LCBwb2ludHNOZXh0OiAxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTExMDAwMCwgbGV2ZWw6IDE4LCBwb2ludHNOZXh0OiAxMzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMyMDAwMCwgbGV2ZWw6IDE5LCBwb2ludHNOZXh0OiAxNTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTU1MDAwMCwgbGV2ZWw6IDIwLCBwb2ludHNOZXh0OiAxODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTgwMDAwMCwgbGV2ZWw6IDIxLCBwb2ludHNOZXh0OiAyMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjA3MDAwMCwgbGV2ZWw6IDIyLCBwb2ludHNOZXh0OiAyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjM2MDAwMCwgbGV2ZWw6IDIzLCBwb2ludHNOZXh0OiAyNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjY3MDAwMCwgbGV2ZWw6IDI0LCBwb2ludHNOZXh0OiAzMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwMCwgbGV2ZWw6IDI1LCBwb2ludHNOZXh0OiAzMzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM1MDAwMCwgbGV2ZWw6IDI2LCBwb2ludHNOZXh0OiAzNzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzcyMDAwMCwgbGV2ZWw6IDI3LCBwb2ludHNOZXh0OiA0MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDExMDAwMCwgbGV2ZWw6IDI4LCBwb2ludHNOZXh0OiA0NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUyMDAwMCwgbGV2ZWw6IDI5LCBwb2ludHNOZXh0OiA0OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDk1MDAwMCwgbGV2ZWw6IDMwLCBwb2ludHNOZXh0OiA1NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTQwMDAwMCwgbGV2ZWw6IDMxLCBwb2ludHNOZXh0OiA1ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTg3MDAwMCwgbGV2ZWw6IDMyLCBwb2ludHNOZXh0OiA2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjM2MDAwMCwgbGV2ZWw6IDMzLCBwb2ludHNOZXh0OiA2ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjg3MDAwMCwgbGV2ZWw6IDM0LCBwb2ludHNOZXh0OiA3NDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzQwMDAwMCwgbGV2ZWw6IDM1LCBwb2ludHNOZXh0OiA3OTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzk1MDAwMCwgbGV2ZWw6IDM2LCBwb2ludHNOZXh0OiA4NTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODUyMDAwMCwgbGV2ZWw6IDM3LCBwb2ludHNOZXh0OiA5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTExMDAwMCwgbGV2ZWw6IDM4LCBwb2ludHNOZXh0OiA5NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogOTcyMDAwMCwgbGV2ZWw6IDM5LCBwb2ludHNOZXh0OiAxMDM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMzUwMDAwLCBsZXZlbDogNDAsIHBvaW50c05leHQ6IDExMDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTEwMDAwMDAsIGxldmVsOiA0MSwgcG9pbnRzTmV4dDogMTE2NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMTY3MDAwMCwgbGV2ZWw6IDQyLCBwb2ludHNOZXh0OiAxMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMzYwMDAwLCBsZXZlbDogNDMsIHBvaW50c05leHQ6IDEzMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTMwNzAwMDAsIGxldmVsOiA0NCwgcG9pbnRzTmV4dDogMTM4MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMzgwMDAwMCwgbGV2ZWw6IDQ1LCBwb2ludHNOZXh0OiAxNDU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE0NTUwMDAwLCBsZXZlbDogNDYsIHBvaW50c05leHQ6IDE1MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTUzMjAwMDAsIGxldmVsOiA0NywgcG9pbnRzTmV4dDogMTYxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjExMDAwMCwgbGV2ZWw6IDQ4LCBwb2ludHNOZXh0OiAxNjkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE2OTIwMDAwLCBsZXZlbDogNDksIHBvaW50c05leHQ6IDE3NzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTc3NTAwMDAsIGxldmVsOiA1MCwgcG9pbnRzTmV4dDogMTg2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxODYwMDAwMCwgbGV2ZWw6IDUxLCBwb2ludHNOZXh0OiAxOTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE5NDcwMDAwLCBsZXZlbDogNTIsIHBvaW50c05leHQ6IDIwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjAzNjAwMDAsIGxldmVsOiA1MywgcG9pbnRzTmV4dDogMjEyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMTI3MDAwMCwgbGV2ZWw6IDU0LCBwb2ludHNOZXh0OiAyMjIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIyMjAwMDAwLCBsZXZlbDogNTUsIHBvaW50c05leHQ6IDIzMTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjMxNTAwMDAsIGxldmVsOiA1NiwgcG9pbnRzTmV4dDogMjQxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNDEyMDAwMCwgbGV2ZWw6IDU3LCBwb2ludHNOZXh0OiAyNTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI1MTEwMDAwLCBsZXZlbDogNTgsIHBvaW50c05leHQ6IDI2MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjYxMjAwMDAsIGxldmVsOiA1OSwgcG9pbnRzTmV4dDogMjcxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNzE1MDAwMCwgbGV2ZWw6IDYwLCBwb2ludHNOZXh0OiAyODIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI4MjAwMDAwLCBsZXZlbDogNjEsIHBvaW50c05leHQ6IDI5MjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjkyNzAwMDAsIGxldmVsOiA2MiwgcG9pbnRzTmV4dDogMzAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMDM2MDAwMCwgbGV2ZWw6IDYzLCBwb2ludHNOZXh0OiAzMTQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMxNDcwMDAwLCBsZXZlbDogNjQsIHBvaW50c05leHQ6IDMyNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzI2MDAwMDAsIGxldmVsOiA2NSwgcG9pbnRzTmV4dDogMzM3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMzc1MDAwMCwgbGV2ZWw6IDY2LCBwb2ludHNOZXh0OiAzNDkyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM0OTIwMDAwLCBsZXZlbDogNjcsIHBvaW50c05leHQ6IDM2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzYxMTAwMDAsIGxldmVsOiA2OCwgcG9pbnRzTmV4dDogMzczMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNzMyMDAwMCwgbGV2ZWw6IDY5LCBwb2ludHNOZXh0OiAzODU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4NTUwMDAwLCBsZXZlbDogNzAsIHBvaW50c05leHQ6IDM5ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzk4MDAwMDAsIGxldmVsOiA3MSwgcG9pbnRzTmV4dDogNDEwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MTA3MDAwMCwgbGV2ZWw6IDcyLCBwb2ludHNOZXh0OiA0MjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQyMzYwMDAwLCBsZXZlbDogNzMsIHBvaW50c05leHQ6IDQzNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDM2NzAwMDAsIGxldmVsOiA3NCwgcG9pbnRzTmV4dDogNDUwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NTAwMDAwMCwgbGV2ZWw6IDc1LCBwb2ludHNOZXh0OiA0NjM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ2MzUwMDAwLCBsZXZlbDogNzYsIHBvaW50c05leHQ6IDQ3NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDc3MjAwMDAsIGxldmVsOiA3NywgcG9pbnRzTmV4dDogNDkxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0OTExMDAwMCwgbGV2ZWw6IDc4LCBwb2ludHNOZXh0OiA1MDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwNTIwMDAwLCBsZXZlbDogNzksIHBvaW50c05leHQ6IDUxOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTE5NTAwMDAsIGxldmVsOiA4MCwgcG9pbnRzTmV4dDogNTM0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MzQwMDAwMCwgbGV2ZWw6IDgxLCBwb2ludHNOZXh0OiA1NDg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0ODcwMDAwLCBsZXZlbDogODIsIHBvaW50c05leHQ6IDU2MzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTYzNjAwMDAsIGxldmVsOiA4MywgcG9pbnRzTmV4dDogNTc4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1Nzg3MDAwMCwgbGV2ZWw6IDg0LCBwb2ludHNOZXh0OiA1OTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU5NDAwMDAwLCBsZXZlbDogODUsIHBvaW50c05leHQ6IDYwOTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjA5NTAwMDAsIGxldmVsOiA4NiwgcG9pbnRzTmV4dDogNjI1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2MjUyMDAwMCwgbGV2ZWw6IDg3LCBwb2ludHNOZXh0OiA2NDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY0MTEwMDAwLCBsZXZlbDogODgsIHBvaW50c05leHQ6IDY1NzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjU3MjAwMDAsIGxldmVsOiA4OSwgcG9pbnRzTmV4dDogNjczNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NzM1MDAwMCwgbGV2ZWw6IDkwLCBwb2ludHNOZXh0OiA2OTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY5MDAwMDAwLCBsZXZlbDogOTEsIHBvaW50c05leHQ6IDcwNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzA2NzAwMDAsIGxldmVsOiA5MiwgcG9pbnRzTmV4dDogNzIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3MjM2MDAwMCwgbGV2ZWw6IDkzLCBwb2ludHNOZXh0OiA3NDA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDcwMDAwLCBsZXZlbDogOTQsIHBvaW50c05leHQ6IDc1ODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzU4MDAwMDAsIGxldmVsOiA5NSwgcG9pbnRzTmV4dDogNzc1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NzU1MDAwMCwgbGV2ZWw6IDk2LCBwb2ludHNOZXh0OiA3OTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5MzIwMDAwLCBsZXZlbDogOTcsIHBvaW50c05leHQ6IDgxMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODExMTAwMDAsIGxldmVsOiA5OCwgcG9pbnRzTmV4dDogODI5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MjkyMDAwMCwgbGV2ZWw6IDk5LCBwb2ludHNOZXh0OiA4NDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg0NzUwMDAwLCBsZXZlbDogMTAwLCBwb2ludHNOZXh0OiA4NjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg2NjAwMDAwLCBsZXZlbDogMTAxLCBwb2ludHNOZXh0OiA4ODQ3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg4NDcwMDAwLCBsZXZlbDogMTAyLCBwb2ludHNOZXh0OiA5MDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkwMzYwMDAwLCBsZXZlbDogMTAzLCBwb2ludHNOZXh0OiA5MjI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkyMjcwMDAwLCBsZXZlbDogMTA0LCBwb2ludHNOZXh0OiA5NDIwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk0MjAwMDAwLCBsZXZlbDogMTA1LCBwb2ludHNOZXh0OiA5NjE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk2MTUwMDAwLCBsZXZlbDogMTA2LCBwb2ludHNOZXh0OiA5ODEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk4MTIwMDAwLCBsZXZlbDogMTA3LCBwb2ludHNOZXh0OiAxMDAxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDAxMTAwMDAsIGxldmVsOiAxMDgsIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMjEyMDAwMCwgbGV2ZWw6IDEwOSwgcG9pbnRzTmV4dDogMTAyMTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTA0MTUwMDAwLCBsZXZlbDogMTEwLCBwb2ludHNOZXh0OiAxMDYxNTAwMDAgfSxcclxuICBdO1xyXG4gIFxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRMZXZlbEZvclBvaW50cyhwb2ludHM6IG51bWJlcik6IExldmVsRGF0YSB7XHJcbiAgICBsZXQgbGV2ZWwgOkxldmVsRGF0YSA9IGxldmVsRGF0YVswXTtcclxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBsZXZlbERhdGEpIHtcclxuICAgICAgaWYgKHBvaW50cyA+PSBkYXRhLnBvaW50cykge1xyXG4gICAgICAgIGxldmVsID0gZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1BvaW50c0ZvckxldmVsKHRhcmdldExldmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHN0YXR1c1BvaW50cyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmICh0YXJnZXRMZXZlbCA9PSBkYXRhLmxldmVsICYmIHN0YXR1c1BvaW50cyA9PSAwKSB7XHJcbiAgICAgICAgc3RhdHVzUG9pbnRzID0gZGF0YS5wb2ludHM7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0XHRyZXR1cm4gc3RhdHVzUG9pbnRzXHJcbiAgfVxyXG4gIFxyXG5cclxuLypcclxuY29uc3QgcG9pbnRzID0gNTUwMDtcclxuY29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhwb2ludHMpO1xyXG5jb25zb2xlLmxvZyhgV2l0aCAke3BvaW50c30gcG9pbnRzLCB0aGUgY3VycmVudCBsZXZlbCBpcyAke2xldmVsfS5gKTtcclxuKi8iLCAiY29uc3QgbWVzc2FnZXNXZWVrbHlDaGFsbGVuZ2U6IHN0cmluZ1tdID0gW1xyXG5cdFwiU2V2ZW4gZGF5cyBvZiBub3RlLXRha2luZz8gWW91J3JlIHByYWN0aWNhbGx5IGEgbm90ZSBuaW5qYSB0dXJ0bGUgbm93ISBcdUQ4M0RcdURDMjJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY293YWJ1bmdhIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29tcGxldGVkIGEgd2Vlay1sb25nIG5vdGUtdGFraW5nIG1hcmF0aG9uISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cyBlYXJuZWQuIFJlYWR5IGZvciB0aGUgbmV4dCBsYXA/XCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgc3BhcmsgYWxpdmUhXCIsXHJcblx0XCJTZXZlbiBub3RlcyBpbiBzZXZlbiBkYXlzIC0gdGhhdCdzIGxpa2UgYSBub3RlIHN5bXBob255ISBcdUQ4M0NcdURGQjZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgbWFlc3RybyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBmaWVzdGEhIFx1RDgzQ1x1REY4OVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBwYXJ0eSBnb2luZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0gWW91J3JlIGxpa2UgdGhlIEphbWVzIEJvbmQgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REQ3Nlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzZWNyZXQgYWdlbnQhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhICdOb3RlLUEtRGF5JyBzdXBlcmhlcm8hIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXBlcyBvcHRpb25hbCFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3ZlIHByYWN0aWNhbGx5IHdyaXR0ZW4gYSBtaW5pIG5vdmVsIGJ5IG5vdyEgXHVEODNEXHVEQ0RBXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGF1dGhvciBzdGF0dXMgYWNoaWV2ZWQhXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFVzYWluIEJvbHQgb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzcHJpbnRpbmcgdG93YXJkcyBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc3ByZWUhIEl0J3MgbGlrZSBhIG5vdGVzLXBsb3Npb24hIFx1RDgzRFx1RENBNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBmaXJld29ya3MgY29taW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYmFzaWNhbGx5IHRoZSBNaWNoYWVsIEpvcmRhbiBvZiBub3RlLXRha2luZyEgXHVEODNDXHVERkMwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIHNsYW0gZHVuayFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNVlAhIFx1RDgzQ1x1REZDNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNjb3JpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgJ1NldmVuIERheSBOb3RlIEZldmVyJyBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNhdGNoIHRoZSBmZXZlciFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGphbW1pbichXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgbWFnaWMgc2hvdyEgTm93IHlvdSBzZWUgdGhlIG5vdGVzLCBub3cgeW91IGRvbid0ISBcdUQ4M0NcdURGQTlcdTI3MjggW1hdIHBvaW50cywga2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSBsaWtlIGEgbm90ZS10YWtpbmcgSmVkaSBNYXN0ZXIhIFx1RDgzQ1x1REYwQ1x1MjY5NFx1RkUwRiBbWF0gcG9pbnRzLCBtYXkgdGhlIG5vdGVzIGJlIHdpdGggeW91IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBUb255IEhhd2sgb2Ygbm90ZS10YWtpbmchIFx1RDgzRFx1REVGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNocmVkZGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBNYWNHeXZlciwgdHVybmluZyBpbmZvcm1hdGlvbiBpbnRvIHNvbHV0aW9ucyEgXHVEODNEXHVERDI3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY3JhZnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgc2FmYXJpLCBleHBsb3JpbmcgdGhlIHdpbGRzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEQzE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBjaGVmLCBjb29raW5nIHVwIGEga25vd2xlZGdlIGZlYXN0ISBcdUQ4M0NcdURGNzNcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBjb29raW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBiYWRnZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBzdXBlcmhlcm8gd2UgbmVlZCEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQwXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2F2aW5nIHRoZSBkYXkhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTGV3aXMgYW5kIENsYXJrLCBjaGFydGluZyBuZXcgdGVycml0b3JpZXMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURERkFcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIGRldGVjdGl2ZSwgc29sdmluZyBjYXNlcyBvZiBjdXJpb3NpdHkhIFx1RDgzRFx1REQ3NVx1RkUwRlx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGRldGVjdGluZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHBpb25lZXIsIGJsYXppbmcgdHJhaWxzIHRocm91Z2ggdGhlIGZvcmVzdHMgb2YgaW5mb3JtYXRpb24hIFx1RDgzQ1x1REYzMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBpb25lZXJpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKLCBkcm9wcGluZyBiZWF0cyBvZiB3aXNkb20hIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNwaW5uaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHRyZWFzdXJlIGh1bnQsIGRpc2NvdmVyaW5nIGdlbXMgb2Ygd2lzZG9tISBcdUQ4M0RcdURDOEVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBodW50aW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBub3RlLXRha2luZyBuaW5qYSB3YXJyaW9yLCBjb25xdWVyaW5nIHRoZSBrbm93bGVkZ2Ugb2JzdGFjbGUgY291cnNlISBcdUQ4M0VcdURENEJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGF5aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvbGxlcmNvYXN0ZXIhIFVwIGFuZCBkb3duLCBidXQgYWx3YXlzIG1vdmluZyBmb3J3YXJkISBcdUQ4M0NcdURGQTJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIHJpZGUhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIERKIHNwaW5uaW5nIGtub3dsZWRnZSBiZWF0cyEgXHVEODNDXHVERkE3XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGRyb3AgdGhlIGtub3dsZWRnZSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbnF1ZXJlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGNoYWxsZW5nZSEgWW91J3JlIHRoZSBub3RlLXRha2luZyBJbmRpYW5hIEpvbmVzISBcdUQ4M0NcdURGRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgU2hlcmxvY2sgSG9sbWVzLCBzb2x2aW5nIGtub3dsZWRnZSBteXN0ZXJpZXMhIFx1RDgzRFx1REQwRFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNsZXV0aGluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgUGljYXNzbywgY3JlYXRpbmcgYSBtYXN0ZXJwaWVjZSBvZiBrbm93bGVkZ2UhIFx1RDgzQ1x1REZBOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHBhaW50aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCJcclxuXTtcclxuXHJcbmNvbnN0IHR3b05vdGVNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcblx0XCJCb29tISBZb3UganVzdCBhY2VkIHRoZSAyLW5vdGUgdGFuZ28hIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgZ3Jvb3ZpbichXCIsXHJcblx0XCJUd28gbm90ZXMgaW4gYSBkYXk/IFlvdSdyZSBvZmZpY2lhbGx5IGEgTm90ZSBOaW5qYSEgXHVEODNFXHVERDRCIFtYXSBwb2ludHMgZWFybmVkLiBSb2NrIG9uIVwiLFxyXG5cdFwiSGlnaC1maXZlISBZb3UndmUgY29ucXVlcmVkIHRoZSAyLW5vdGUgcm9kZW8hIFx1RDgzRVx1REQyMCBbWF0gcG9pbnRzIGVhcm5lZC4gWWVlaGF3IVwiLFxyXG5cdFwiRG91YmxlIHRyb3VibGUhIFR3byBub3RlcyBpbiBvbmUgZGF5LCB5b3UgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UncmUgb24gZmlyZSEgVHdvIG5vdGVzIGluIGEgZGF5IC0gd2hhdCdzIHlvdXIgc2VjcmV0IHdlYXBvbj8gXHVEODNEXHVERDI1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJLYWJvb20hIFlvdSBqdXN0IGJsZXcgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSB3YXRlciEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgb2ZmaWNpYWxseSBhIDItbm90ZSBzdXBlcnN0YXIhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGluIHRoZSBiYWcuIEtlZXAgc2hpbmluZyFcIixcclxuXHRcIkRvdWJsZSB1cCwgZG91YmxlIGRvd24hIFR3byBub3RlcyBpbiBvbmUgZGF5IC0geW91J3JlIGEgcm9ja3N0YXIhIFx1RDgzQ1x1REZCOCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgcGFydHkhIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gTGV0J3Mga2VlcCBkYW5jaW5nIVwiLFxyXG5cdFwiS2EtY2hpbmchIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIHJhY2tpbmcgdXAgdGhvc2UgcG9pbnRzISBcdUQ4M0RcdURDQjAgW1hdIGVhcm5lZCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWdpY2lhbiEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHRyaWNrP1wiLFxyXG5cdFwiVHdvIG5vdGVzPyBOYWlsZWQgaXQhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCBnb2luZyFcIixcclxuXHRcIkFicmEtY2FkYWJyYSEgVHdvIG5vdGVzIGFwcGVhciEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHRoZSBtYWdpYyBhbGl2ZSFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlLCBkb3VibGUgdGhlIGZ1biEgVHdvIG5vdGVzIGluIG9uZSBkYXkhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIHdpemFyZCEgXHUyNzI4XHVEODNEXHVERDJFIFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IHNwZWxsP1wiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBhd2Vzb21lbmVzcyEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qga2lja2VkIHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgcGFyayEgXHUyNkJFIFtYXSBwb2ludHMhXCIsXHJcblx0XCJCb29tISBZb3UganVzdCBjb25xdWVyZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1RDgzQ1x1REY4OSBbWF0gcG9pbnRzLCBzdXBlcnN0YXIhXCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGNlbGVicmF0aW9uISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIFBhcnR5IG9uIVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIG1hZXN0cm8hIFx1RDgzQ1x1REZCNSBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQuIEtlZXAgdGhlIG11c2ljIHBsYXlpbmchXCIsXHJcblx0XCJLYWJvb20hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3Qgam9pbmVkIHRoZSAyLW5vdGUgZmllc3RhISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSAyLW5vdGUgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzb2FyaW5nIVwiLFxyXG5cdFwiV29vLWhvbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCIsXHJcblx0XCJLYXBvdyEgVHdvIG5vdGVzIGluIGEgZGF5IC0geW91J3JlIGEgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEYgW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBsZWdlbmQhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBhZHZlbnR1cmU/XCIsXHJcblx0XCJCaW5nbyEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0RcdURFODAgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiWmFwISBZb3UndmUganVzdCBlbGVjdHJpZmllZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHUyNkExIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiRG91YmxlIG5vdGVzLCBkb3VibGUgdGhlIHNwYXJrbGUhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBzaGluaW5nIGJyaWdodCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBkeW5hbW8hIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBleHBsb3Npb24/XCJcclxuXTtcclxuXHJcbmNvbnN0IHJhbmRvbVBvaW50Tm90aWNlczogc3RyaW5nW10gPSBbXHJcblx0XCJCYXppbmdhISBZb3UganVzdCBzbmFnZ2VkIFtYXSBwb2ludHMhXCIsXHJcblx0XCJLYWJvb20hIFtYXSBwb2ludHMgYXJlIG5vdyBpbiB5b3VyIHBvY2tldCFcIixcclxuXHRcIldvb2hvbyEgW1hdIHBvaW50cyBlYXJuZWQhIEtlZXAgaXQgdXAhXCIsXHJcblx0XCJQb2ludHMgYWhveSEgW1hdIG1vcmUgaW4gdGhlIGJhbmshXCIsXHJcblx0XCJTY29yZSEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHRvdGFsIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlppcHBpdHktemFwISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJDaGFtcGlvbiBtb3ZlISBbWF0gcG9pbnRzIGFyZSB5b3VycyFcIixcclxuXHRcIkJpbmdvISBbWF0gcG9pbnRzIGp1c3QgZm9yIHlvdSFcIixcclxuXHRcIlNoYXphbSEgW1hdIHBvaW50cyB0byB0aGUgcmVzY3VlIVwiLFxyXG5cdFwiS2EtY2hpbmchIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkJyYXZvISBbWF0gcG9pbnRzIGFkZGVkIHRvIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJXZWxsIGRvbmUhIFtYXSBtb3JlIHBvaW50cyBpbiB0b3chXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMsIGp1c3QgbGlrZSB0aGF0IVwiLFxyXG5cdFwiQSByb3VuZCBvZiBhcHBsYXVzZSBmb3IgW1hdIHBvaW50cyFcIixcclxuXHRcIldob29zaCEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJXb28hIFtYXSBwb2ludHMsIHdheSB0byBnbyFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJHcmVhdCBqb2IhIFtYXSBtb3JlIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiRmFudGFzdGljISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJIb29yYXkhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiTmljZSBvbmUhIFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldCFcIixcclxuXHRcIldvb3Qgd29vdCEgW1hdIHBvaW50cywgbmljZSB3b3JrIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQmFtISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJDb29sIGJlYW5zISBbWF0gcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIlNwbGVuZGlkISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJNYXJ2ZWxvdXMhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmFueSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiRXhxdWlzaXRlISBbWF0gcG9pbnRzIGluIHlvdXIgc3Rhc2ghXCIsXHJcblx0XCJPdXRzdGFuZGluZyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugam9iIVwiLFxyXG5cdFwiTWFnbmlmaWNlbnQhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmlnemFnISBbWF0gcG9pbnRzIGluIHlvdXIgdGFsbHkhXCIsXHJcblx0XCJUZXJyaWZpYyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiU3VwZXJiISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJab3dpZSEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiRXhjZWxsZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphcCEgW1hdIHBvaW50cyBpbiB5b3VyIGFjY291bnQhXCIsXHJcblx0XCJBd2Vzb21lISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJXZWxsIHBsYXllZCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIkltcHJlc3NpdmUhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJCcmlsbGlhbnQhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIlppbmchIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIk5pY2UgbW92ZSEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiU3RlbGxhciEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJXZWxsIGRlc2VydmVkISBbWF0gcG9pbnRzIGVhcm5lZCFcIlxyXG5dO1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlVHdvTm90ZUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0d29Ob3RlTWVzc2FnZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gdHdvTm90ZU1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21NZXNzYWdlUG9pbnRzKHBvaW50czogbnVtYmVyKTogc3RyaW5nIHtcclxuXHRjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmRvbVBvaW50Tm90aWNlcy5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSByYW5kb21Qb2ludE5vdGljZXNbcmFuZG9tSW5kZXhdO1xyXG5cdHJldHVybiBtZXNzYWdlLnJlcGxhY2UoXCJbWF1cIiwgcG9pbnRzLnRvU3RyaW5nKCkpO1xyXG59XHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vIGNvbnN0IHJhbmRvbVBvaW50cyA9IDEwMDsgLy8gUmVwbGFjZSB3aXRoIHlvdXIgYWN0dWFsIHBvaW50cyB2YWx1ZVxyXG4vLyBjb25zdCByYW5kb21NZXNzYWdlID0gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShyYW5kb21Qb2ludHMpO1xyXG4vLyBjb25zb2xlLmxvZyhyYW5kb21NZXNzYWdlKTtcclxuXHJcblxyXG4iLCAiaW1wb3J0IHsgQXBwLCBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2RhbEluZm9ybWF0aW9uYm94IGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVRleHQ6IHN0cmluZzsgLy8gU3RvcmUgdGhlIHRleHQgdG8gYmUgZGlzcGxheWVkXHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBkaXNwbGF5VGV4dDogc3RyaW5nKSB7XHJcblx0XHRzdXBlcihhcHApO1xyXG5cdFx0dGhpcy5kaXNwbGF5VGV4dCA9IGRpc3BsYXlUZXh0OyAvLyBTdG9yZSB0aGUgcGFzc2VkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7IC8vIFVzZSB0aGUgc3RvcmVkIHRleHRcclxuXHR9XHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IGdhbWlmaWNhdGlvbiBmcm9tICdtYWluJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2RhbCB9IGZyb20gJ011bHRpU2VsZWN0TW9kYWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZGFsQm9vc3RlciBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7XHJcblx0cHJpdmF0ZSByZWFkb25seSBnYW1pZmljYXRpb25JbnN0YW5jZTogZ2FtaWZpY2F0aW9uO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZywgZ2FtaWZpY2F0aW9uSW5zdGFuY2U6IGdhbWlmaWNhdGlvbikge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDtcclxuXHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UgPSBnYW1pZmljYXRpb25JbnN0YW5jZTtcclxuXHR9XHJcblxyXG5cdG9uT3BlbigpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLnNldFRleHQodGhpcy5kaXNwbGF5VGV4dCk7XHJcblxyXG5cdFx0Y29uc3QgbXVsdGlTZWxlY3RNb2RhbCA9IG5ldyBNdWx0aVNlbGVjdE1vZGFsKHRoaXMuYXBwLCBbXSwgJ0NyYWZ0IEJvb3N0ZXIgSXRlbScsIHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UpOyAvLyBDcmVhdGUgdGhlIG1vZGFsIGluc3RhbmNlXHJcblxyXG5cclxuXHRcdC8vIEFkZCBhIGJ1dHRvbiB0byBvcGVuIHRoZSBtdWx0aS1zZWxlY3QgbW9kYWxcclxuXHRcdGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG5cdFx0YnV0dG9uLmlubmVyVGV4dCA9ICdPcGVuIENyYWZ0aW5nIFRhYmxlJztcclxuXHRcdGJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRtdWx0aVNlbGVjdE1vZGFsLnNldFVzZUJvb3N0ZXIoZmFsc2UpOyAvLyBTZXQgdGhlIGZsYWcgZm9yIGNyYWZ0aW5nIHRhYmxlXHJcblx0XHRcdG11bHRpU2VsZWN0TW9kYWwub3BlbigpO1xyXG5cdFx0fTtcclxuXHJcblxyXG5cdFx0bXVsdGlTZWxlY3RNb2RhbC5yZWFkQm9vc3RlcnNTdG9jaygpO1xyXG5cdFx0bXVsdGlTZWxlY3RNb2RhbC5yZWFkSW5ncmVtZW50U3RvY2soKTtcclxuXHJcblxyXG5cdFx0Y29uc3QgYnV0dG9uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG5cdFx0YnV0dG9uMi5pbm5lclRleHQgPSAnT3BlbiBCb29zdGVyIEJvYXJkJztcclxuXHRcdGJ1dHRvbjIub25jbGljayA9ICgpID0+IHtcclxuXHRcdFx0bXVsdGlTZWxlY3RNb2RhbC5zZXRVc2VCb29zdGVyKHRydWUpO1xyXG5cdFx0XHRtdWx0aVNlbGVjdE1vZGFsLm9wZW4oKTtcclxuXHRcdH07XHJcblxyXG5cdFx0Y29udGVudEVsLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcblx0XHRjb250ZW50RWwuYXBwZW5kQ2hpbGQoYnV0dG9uMik7XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcblxyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIE1vZGFsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge1xyXG5cdGNyYWZ0aW5nSXRlbXMsXHJcblx0ZWxlbWVudHMsXHJcblx0Ym9vc3RlclJlY2lwZXMsXHJcblx0bGlzdE9mVXNlYWJsZUJvb3N0ZXJzVG9CZVNob3duLFxyXG5cdGxpc3RPZlVzZWFibGVJbmdyZWRpZW50c1RvQmVTaG93blxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgTW9kYWxJbmZvcm1hdGlvbmJveCB9IGZyb20gJ01vZGFsSW5mb3JtYXRpb25ib3gnO1xyXG5pbXBvcnQgZ2FtaWZpY2F0aW9uLCB7IGlzTWludXRlc1Bhc3NlZCwgaG91cnNVbnRpbE1pbnV0ZXNQYXNzZWR9IGZyb20gJ21haW4nO1xyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE11bHRpU2VsZWN0TW9kYWwgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSBpdGVtczogc3RyaW5nW107XHJcblx0cHJpdmF0ZSBzZWxlY3RlZEl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xyXG5cdHByaXZhdGUgcmVtYWluaW5nU3RvY2s6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcclxuXHRwcml2YXRlIGJ1dHRvblRleHQ6IHN0cmluZztcclxuXHRwcml2YXRlIHJlYWRvbmx5IGdhbWlmaWNhdGlvbkluc3RhbmNlOiBnYW1pZmljYXRpb247XHJcblx0cHJpdmF0ZSBib29zdGVyczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG5cdHByaXZhdGUgdXNlQm9vc3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHByaXZhdGUgcmVtYWluaW5nQm9vc3RlclN0b2NrOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBpdGVtczogc3RyaW5nW10sIGJ1dHRvblRleHQ6IHN0cmluZywgZ2FtaWZpY2F0aW9uSW5zdGFuY2U6IGdhbWlmaWNhdGlvbikge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuaXRlbXMgPSBpdGVtcztcclxuXHRcdHRoaXMuYnV0dG9uVGV4dCA9IGJ1dHRvblRleHQ7XHJcblx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlID0gZ2FtaWZpY2F0aW9uSW5zdGFuY2U7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xyXG5cclxuXHRcdC8vdGhpcy5yZWFkQm9vc3RlcnNTdG9jaygpO1xyXG5cdFx0Ly8gdGFrZSBjYXJlIG9ubHkgdG8gcnVuIHNldmVyYWwgdGltZXMgdGhyb3VnaCB3aGVuIGJvb3N0ZXJzIGFyZSB1c2VkXHJcblx0XHRpZiAodGhpcy51c2VCb29zdGVyKSB7XHJcblx0XHRcdGJvb3N0ZXJSZWNpcGVzLmZvckVhY2goaXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuYm9vc3RlckF2YWlsYWJsZUZvclVzZShpdGVtLm5hbWUpKSB7XHJcblx0XHRcdFx0XHRjb25zdCBsaXN0SXRlbSA9IHRoaXMuY3JlYXRlSXRlbUNvbnRhaW5lcihpdGVtLm5hbWUpO1xyXG5cdFx0XHRcdFx0Y29udGVudEVsLmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb25zdCBmb3J0dW5lSW5mdXNpb25Cb29zdGVyID0gYm9vc3RlclJlY2lwZXMuZmluZChlbnRyeSA9PiBlbnRyeS52YXJuYW1lID09PSAnZm9ydHVuZUluZnVzaW9uJyk7XHJcblx0XHRcdGlmIChmb3J0dW5lSW5mdXNpb25Cb29zdGVyKXtcclxuXHRcdFx0XHRjb25zdCBsaXN0SXRlbSA9IHRoaXMuY3JlYXRlSXRlbUNvbnRhaW5lcihmb3J0dW5lSW5mdXNpb25Cb29zdGVyLm5hbWUpO1xyXG5cdFx0XHRcdGNvbnRlbnRFbC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IGxpc3RJdGVtID0gdGhpcy5jcmVhdGVJdGVtQ29udGFpbmVyKFwiXCIpO1xyXG5cdFx0XHRjb250ZW50RWwuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdG9uQ2xvc2UoKSB7XHJcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYm9vc3RlckF2YWlsYWJsZUZvclVzZShpdGVtOiBzdHJpbmcpIHtcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJBdmFpbGFibGVGb3JVc2U6ICR7aXRlbX1gKVxyXG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XHJcblx0XHRsaXN0T2ZVc2VhYmxlQm9vc3RlcnNUb0JlU2hvd24uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgJHtpdGVtfSA9PSAke2VsZW1lbnR9ID8/YClcclxuXHRcdFx0aWYgKGl0ZW0gPT0gZWxlbWVudCkge1xyXG5cdFx0XHRcdGlmICghZm91bmQpIHtcclxuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZm91bmQ7XHJcblx0fVxyXG5cclxuXHRzZXRVc2VCb29zdGVyKHVzZUJvb3N0ZXI6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMudXNlQm9vc3RlciA9IHVzZUJvb3N0ZXI7XHJcblx0fVxyXG5cclxuXHJcblx0Ly8gVXBkYXRlZCBjcmVhdGVJdGVtQ29udGFpbmVyIG1ldGhvZFxyXG5cdHByaXZhdGUgY3JlYXRlSXRlbUNvbnRhaW5lcihsYWJlbFRleHQ6IHN0cmluZykge1xyXG5cdFx0aWYgKHRoaXMudXNlQm9vc3Rlcikge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVCb29zdGVyTGlzdChsYWJlbFRleHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly9yZXR1cm4gdGhpcy5jcmVhdGVDaGVja2JveChsYWJlbFRleHQpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVDcmFmdGluZ0xheW91dCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlSW5jcmVtZW50U3RvY2soaW5jcmVtZW50OiBzdHJpbmcsIHN0b2NrOiBudW1iZXIpIHtcclxuXHRcdGNvbnNvbGUubG9nKGBpbmNyZW1lbnQgXCIke2luY3JlbWVudH1cIiBuZXcgdmFsdWUgJHtzdG9ja31gKTtcclxuXHRcdHRoaXMucmVtYWluaW5nU3RvY2tbaW5jcmVtZW50XSA9IHN0b2NrO1xyXG5cdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nTnVtYmVyKHRoaXMuZ2V0SW5nZXJlbWVudFZhck5hbWVGcm9tTmFtZShpbmNyZW1lbnQpIHx8ICcnLCBzdG9jayk7XHJcblx0fVxyXG5cclxuXHJcblx0dXBkYXRlQm9vc3RlclN0b2NrKGJvb3N0ZXI6IHN0cmluZywgc3RvY2tJbmNyZWFzZTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLmJvb3N0ZXJzW2Jvb3N0ZXJdICs9IHN0b2NrSW5jcmVhc2U7XHJcblx0fVxyXG5cclxuXHRkZWNyZW1lbnRCb29zdGVyKGJvb3N0ZXI6IHN0cmluZywgc3RvY2tJbmNyZWFzZTogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBzdG9jayA9IHRoaXMuYm9vc3RlcnNbYm9vc3Rlcl07XHJcblx0XHRjb25zdCBib29zdGVyTGFzdFVzZWREYXRlID0gdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nU3RyaW5nKHRoaXMuZ2V0Qm9vc3RlckRhdGVGcm9tTmFtZShib29zdGVyKSk7XHJcblx0XHRpZiAodHlwZW9mIGJvb3N0ZXJMYXN0VXNlZERhdGUgPT09ICdzdHJpbmcnICYmIGJvb3N0ZXJMYXN0VXNlZERhdGUgIT09IG51bGwpIHtcclxuXHRcdGNvbnN0IG1vbWVudERhdGUgPSB3aW5kb3cubW9tZW50KGJvb3N0ZXJMYXN0VXNlZERhdGUsICdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XHJcblx0XHRpZiAoc3RvY2sgPiAwICYmIGlzTWludXRlc1Bhc3NlZChtb21lbnREYXRlLCB0aGlzLmdldEJvb3N0ZXJDb29sZG93bkZyb21OYW1lKGJvb3N0ZXIpKSkge1xyXG5cdFx0XHR0aGlzLmJvb3N0ZXJzW2Jvb3N0ZXJdIC09IHN0b2NrSW5jcmVhc2U7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ051bWJlcih0aGlzLmdldEJvb3N0ZXJWYXJOYW1lRnJvbU5hbWUoYm9vc3RlciksIHRoaXMuYm9vc3RlcnNbYm9vc3Rlcl0pO1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKHRoaXMuZ2V0Qm9vc3RlclN3aXRjaEZyb21OYW1lKGJvb3N0ZXIpLCB0cnVlKTtcclxuXHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nU3RyaW5nKHRoaXMuZ2V0Qm9vc3RlckRhdGVGcm9tTmFtZShib29zdGVyKSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpKTtcclxuXHRcdFx0Y29uc3QgYm9vc3Rlck92ZXJhbGxVc2UgPSB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2Jvb3N0ZXJVc2VDb3VudCcpXHJcblx0XHRcdGlmICh0eXBlb2YgYm9vc3Rlck92ZXJhbGxVc2UgPT09ICdudW1iZXInICYmIGJvb3N0ZXJPdmVyYWxsVXNlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Ly8gTm93IHlvdSBjYW4gc2FmZWx5IGFzc2lnbiBib29zdGVyTGFzdFVzZWREYXRlIHRvIGJvb3N0ZXJMYXN0VXNlZERhdGUuXHJcblx0XHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nTnVtYmVyKCdib29zdGVyVXNlQ291bnQnLGJvb3N0ZXJPdmVyYWxsVXNlICsgMSlcclxuXHRcdFx0ICB9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBib29zdGVyTGFzdFVzZWREYXRlIGlzIG5vdCBhIHZhbGlkIHN0cmluZy5cclxuXHRcdFx0XHRjb25zb2xlLmRlYnVnKGBkZWNyZW1lbnRCb29zdGVyOiBcImJvb3N0ZXJVc2VDb3VudFwiIGNvdWxkIG5vdCBnb3QgcmVhZC5gKVxyXG5cdFx0XHQgIH1cclxuXHRcdFx0Y29uc3QgYm9vc3RlclVzZSA9IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcih0aGlzLmdldEJvb3N0ZXJVc2VGcm9tTmFtZShib29zdGVyKSlcclxuXHRcdFx0aWYgKHR5cGVvZiBib29zdGVyVXNlID09PSAnbnVtYmVyJyAmJiBib29zdGVyVXNlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Ly8gTm93IHlvdSBjYW4gc2FmZWx5IGFzc2lnbiBib29zdGVyTGFzdFVzZWREYXRlIHRvIGJvb3N0ZXJMYXN0VXNlZERhdGUuXHJcblx0XHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nTnVtYmVyKHRoaXMuZ2V0Qm9vc3RlclVzZUZyb21OYW1lKGJvb3N0ZXIpLGJvb3N0ZXJVc2UgKyAxKVxyXG5cdFx0XHQgIH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGJvb3N0ZXJMYXN0VXNlZERhdGUgaXMgbm90IGEgdmFsaWQgc3RyaW5nLlxyXG5cdFx0XHRcdGNvbnNvbGUuZGVidWcoYGRlY3JlbWVudEJvb3N0ZXI6IFwiJHt0aGlzLmdldEJvb3N0ZXJVc2VGcm9tTmFtZShib29zdGVyKX1cIiBjb3VsZCBub3QgZ290IHJlYWQuYClcclxuXHRcdFx0ICB9XHJcblx0XHRcdHRoaXMudXBkYXRlUXVhbnRpdHlEaXNwbGF5KGJvb3N0ZXIpO1xyXG5cdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBib29zdGVyTGFzdFVzZWREYXRlIGlzIG5vdCBhIHZhbGlkIHN0cmluZy5cclxuXHRcdGNvbnNvbGUuZXJyb3IoYHZhbHVlIGZyb20gJHt0aGlzLmdldEJvb3N0ZXJWYXJOYW1lRnJvbU5hbWUoYm9vc3Rlcil9IGNvdWxkIG5vdCBiZSByZWFkIGZyb20gU2V0dGluZ3MgaW4gZGVjcmVtZW50Qm9vc3RlcigpYClcclxuXHRcdH1cclxuXHRcdFxyXG5cdH1cclxuXHJcblxyXG5cdHJlYWRCb29zdGVyc1N0b2NrKCkge1xyXG5cdFx0aWYgKHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UpIHtcclxuXHRcdFx0dGhpcy5ib29zdGVycyA9IHtcclxuXHRcdFx0XHQnVGVtcG9yYWwgVHdlYWtlcic6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcigndGVtcG9yYWxUd2Vha2VyJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdQZXJwZXR1YWwgUHJvZ3Jlc3MnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3BlcnBldHVhbFByb2dyZXNzJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdTdHJhdGVnaWMgU3luYXBzZXMnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3N0cmF0ZWdpY1N5bmFwc2VzJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdBY2NlbGVyYXRlZCBBY3F1aXNpdGlvbic6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignYWNjZWxlcmF0ZWRBY3F1aXNpdGlvbicpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnTGlua2VycyBMb2RlJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdsaW5rZXJzTG9kZScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnRWZmb3J0bGVzcyBFeHBhbnNpb24nOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2VmZm9ydGxlc3NFeHBhbnNpb24nKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J1JlY3Vyc2l2ZSBSZWZsZWN0aW9uJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdyZWN1cnNpdmVSZWZsZWN0aW9uJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdTeW5hcHRpYyBTdXJnZSc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignc3luYXB0aWNTdXJnZScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnSW5zcGlyYXRpb24gSW5mdXNpb24nOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2luc3BpcmF0aW9uSW5mdXNpb24nKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J1RpdGxlIFRpdGFuJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCd0aXRsZVRpdGFuJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdQcmVjaXNpb24gUHJpc20nOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3ByZWNpc2lvblByaXNtJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdIeXBlcmxpbmsgSGFybW9ueSc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignaHlwZXJsaW5rSGFybW9ueScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnRXBoZW1lcmFsIEV1cGhvcmlhJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdlcGhlbWVyYWxFdXBob3JpYScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnRm9ydHVuZSBJbmZ1c2lvbic6IDEsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cmVhZEluZ3JlbWVudFN0b2NrKCkge1xyXG5cdFx0aWYgKHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UpIHtcclxuXHRcdFx0dGhpcy5yZW1haW5pbmdTdG9jayA9IHtcclxuXHRcdFx0XHQnTmV4dXMgTm9kZSc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignbmV4dXNOb2RlJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdDb25uZWN0aW9uIENyeXN0YWwnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2Nvbm5lY3Rpb25DcnlzdGFsJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdNYXN0ZXJ5IFNjcm9sbCc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignbWFzdGVyeVNjcm9sbCcpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnSW5zaWdodCBQcmlzbSc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignaW5zaWdodFByaXNtJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdSZWZsZWN0aXZlIEVzc2VuY2UnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3JlZmxlY3RpdmVFc3NlbmNlJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdBbXBsaWZpY2F0aW9uIENyeXN0YWwnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2FtcGxpZmljYXRpb25DcnlzdGFsJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdDcmVhdGl2ZSBDYXRhbHlzdCc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignY3JlYXRpdmVDYXRhbHlzdCcpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnUHJlY2lzaW9uIExlbnMnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3ByZWNpc2lvbkxlbnMnKSBhcyBudW1iZXIsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVDcmFmdGluZ0xheW91dCgpIHtcclxuXHRcdHRoaXMucmVhZEluZ3JlbWVudFN0b2NrKCk7XHJcblx0XHRjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdGNvbnRhaW5lci5jbGFzc05hbWUgPSAnbW9kYWwtY3JhZnRpbmctY29udGFpbmVyJztcclxuXHJcblx0XHQvLyBDcmVhdGUgYSBjb250YWluZXIgZm9yIHRoZSBzdG9jayBpbmZvcm1hdGlvblxyXG5cdFx0Y29uc3Qgc3RvY2tDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdHN0b2NrQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdzdG9jay1jb250YWluZXInO1xyXG5cclxuXHJcblx0XHRib29zdGVyUmVjaXBlcy5mb3JFYWNoKHJlY2lwZSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLmJvb3N0ZXJBdmFpbGFibGVGb3JVc2UocmVjaXBlLm5hbWUpKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0XHRcdGl0ZW1Db250YWluZXIuY2xhc3NOYW1lID0gJ2NyYWZ0aW5nLWl0ZW0tY29udGFpbmVyJztcclxuXHJcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcblx0XHRcdFx0YnV0dG9uLmlubmVyVGV4dCA9ICdDcmFmdCc7XHJcblx0XHRcdFx0YnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB0aGlzLmNyYWZ0Qm9vc3Rlckl0ZW0ocmVjaXBlKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgdXNlSW5mb0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG5cdFx0XHRcdHVzZUluZm9CdXR0b24uaW5uZXJUZXh0ID0gJz8nO1xyXG5cdFx0XHRcdHVzZUluZm9CdXR0b24ub25jbGljayA9ICgpID0+IHtcclxuXHRcdFx0XHRcdG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCB0aGlzLmdldEJvb3N0ZXJJbmZvckZyb21Gcm9tTmFtZShyZWNpcGUubmFtZSkpLm9wZW4oKTtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRjb25zdCBpdGVtVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuXHRcdFx0XHRpdGVtVGV4dC5pbm5lclRleHQgPSBgJHtyZWNpcGUubmFtZX0gXHUyMUQyICR7cmVjaXBlLmluY3JlZGllbnRzLmpvaW4oJyAgICAnKX1gO1xyXG5cclxuXHRcdFx0XHRpdGVtQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcblx0XHRcdFx0aXRlbUNvbnRhaW5lci5hcHBlbmRDaGlsZCh1c2VJbmZvQnV0dG9uKTtcclxuXHRcdFx0XHRpdGVtQ29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW1UZXh0KTtcclxuXHRcdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoaXRlbUNvbnRhaW5lcik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IHN0b2NrSW5mbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0c3RvY2tJbmZvLmNsYXNzTmFtZSA9ICdzdG9jay1pbmZvJztcclxuXHJcblx0XHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd24uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhgJHtlbGVtZW50Lm5hbWV9IDogJHt0aGlzLnJlbWFpbmluZ1N0b2NrW2VsZW1lbnQubmFtZV19YClcclxuXHRcdFx0c3RvY2tJbmZvLmlubmVySFRNTCArPSBgJHt0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShlbGVtZW50KS5zaG9ydE5hbWV9IFske3RoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoZWxlbWVudCkubmFtZV0gfHwgMH1dJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHN0b2NrQ29udGFpbmVyLmFwcGVuZENoaWxkKHN0b2NrSW5mbyk7XHJcblxyXG5cclxuXHJcblx0XHQvLyBBZGQgdGhlIHN0b2NrIGNvbnRhaW5lciB0byB0aGUgbWFpbiBjb250YWluZXJcclxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChzdG9ja0NvbnRhaW5lcik7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuXHR9XHJcblxyXG5cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVCb29zdGVyTGlzdChsYWJlbFRleHQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRjb250YWluZXIuY2xhc3NOYW1lID0gJ21vZGFsLWNoZWNrYm94LWNvbnRhaW5lcic7XHJcblxyXG5cdFx0Ly9jb25zdCBzdG9jayA9IHRoaXMucmVtYWluaW5nU3RvY2tbbGFiZWxUZXh0XSB8fCAwO1xyXG5cdFx0Y29uc3Qgc3RvY2sgPSB0aGlzLmJvb3N0ZXJzW2xhYmVsVGV4dF07XHJcblxyXG5cdFx0Y29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdGxhYmVsLmNsYXNzTmFtZSA9IGAke2xhYmVsVGV4dC5yZXBsYWNlKCcgJywgJy0nKX1gO1xyXG5cdFx0Y29uc3QgdXNlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcblx0XHRjb25zdCBtb21lbnREYXRlID0gdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nU3RyaW5nKHRoaXMuZ2V0Qm9vc3RlckRhdGVGcm9tTmFtZShsYWJlbFRleHQpKTtcclxuXHRcdGlmIChpc01pbnV0ZXNQYXNzZWQod2luZG93Lm1vbWVudChtb21lbnREYXRlIGFzIHN0cmluZywgJ1lZWVktTU0tREQgSEg6bW06c3MnKSwgdGhpcy5nZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShsYWJlbFRleHQpKSA9PSBmYWxzZSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgQm9vc3RlciAke2xhYmVsVGV4dH0gaXMgc3RpbGwgaW4gY29vbGRvd24gZm9yICR7d2luZG93Lm1vbWVudChtb21lbnREYXRlIGFzIHN0cmluZywgJ1lZWVktTU0tREQgSEg6bW06c3MnKSwgdGhpcy5nZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShsYWJlbFRleHQpIC8gNjB9IGhvdXJzYCk7XHJcblx0XHRcdGxhYmVsLmlubmVySFRNTCA9IGAke2xhYmVsVGV4dH0gOiAoJHtzdG9ja30pYDtcclxuXHRcdFx0Ly9jb25zdCB1c2VCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuXHRcdFx0dXNlQnV0dG9uLmlubmVyVGV4dCA9IGBjb29sZG93biAke2hvdXJzVW50aWxNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQobW9tZW50RGF0ZSBhcyBzdHJpbmcsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksIHRoaXMuZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUobGFiZWxUZXh0KSl9IGhvdXJzYDtcclxuXHRcdFx0dXNlQnV0dG9uLmlkID0gYHVzZS1idXR0b24tJHtsYWJlbFRleHQucmVwbGFjZSgnICcsICctJyl9YDtcclxuXHRcdFx0dXNlQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGAke2xhYmVsVGV4dH0gaXMgZm9yICR7aG91cnNVbnRpbE1pbnV0ZXNQYXNzZWQod2luZG93Lm1vbWVudChtb21lbnREYXRlIGFzIHN0cmluZywgJ1lZWVktTU0tREQgSEg6bW06c3MnKSwgdGhpcy5nZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShsYWJlbFRleHQpKX0gaG91cnMgaW4gY29vbGRvd24gYW5kIGNhbiBvbmx5IHRoZW4gYmUgdXNlZCBhZ2Fpbi5gKS5vcGVuKCk7XHJcblx0XHRcdH07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsYWJlbC5pbm5lckhUTUwgPSBgJHtsYWJlbFRleHR9IDogKCR7c3RvY2t9KWA7XHJcblx0XHRcdC8vY29uc3QgdXNlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcblx0XHRcdHVzZUJ1dHRvbi5pbm5lclRleHQgPSAnVXNlJztcclxuXHRcdFx0dXNlQnV0dG9uLmlkID0gYHVzZS1idXR0b24tJHtsYWJlbFRleHQucmVwbGFjZSgnICcsICctJyl9YDtcclxuXHRcdFx0dXNlQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy51c2VCb29zdGVySXRlbShsYWJlbFRleHQpO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHVzZUluZm9CdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuXHRcdHVzZUluZm9CdXR0b24uaW5uZXJUZXh0ID0gJz8nO1xyXG5cdFx0dXNlSW5mb0J1dHRvbi5pZCA9IGBpbmZvcm1hdGlvbi0ke2xhYmVsVGV4dC5yZXBsYWNlKCcgJywgJy0nKX1gO1xyXG5cdFx0dXNlSW5mb0J1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgdGhpcy5nZXRCb29zdGVySW5mb3JGcm9tRnJvbU5hbWUobGFiZWxUZXh0KSkub3BlbigpO1xyXG5cdFx0fTtcclxuXHJcblxyXG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHVzZUJ1dHRvbik7XHJcblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQodXNlSW5mb0J1dHRvbik7XHJcblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQobGFiZWwpO1xyXG5cclxuXHJcblx0XHRyZXR1cm4gY29udGFpbmVyO1xyXG5cclxuXHR9XHJcblxyXG5cclxuXHRpbmNyZW1lbnRJdGVtKGl0ZW06IHN0cmluZykge1xyXG5cdFx0Y29uc3Qgc3RvY2sgPSB0aGlzLnJlbWFpbmluZ1N0b2NrW2l0ZW1dO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgaW5jcmVtZW50SXRlbTogc3RvY2sgPSAke3N0b2NrfWApO1xyXG5cdFx0aWYgKHN0b2NrID4gMCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuXHRcdFx0dGhpcy5yZW1haW5pbmdTdG9ja1tpdGVtXS0tO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVF1YW50aXR5RGlzcGxheShpdGVtKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmJvb3N0ZXJzW2l0ZW1dICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5ib29zdGVyc1tpdGVtXS0tO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVF1YW50aXR5RGlzcGxheShpdGVtKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRkZWNyZW1lbnRJdGVtKGl0ZW06IHN0cmluZykge1xyXG5cdFx0Y29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoaXRlbSk7XHJcblxyXG5cdFx0aWYgKGl0ZW1JbmRleCA+IC0xKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuXHRcdFx0dGhpcy5yZW1haW5pbmdTdG9ja1tpdGVtXSsrO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVF1YW50aXR5RGlzcGxheShpdGVtKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmJvb3N0ZXJzW2l0ZW1dICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5ib29zdGVyc1tpdGVtXSsrO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVF1YW50aXR5RGlzcGxheShpdGVtKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIHVzZUJvb3N0ZXJJdGVtKGxhYmVsVGV4dDogc3RyaW5nKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgdXNlIEJvb3N0ZXIgJHtsYWJlbFRleHR9YCk7XHJcblx0XHRpZihsYWJlbFRleHQ9PSdGb3J0dW5lIEluZnVzaW9uJyl7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGFjcXVpcmVJbmdyZWRpZW50cygpO2ApXHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuYWNxdWlyZUluZ3JlZGllbnRzKDEsMSwxMClcclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nVGVtcG9yYWwgVHdlYWtlcicpe1xyXG5cdFx0XHRcclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nUGVycGV0dWFsIFByb2dyZXNzJyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzcycsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J1N0cmF0ZWdpYyBTeW5hcHNlcycpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMnLCB0cnVlKVxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdBY2NlbGVyYXRlZCBBY3F1aXNpdGlvbicpe1xyXG5cclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nTGlua2VycyBMb2RlJyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZScsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J0VmZm9ydGxlc3MgRXhwYW5zaW9uJyl7XHJcblxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdSZWN1cnNpdmUgUmVmbGVjdGlvbicpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUmVjdXJzaXZlUmVmbGVjdGlvbicsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J1N5bmFwdGljIFN1cmdlJyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlJywgdHJ1ZSlcclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nSW5zcGlyYXRpb24gSW5mdXNpb24nKXtcclxuXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J1RpdGxlIFRpdGFuJyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuJywgdHJ1ZSlcclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nUHJlY2lzaW9uIFByaXNtJyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbScsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J0h5cGVybGluayBIYXJtb255Jyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JIeXBlcmxpbmtIYXJtb255JywgdHJ1ZSlcclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nRXBoZW1lcmFsIEV1cGhvcmlhJyl7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JFcGhlbWVyYWxFdXBob3JpYScsIHRydWUpXHJcblx0XHR9XHJcblx0XHRcclxuXHRcdC8qY29uc3Qgc3RvY2sgPSB0aGlzLmJvb3N0ZXJzW2xhYmVsVGV4dF07XHJcblx0XHRpZiAoc3RvY2sgPiAwKSB7XHJcblx0XHRcdC8vdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2gobGFiZWxUZXh0KTtcclxuXHRcdFx0Ly90aGlzLmJvb3N0ZXJzW2xhYmVsVGV4dF0tLTtcclxuXHRcdFx0dGhpcy51cGRhdGVRdWFudGl0eURpc3BsYXkobGFiZWxUZXh0KTtcclxuXHRcdH0qL1xyXG5cdFx0dGhpcy5kZWNyZW1lbnRCb29zdGVyKGxhYmVsVGV4dCwgMSk7XHJcblxyXG5cdH1cclxuXHJcblxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVF1YW50aXR5RGlzcGxheShsYWJlbFRleHQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3Qgc3RvY2sgPSB0aGlzLmJvb3N0ZXJzW2xhYmVsVGV4dF07XHJcblx0XHRjb25zdCBzdG9ja0luZm8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsYWJlbFRleHQucmVwbGFjZSgnICcsICctJyl9YCk7XHJcblx0XHRpZiAoc3RvY2tJbmZvKSB7XHJcblx0XHRcdHN0b2NrSW5mby5pbm5lckhUTUwgPSAnJzsgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgY29udGVudFxyXG5cdFx0XHRzdG9ja0luZm8uaW5uZXJIVE1MID0gYCR7bGFiZWxUZXh0fSA6ICgke3N0b2NrfSlgO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgYnV0dG9uVXNlOiBIVE1MQnV0dG9uRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdXNlLWJ1dHRvbi0ke2xhYmVsVGV4dC5yZXBsYWNlKCcgJywgJy0nKX1gKTtcclxuXHRcdGlmIChidXR0b25Vc2UgIT09IG51bGwpIHtcclxuXHRcdFx0Y29uc3QgZGF0ZSA9IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ1N0cmluZyh0aGlzLmdldEJvb3N0ZXJEYXRlRnJvbU5hbWUobGFiZWxUZXh0KSk7XHJcblx0XHRcdGNvbnN0IG1vbWVudERhdGUgPSB3aW5kb3cubW9tZW50KHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ1N0cmluZyh0aGlzLmdldEJvb3N0ZXJEYXRlRnJvbU5hbWUobGFiZWxUZXh0KSksICdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XHJcblx0XHRcdGlmIChpc01pbnV0ZXNQYXNzZWQobW9tZW50RGF0ZSwgdGhpcy5nZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShsYWJlbFRleHQpKSA9PSBmYWxzZSkge1xyXG5cdFx0XHRcdGJ1dHRvblVzZS5zZXRUZXh0KGBjb29sZG93biAke2hvdXJzVW50aWxNaW51dGVzUGFzc2VkKG1vbWVudERhdGUsIHRoaXMuZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUobGFiZWxUZXh0KSl9IGhvdXJzYCk7XHJcblx0XHRcdFx0YnV0dG9uVXNlLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdFx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYCR7bGFiZWxUZXh0fSBpcyBmb3IgJHtob3Vyc1VudGlsTWludXRlc1Bhc3NlZChtb21lbnREYXRlLCB0aGlzLmdldEJvb3N0ZXJDb29sZG93bkZyb21OYW1lKGxhYmVsVGV4dCkpfSBob3VycyBpbiBjb29sZG93biBhbmQgY2FuIG9ubHkgdGhlbiBiZSB1c2VkIGFnYWluLmApLm9wZW4oKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGNoZWNrSW5ncmVkaWVudHNBdmFpbGFiaWxpdHkoaW5jcmVkaWVudHM6IHsgbmFtZTogc3RyaW5nOyBpbmNyZWRpZW50czogc3RyaW5nW107IH0pIHtcclxuXHRcdGZvciAoY29uc3QgaW5ncmVkaWVudCBvZiBpbmNyZWRpZW50cy5pbmNyZWRpZW50cykge1xyXG5cdFx0XHRjb25zdCBbcXVhbnRpdHksIHNob3J0TmFtZV0gPSBpbmdyZWRpZW50LnNwbGl0KCd4Jyk7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYHF1YW50aXR5OiAke3F1YW50aXR5fVxcdHNob3J0TmFtZTogJHtzaG9ydE5hbWV9YClcclxuXHRcdFx0Y29uc3QgcmVxdWlyZWRRdWFudGl0eSA9IHBhcnNlSW50KHF1YW50aXR5KTtcclxuXHRcdFx0Y29uc3QgYXZhaWxhYmxlU3RvY2sgPSB0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudE5hbWVGcm9tU2hvcnROYW1lKHNob3J0TmFtZSkgfHwgMF07XHJcblx0XHRcdC8vY29uc29sZS5sb2coYHJlcXVpcmVkUXVhbnRpdHk6ICR7cmVxdWlyZWRRdWFudGl0eX1cXHRhdmFpbGFibGVTdG9jazogXHUwMzAxJHthdmFpbGFibGVTdG9ja31gKVxyXG5cdFx0XHRpZiAocmVxdWlyZWRRdWFudGl0eSA+IGF2YWlsYWJsZVN0b2NrKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBOb3QgZW5vdWdoIHN0b2NrIGZvciB0aGlzIGluZ3JlZGllbnRcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgY2hlY2sxMDAwSW5ncmVkaWVudHNBdmFpbGFibGVBbmRCdXJuKCkge1xyXG5cdFx0bGV0IHRvdGFsQXZhaWxhYmxlSW5ncmVkaWVudHMgPSAwO1xyXG5cdFxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIGluZ3JlZGllbnRzXHJcblx0XHQvL2VsZW1lbnRzLmZvckVhY2goaW5jcmVtZW50ID0+IHtcclxuXHRcdGxpc3RPZlVzZWFibGVJbmdyZWRpZW50c1RvQmVTaG93bi5mb3JFYWNoKGluY3JlbWVudCA9PiB7XHJcblx0XHRcdHRvdGFsQXZhaWxhYmxlSW5ncmVkaWVudHMgKz0gdGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLm5hbWVdIHx8IDA7XHJcblx0XHR9KTtcclxuXHRcclxuXHRcdGNvbnNvbGUubG9nKGB0b3RhbCBhbW91bnQgb2YgaW5ncmVkaW1lbnRzOiAke3RvdGFsQXZhaWxhYmxlSW5ncmVkaWVudHN9YClcclxuXHRcdC8vIElmIGF0IGxlYXN0IDEwMDAgaW5ncmVkaWVudHMgYXJlIGF2YWlsYWJsZVxyXG5cdFx0aWYgKHRvdGFsQXZhaWxhYmxlSW5ncmVkaWVudHMgPj0gMTAwMCkge1xyXG5cdFx0XHQvLyBCdXJuIGluZ3JlZGllbnRzIHByb3BvcnRpb25hbGx5XHJcblx0XHRcdC8vZWxlbWVudHMuZm9yRWFjaChpbmNyZW1lbnQgPT4ge1xyXG5cdFx0XHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd24uZm9yRWFjaChpbmNyZW1lbnQgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IHByb3BvcnRpb25hbEFtb3VudCA9IE1hdGguY2VpbCgodGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLm5hbWVdIC8gdG90YWxBdmFpbGFibGVJbmdyZWRpZW50cykgKiAxMDAwKTtcclxuXHRcdFx0XHRcdC8vY29uc3QgcmVzdCA9IHRoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSAtIHByb3BvcnRpb25hbEFtb3VudDtcclxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coYCR7dGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5zaG9ydE5hbWV9ICR7dGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLm5hbWVdfSBzaGFsbCBiZSAke3RoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSAtIHJlc3R9ID0gJHt0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV19IC0gJHtyZXN0fWApXHJcblx0XHRcdFx0XHQvL3RoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSA9IHRoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSAtIHByb3BvcnRpb25hbEFtb3VudDtcclxuXHRcdFx0XHRcdC8vdGhpcy51cGRhdGVJbmNyZW1lbnRTdG9jayh0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLnZhck5hbWUsIHRoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSlcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5jcmVtZW50U3RvY2sodGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lLCB0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0gLSBwcm9wb3J0aW9uYWxBbW91bnQpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcclxuXHRcdFx0Ly9zYXZlIG5ldyBzdG9ja1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBzdG9jayBpbmZvcm1hdGlvbiBkaXNwbGF5XHJcblx0XHRcdHRoaXMudXBkYXRlU3RvY2tJbmZvcm1hdGlvbigpO1xyXG5cdFxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0XHJcblxyXG5cdFxyXG5cclxuXHJcblx0cHJpdmF0ZSB1c2VJbmdyZWRpbWVudHMoaW5jcmVkaWVudHM6IHsgbmFtZTogc3RyaW5nOyBpbmNyZWRpZW50czogc3RyaW5nW107IH0pIHtcclxuXHRcdGZvciAoY29uc3QgaW5ncmVkaWVudCBvZiBpbmNyZWRpZW50cy5pbmNyZWRpZW50cykge1xyXG5cdFx0XHRjb25zdCBbcXVhbnRpdHksIHNob3J0TmFtZV0gPSBpbmdyZWRpZW50LnNwbGl0KCd4Jyk7XHJcblx0XHRcdGNvbnN0IHJlcXVpcmVkUXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcblx0XHRcdGNvbnN0IGF2YWlsYWJsZVN0b2NrID0gdGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnROYW1lRnJvbVNob3J0TmFtZShzaG9ydE5hbWUpIHx8IDBdO1xyXG5cdFx0XHRjb25zdCBpbmdyZW1lbnROYW1lID0gdGhpcy5nZXRJbmdlcmVtZW50TmFtZUZyb21TaG9ydE5hbWUoc2hvcnROYW1lKSB8fCAnJztcclxuXHRcdFx0dGhpcy51cGRhdGVJbmNyZW1lbnRTdG9jayhpbmdyZW1lbnROYW1lLCBhdmFpbGFibGVTdG9jayAtIHJlcXVpcmVkUXVhbnRpdHkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgdXBkYXRlU3RvY2tJbmZvcm1hdGlvbigpIHtcclxuXHRcdGNvbnN0IHN0b2NrSW5mbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdG9jay1pbmZvJyk7XHJcblx0XHRpZiAoc3RvY2tJbmZvKSB7XHJcblx0XHRcdHN0b2NrSW5mby5pbm5lckhUTUwgPSAnJzsgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgY29udGVudFxyXG5cclxuXHRcdFx0Ly9lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG5cdFx0XHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd24uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHRcdFx0XHQvL3N0b2NrSW5mby5pbm5lckhUTUwgKz0gYCR7ZWxlbWVudC5zaG9ydE5hbWV9IFske3RoaXMucmVtYWluaW5nU3RvY2tbZWxlbWVudC5uYW1lXSB8fCAwfV0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtgO1xyXG5cdFx0XHRcdHN0b2NrSW5mby5pbm5lckhUTUwgKz0gYCR7dGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoZWxlbWVudCkuc2hvcnROYW1lfSBbJHt0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGVsZW1lbnQpLm5hbWVdIHx8IDB9XSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2A7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgY3JhZnRCb29zdGVySXRlbShzZWxlY3RlZEl0ZW1zOiB7IG5hbWU6IHN0cmluZzsgaW5jcmVkaWVudHM6IHN0cmluZ1tdOyB9KSB7XHJcblx0XHQvLyBjYWxsIGhlcmUgdGhlIHJlY2lwZSBsb2dpYyBhbmQgcmVkdWNlIHRoZSBzdG9ja1xyXG5cdFx0aWYoc2VsZWN0ZWRJdGVtcy5uYW1lID09ICdFcGhlbWVyYWwgRXVwaG9yaWEnKXtcclxuXHRcdFx0aWYodGhpcy5jaGVjazEwMDBJbmdyZWRpZW50c0F2YWlsYWJsZUFuZEJ1cm4oKSl7XHJcblx0XHRcdFx0dGhpcy51cGRhdGVCb29zdGVyU3RvY2soc2VsZWN0ZWRJdGVtcy5uYW1lLCAxKTtcclxuXHRcdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdOdW1iZXIodGhpcy5nZXRCb29zdGVyVmFyTmFtZUZyb21OYW1lKHNlbGVjdGVkSXRlbXMubmFtZSksIHRoaXMuYm9vc3RlcnNbc2VsZWN0ZWRJdGVtcy5uYW1lXSk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGNyYWZ0IGJvb3N0ZXIgJHtzZWxlY3RlZEl0ZW1zLm5hbWV9YCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYG5vdCBlbm91Z2ggaW5ncmVkaWVudHMgZm9yIGJvb3N0ZXIgJHtzZWxlY3RlZEl0ZW1zLm5hbWV9IGluIHN0b2NrYCk7XHJcblx0XHRcdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGBOb3QgZW5vdWdoIGluZ3JlZGltZW50cyBhdmFpbGFibGUgZm9yICcke3NlbGVjdGVkSXRlbXMubmFtZX0nLiBDcmFmdCBtb3JlIE5vdGVzIHRvIGNvbGxlY3QgbmV3IGluZ3JlZGltZW50cy5gKS5vcGVuKCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZihzZWxlY3RlZEl0ZW1zLm5hbWUgPT0gJ0ZvcnR1bmUgSW5mdXNpb24nKXtcclxuXHRcdFx0XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5jaGVja0luZ3JlZGllbnRzQXZhaWxhYmlsaXR5KHNlbGVjdGVkSXRlbXMpKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYGNyYWZ0IGJvb3N0ZXIgJHtzZWxlY3RlZEl0ZW1zLm5hbWV9YCk7XHJcblx0XHRcdFx0dGhpcy51cGRhdGVCb29zdGVyU3RvY2soc2VsZWN0ZWRJdGVtcy5uYW1lLCAxKTtcclxuXHRcdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdOdW1iZXIodGhpcy5nZXRCb29zdGVyVmFyTmFtZUZyb21OYW1lKHNlbGVjdGVkSXRlbXMubmFtZSksIHRoaXMuYm9vc3RlcnNbc2VsZWN0ZWRJdGVtcy5uYW1lXSk7XHJcblx0XHRcdFx0dGhpcy51c2VJbmdyZWRpbWVudHMoc2VsZWN0ZWRJdGVtcyk7XHJcblx0XHRcdFx0Ly90aGlzLnVwZGF0ZVF1YW50aXR5RGlzcGxheShzZWxlY3RlZEl0ZW1zLm5hbWUpXHJcblx0XHRcdFx0dGhpcy51cGRhdGVTdG9ja0luZm9ybWF0aW9uKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYG5vdCBlbm91Z2ggaW5ncmVkaWVudHMgZm9yIGJvb3N0ZXIgJHtzZWxlY3RlZEl0ZW1zLm5hbWV9IGluIHN0b2NrYCk7XHJcblx0XHRcdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGBOb3QgZW5vdWdoIGluZ3JlZGltZW50cyBhdmFpbGFibGUgZm9yICcke3NlbGVjdGVkSXRlbXMubmFtZX0nLiBDcmFmdCBtb3JlIE5vdGVzIHRvIGNvbGxlY3QgbmV3IGluZ3JlZGltZW50cy5gKS5vcGVuKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGdldEluZ2VyZW1lbnROYW1lRnJvbVNob3J0TmFtZShzaG9ydE5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50LnNob3J0TmFtZSA9PT0gc2hvcnROYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQubmFtZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG51bGw7IC8vIFJldHVybiBudWxsIGlmIG5vIG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmRcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SW5nZXJlbWVudFNob3J0TmFtZUZyb21OYW1lKG5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IG5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC5zaG9ydE5hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZ2VyZW1lbnRGcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5uYW1lID09PSBuYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7IHNob3J0TmFtZTogJycsIG5hbWU6ICcnLCB2YXJOYW1lOiAnJyB9OyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBnZXRJbmdlcmVtZW50VmFyTmFtZUZyb21TaG9ydE5hbWUoc2hvcnROYW1lOiBzdHJpbmcpIHtcclxuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5zaG9ydE5hbWUgPT09IHNob3J0TmFtZSkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50LnZhck5hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZ2VyZW1lbnRWYXJOYW1lRnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gbmFtZSkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50LnZhck5hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEJvb3N0ZXJWYXJOYW1lRnJvbU5hbWUoYm9vc3Rlck5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGJvb3N0ZXJSZWNpcGVzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IGJvb3N0ZXJOYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQudmFybmFtZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuICcnOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEJvb3N0ZXJJbmZvckZyb21Gcm9tTmFtZShib29zdGVyTmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gYm9vc3Rlck5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC5kZXNjcmlwdGlvbjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuICcnOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEJvb3N0ZXJTd2l0Y2hGcm9tTmFtZShib29zdGVyTmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gYm9vc3Rlck5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC5ib29zdGVyU3dpdGNoO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7IC8vIFJldHVybiBudWxsIGlmIG5vIG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmRcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Qm9vc3RlckRhdGVGcm9tTmFtZShib29zdGVyTmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gYm9vc3Rlck5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC5ib29zdGVyRGF0ZSBhcyBzdHJpbmc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAnJzsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShib29zdGVyTmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gYm9vc3Rlck5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC5ib29zdGVyQ29vbGRvd247XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAwOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEJvb3N0ZXJVc2VGcm9tTmFtZShib29zdGVyTmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gYm9vc3Rlck5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC5ib29zdGVyVXNlQ291bnROYW1lIGFzIHN0cmluZztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuICcnOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw0Q0FBQUEsU0FBQTtBQUFDLEtBQUMsU0FBVSxNQUFNLFNBQVM7QUFDMUIsVUFBSSxPQUFPLFlBQVksVUFBVTtBQUVoQyxRQUFBQSxRQUFPLFVBQVUsVUFBVSxRQUFRO0FBQUEsTUFDcEMsV0FDUyxPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFFcEQsZUFBTyxDQUFDLEdBQUcsT0FBTztBQUFBLE1BQ25CLE9BQ0s7QUFFSixhQUFLLFdBQVcsUUFBUTtBQUFBLE1BQ3pCO0FBQUEsSUFDRCxHQUFFLFNBQU0sV0FBWTtBQU9uQixVQUFJQyxZQUFXQSxhQUFhLFNBQVVDLE9BQU1DLFlBQVc7QUFFbkQsWUFBSTtBQUdKLFlBQUksT0FBTyxXQUFXLGVBQWUsT0FBTyxRQUFRO0FBQ2hELG1CQUFTLE9BQU87QUFBQSxRQUNwQjtBQUdBLFlBQUksT0FBTyxTQUFTLGVBQWUsS0FBSyxRQUFRO0FBQzVDLG1CQUFTLEtBQUs7QUFBQSxRQUNsQjtBQUdBLFlBQUksT0FBTyxlQUFlLGVBQWUsV0FBVyxRQUFRO0FBQ3hELG1CQUFTLFdBQVc7QUFBQSxRQUN4QjtBQUdBLFlBQUksQ0FBQyxVQUFVLE9BQU8sV0FBVyxlQUFlLE9BQU8sVUFBVTtBQUM3RCxtQkFBUyxPQUFPO0FBQUEsUUFDcEI7QUFHQSxZQUFJLENBQUMsVUFBVSxPQUFPLFdBQVcsZUFBZSxPQUFPLFFBQVE7QUFDM0QsbUJBQVMsT0FBTztBQUFBLFFBQ3BCO0FBR0EsWUFBSSxDQUFDLFVBQVUsT0FBTyxZQUFZLFlBQVk7QUFDMUMsY0FBSTtBQUNBLHFCQUFTLFFBQVEsUUFBUTtBQUFBLFVBQzdCLFNBQVMsS0FBUDtBQUFBLFVBQWE7QUFBQSxRQUNuQjtBQU9BLFlBQUksd0JBQXdCLFdBQVk7QUFDcEMsY0FBSSxRQUFRO0FBRVIsZ0JBQUksT0FBTyxPQUFPLG9CQUFvQixZQUFZO0FBQzlDLGtCQUFJO0FBQ0EsdUJBQU8sT0FBTyxnQkFBZ0IsSUFBSSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFBQSxjQUN2RCxTQUFTLEtBQVA7QUFBQSxjQUFhO0FBQUEsWUFDbkI7QUFHQSxnQkFBSSxPQUFPLE9BQU8sZ0JBQWdCLFlBQVk7QUFDMUMsa0JBQUk7QUFDQSx1QkFBTyxPQUFPLFlBQVksQ0FBQyxFQUFFLFlBQVk7QUFBQSxjQUM3QyxTQUFTLEtBQVA7QUFBQSxjQUFhO0FBQUEsWUFDbkI7QUFBQSxVQUNKO0FBRUEsZ0JBQU0sSUFBSSxNQUFNLHFFQUFxRTtBQUFBLFFBQ3pGO0FBTUEsWUFBSSxTQUFTLE9BQU8sVUFBVyxXQUFZO0FBQ3ZDLG1CQUFTLElBQUk7QUFBQSxVQUFDO0FBRWQsaUJBQU8sU0FBVSxLQUFLO0FBQ2xCLGdCQUFJO0FBRUosY0FBRSxZQUFZO0FBRWQsc0JBQVUsSUFBSSxFQUFFO0FBRWhCLGNBQUUsWUFBWTtBQUVkLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0osRUFBRTtBQUtGLFlBQUksSUFBSSxDQUFDO0FBS1QsWUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDO0FBS3JCLFlBQUksT0FBTyxNQUFNLE9BQVEsV0FBWTtBQUdqQyxpQkFBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBbUJILFFBQVEsU0FBVSxXQUFXO0FBRXpCLGtCQUFJLFVBQVUsT0FBTyxJQUFJO0FBR3pCLGtCQUFJLFdBQVc7QUFDWCx3QkFBUSxNQUFNLFNBQVM7QUFBQSxjQUMzQjtBQUdBLGtCQUFJLENBQUMsUUFBUSxlQUFlLE1BQU0sS0FBSyxLQUFLLFNBQVMsUUFBUSxNQUFNO0FBQy9ELHdCQUFRLE9BQU8sV0FBWTtBQUN2QiwwQkFBUSxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFBQSxnQkFDN0M7QUFBQSxjQUNKO0FBR0Esc0JBQVEsS0FBSyxZQUFZO0FBR3pCLHNCQUFRLFNBQVM7QUFFakIscUJBQU87QUFBQSxZQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFjQSxRQUFRLFdBQVk7QUFDaEIsa0JBQUksV0FBVyxLQUFLLE9BQU87QUFDM0IsdUJBQVMsS0FBSyxNQUFNLFVBQVUsU0FBUztBQUV2QyxxQkFBTztBQUFBLFlBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQWNBLE1BQU0sV0FBWTtBQUFBLFlBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFlBYUEsT0FBTyxTQUFVLFlBQVk7QUFDekIsdUJBQVMsZ0JBQWdCLFlBQVk7QUFDakMsb0JBQUksV0FBVyxlQUFlLFlBQVksR0FBRztBQUN6Qyx1QkFBSyxZQUFZLElBQUksV0FBVyxZQUFZO0FBQUEsZ0JBQ2hEO0FBQUEsY0FDSjtBQUdBLGtCQUFJLFdBQVcsZUFBZSxVQUFVLEdBQUc7QUFDdkMscUJBQUssV0FBVyxXQUFXO0FBQUEsY0FDL0I7QUFBQSxZQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFXQSxPQUFPLFdBQVk7QUFDZixxQkFBTyxLQUFLLEtBQUssVUFBVSxPQUFPLElBQUk7QUFBQSxZQUMxQztBQUFBLFVBQ0o7QUFBQSxRQUNKLEVBQUU7QUFRRixZQUFJLFlBQVksTUFBTSxZQUFZLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBYTFDLE1BQU0sU0FBVSxPQUFPLFVBQVU7QUFDN0Isb0JBQVEsS0FBSyxRQUFRLFNBQVMsQ0FBQztBQUUvQixnQkFBSSxZQUFZQSxZQUFXO0FBQ3ZCLG1CQUFLLFdBQVc7QUFBQSxZQUNwQixPQUFPO0FBQ0gsbUJBQUssV0FBVyxNQUFNLFNBQVM7QUFBQSxZQUNuQztBQUFBLFVBQ0o7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBZUEsVUFBVSxTQUFVLFNBQVM7QUFDekIsb0JBQVEsV0FBVyxLQUFLLFVBQVUsSUFBSTtBQUFBLFVBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBYUEsUUFBUSxTQUFVLFdBQVc7QUFFekIsZ0JBQUksWUFBWSxLQUFLO0FBQ3JCLGdCQUFJLFlBQVksVUFBVTtBQUMxQixnQkFBSSxlQUFlLEtBQUs7QUFDeEIsZ0JBQUksZUFBZSxVQUFVO0FBRzdCLGlCQUFLLE1BQU07QUFHWCxnQkFBSSxlQUFlLEdBQUc7QUFFbEIsdUJBQVNDLEtBQUksR0FBR0EsS0FBSSxjQUFjQSxNQUFLO0FBQ25DLG9CQUFJLFdBQVksVUFBVUEsT0FBTSxDQUFDLE1BQU8sS0FBTUEsS0FBSSxJQUFLLElBQU07QUFDN0QsMEJBQVcsZUFBZUEsT0FBTyxDQUFDLEtBQUssWUFBYSxNQUFPLGVBQWVBLE1BQUssSUFBSztBQUFBLGNBQ3hGO0FBQUEsWUFDSixPQUFPO0FBRUgsdUJBQVMsSUFBSSxHQUFHLElBQUksY0FBYyxLQUFLLEdBQUc7QUFDdEMsMEJBQVcsZUFBZSxNQUFPLENBQUMsSUFBSSxVQUFVLE1BQU0sQ0FBQztBQUFBLGNBQzNEO0FBQUEsWUFDSjtBQUNBLGlCQUFLLFlBQVk7QUFHakIsbUJBQU87QUFBQSxVQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVNBLE9BQU8sV0FBWTtBQUVmLGdCQUFJLFFBQVEsS0FBSztBQUNqQixnQkFBSSxXQUFXLEtBQUs7QUFHcEIsa0JBQU0sYUFBYSxDQUFDLEtBQUssY0FBZSxLQUFNLFdBQVcsSUFBSztBQUM5RCxrQkFBTSxTQUFTRixNQUFLLEtBQUssV0FBVyxDQUFDO0FBQUEsVUFDekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVdBLE9BQU8sV0FBWTtBQUNmLGdCQUFJLFFBQVEsS0FBSyxNQUFNLEtBQUssSUFBSTtBQUNoQyxrQkFBTSxRQUFRLEtBQUssTUFBTSxNQUFNLENBQUM7QUFFaEMsbUJBQU87QUFBQSxVQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWVBLFFBQVEsU0FBVSxRQUFRO0FBQ3RCLGdCQUFJLFFBQVEsQ0FBQztBQUViLHFCQUFTRSxLQUFJLEdBQUdBLEtBQUksUUFBUUEsTUFBSyxHQUFHO0FBQ2hDLG9CQUFNLEtBQUssc0JBQXNCLENBQUM7QUFBQSxZQUN0QztBQUVBLG1CQUFPLElBQUksVUFBVSxLQUFLLE9BQU8sTUFBTTtBQUFBLFVBQzNDO0FBQUEsUUFDSixDQUFDO0FBS0QsWUFBSSxRQUFRLEVBQUUsTUFBTSxDQUFDO0FBS3JCLFlBQUksTUFBTSxNQUFNLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBY2xCLFdBQVcsU0FBVSxXQUFXO0FBRTVCLGdCQUFJLFFBQVEsVUFBVTtBQUN0QixnQkFBSSxXQUFXLFVBQVU7QUFHekIsZ0JBQUksV0FBVyxDQUFDO0FBQ2hCLHFCQUFTQSxLQUFJLEdBQUdBLEtBQUksVUFBVUEsTUFBSztBQUMvQixrQkFBSSxPQUFRLE1BQU1BLE9BQU0sQ0FBQyxNQUFPLEtBQU1BLEtBQUksSUFBSyxJQUFNO0FBQ3JELHVCQUFTLE1BQU0sU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO0FBQ3ZDLHVCQUFTLE1BQU0sT0FBTyxJQUFNLFNBQVMsRUFBRSxDQUFDO0FBQUEsWUFDNUM7QUFFQSxtQkFBTyxTQUFTLEtBQUssRUFBRTtBQUFBLFVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWVBLE9BQU8sU0FBVSxRQUFRO0FBRXJCLGdCQUFJLGVBQWUsT0FBTztBQUcxQixnQkFBSSxRQUFRLENBQUM7QUFDYixxQkFBU0EsS0FBSSxHQUFHQSxLQUFJLGNBQWNBLE1BQUssR0FBRztBQUN0QyxvQkFBTUEsT0FBTSxDQUFDLEtBQUssU0FBUyxPQUFPLE9BQU9BLElBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBTSxLQUFNQSxLQUFJLElBQUs7QUFBQSxZQUMzRTtBQUVBLG1CQUFPLElBQUksVUFBVSxLQUFLLE9BQU8sZUFBZSxDQUFDO0FBQUEsVUFDckQ7QUFBQSxRQUNKO0FBS0EsWUFBSSxTQUFTLE1BQU0sU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFjeEIsV0FBVyxTQUFVLFdBQVc7QUFFNUIsZ0JBQUksUUFBUSxVQUFVO0FBQ3RCLGdCQUFJLFdBQVcsVUFBVTtBQUd6QixnQkFBSSxjQUFjLENBQUM7QUFDbkIscUJBQVNBLEtBQUksR0FBR0EsS0FBSSxVQUFVQSxNQUFLO0FBQy9CLGtCQUFJLE9BQVEsTUFBTUEsT0FBTSxDQUFDLE1BQU8sS0FBTUEsS0FBSSxJQUFLLElBQU07QUFDckQsMEJBQVksS0FBSyxPQUFPLGFBQWEsSUFBSSxDQUFDO0FBQUEsWUFDOUM7QUFFQSxtQkFBTyxZQUFZLEtBQUssRUFBRTtBQUFBLFVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWVBLE9BQU8sU0FBVSxXQUFXO0FBRXhCLGdCQUFJLGtCQUFrQixVQUFVO0FBR2hDLGdCQUFJLFFBQVEsQ0FBQztBQUNiLHFCQUFTQSxLQUFJLEdBQUdBLEtBQUksaUJBQWlCQSxNQUFLO0FBQ3RDLG9CQUFNQSxPQUFNLENBQUMsTUFBTSxVQUFVLFdBQVdBLEVBQUMsSUFBSSxRQUFVLEtBQU1BLEtBQUksSUFBSztBQUFBLFlBQzFFO0FBRUEsbUJBQU8sSUFBSSxVQUFVLEtBQUssT0FBTyxlQUFlO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBS0EsWUFBSSxPQUFPLE1BQU0sT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFjcEIsV0FBVyxTQUFVLFdBQVc7QUFDNUIsZ0JBQUk7QUFDQSxxQkFBTyxtQkFBbUIsT0FBTyxPQUFPLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFBQSxZQUNqRSxTQUFTQyxJQUFQO0FBQ0Usb0JBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLFlBQzFDO0FBQUEsVUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFlQSxPQUFPLFNBQVUsU0FBUztBQUN0QixtQkFBTyxPQUFPLE1BQU0sU0FBUyxtQkFBbUIsT0FBTyxDQUFDLENBQUM7QUFBQSxVQUM3RDtBQUFBLFFBQ0o7QUFTQSxZQUFJLHlCQUF5QixNQUFNLHlCQUF5QixLQUFLLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBUXBFLE9BQU8sV0FBWTtBQUVmLGlCQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUs7QUFDaEMsaUJBQUssY0FBYztBQUFBLFVBQ3ZCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVlBLFNBQVMsU0FBVSxNQUFNO0FBRXJCLGdCQUFJLE9BQU8sUUFBUSxVQUFVO0FBQ3pCLHFCQUFPLEtBQUssTUFBTSxJQUFJO0FBQUEsWUFDMUI7QUFHQSxpQkFBSyxNQUFNLE9BQU8sSUFBSTtBQUN0QixpQkFBSyxlQUFlLEtBQUs7QUFBQSxVQUM3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWdCQSxVQUFVLFNBQVUsU0FBUztBQUN6QixnQkFBSTtBQUdKLGdCQUFJLE9BQU8sS0FBSztBQUNoQixnQkFBSSxZQUFZLEtBQUs7QUFDckIsZ0JBQUksZUFBZSxLQUFLO0FBQ3hCLGdCQUFJLFlBQVksS0FBSztBQUNyQixnQkFBSSxpQkFBaUIsWUFBWTtBQUdqQyxnQkFBSSxlQUFlLGVBQWU7QUFDbEMsZ0JBQUksU0FBUztBQUVULDZCQUFlSCxNQUFLLEtBQUssWUFBWTtBQUFBLFlBQ3pDLE9BQU87QUFHSCw2QkFBZUEsTUFBSyxLQUFLLGVBQWUsS0FBSyxLQUFLLGdCQUFnQixDQUFDO0FBQUEsWUFDdkU7QUFHQSxnQkFBSSxjQUFjLGVBQWU7QUFHakMsZ0JBQUksY0FBY0EsTUFBSyxJQUFJLGNBQWMsR0FBRyxZQUFZO0FBR3hELGdCQUFJLGFBQWE7QUFDYix1QkFBUyxTQUFTLEdBQUcsU0FBUyxhQUFhLFVBQVUsV0FBVztBQUU1RCxxQkFBSyxnQkFBZ0IsV0FBVyxNQUFNO0FBQUEsY0FDMUM7QUFHQSwrQkFBaUIsVUFBVSxPQUFPLEdBQUcsV0FBVztBQUNoRCxtQkFBSyxZQUFZO0FBQUEsWUFDckI7QUFHQSxtQkFBTyxJQUFJLFVBQVUsS0FBSyxnQkFBZ0IsV0FBVztBQUFBLFVBQ3pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFXQSxPQUFPLFdBQVk7QUFDZixnQkFBSSxRQUFRLEtBQUssTUFBTSxLQUFLLElBQUk7QUFDaEMsa0JBQU0sUUFBUSxLQUFLLE1BQU0sTUFBTTtBQUUvQixtQkFBTztBQUFBLFVBQ1g7QUFBQSxVQUVBLGdCQUFnQjtBQUFBLFFBQ3BCLENBQUM7QUFPRCxZQUFJLFNBQVMsTUFBTSxTQUFTLHVCQUF1QixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJdEQsS0FBSyxLQUFLLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVdqQixNQUFNLFNBQVUsS0FBSztBQUVqQixpQkFBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEdBQUc7QUFHOUIsaUJBQUssTUFBTTtBQUFBLFVBQ2Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBU0EsT0FBTyxXQUFZO0FBRWYsbUNBQXVCLE1BQU0sS0FBSyxJQUFJO0FBR3RDLGlCQUFLLFNBQVM7QUFBQSxVQUNsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBY0EsUUFBUSxTQUFVLGVBQWU7QUFFN0IsaUJBQUssUUFBUSxhQUFhO0FBRzFCLGlCQUFLLFNBQVM7QUFHZCxtQkFBTztBQUFBLFVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFnQkEsVUFBVSxTQUFVLGVBQWU7QUFFL0IsZ0JBQUksZUFBZTtBQUNmLG1CQUFLLFFBQVEsYUFBYTtBQUFBLFlBQzlCO0FBR0EsZ0JBQUksT0FBTyxLQUFLLFlBQVk7QUFFNUIsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFFQSxXQUFXLE1BQUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBZWYsZUFBZSxTQUFVLFFBQVE7QUFDN0IsbUJBQU8sU0FBVSxTQUFTLEtBQUs7QUFDM0IscUJBQU8sSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLFNBQVMsT0FBTztBQUFBLFlBQ2hEO0FBQUEsVUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFlQSxtQkFBbUIsU0FBVSxRQUFRO0FBQ2pDLG1CQUFPLFNBQVUsU0FBUyxLQUFLO0FBQzNCLHFCQUFPLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUFHLEVBQUUsU0FBUyxPQUFPO0FBQUEsWUFDN0Q7QUFBQSxVQUNKO0FBQUEsUUFDSixDQUFDO0FBS0QsWUFBSSxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBRXZCLGVBQU87QUFBQSxNQUNYLEVBQUUsSUFBSTtBQUdOLGFBQU9EO0FBQUEsSUFFUixDQUFDO0FBQUE7QUFBQTs7O0FDdHlCRDtBQUFBLGdEQUFBSyxTQUFBO0FBQUMsS0FBQyxTQUFVLE1BQU0sU0FBUztBQUMxQixVQUFJLE9BQU8sWUFBWSxVQUFVO0FBRWhDLFFBQUFBLFFBQU8sVUFBVSxVQUFVLFFBQVEsY0FBaUI7QUFBQSxNQUNyRCxXQUNTLE9BQU8sV0FBVyxjQUFjLE9BQU8sS0FBSztBQUVwRCxlQUFPLENBQUMsUUFBUSxHQUFHLE9BQU87QUFBQSxNQUMzQixPQUNLO0FBRUosZ0JBQVEsS0FBSyxRQUFRO0FBQUEsTUFDdEI7QUFBQSxJQUNELEdBQUUsU0FBTSxTQUFVQyxXQUFVO0FBRTNCLE9BQUMsU0FBVUMsWUFBVztBQUVsQixZQUFJLElBQUlEO0FBQ1IsWUFBSSxRQUFRLEVBQUU7QUFDZCxZQUFJLE9BQU8sTUFBTTtBQUNqQixZQUFJLGVBQWUsTUFBTTtBQUt6QixZQUFJLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFLckIsWUFBSSxVQUFVLE1BQU0sT0FBTyxLQUFLLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBV25DLE1BQU0sU0FBVSxNQUFNLEtBQUs7QUFDdkIsaUJBQUssT0FBTztBQUNaLGlCQUFLLE1BQU07QUFBQSxVQUNmO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBc0tKLENBQUM7QUFRRCxZQUFJLGVBQWUsTUFBTSxZQUFZLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQXFCN0MsTUFBTSxTQUFVLE9BQU8sVUFBVTtBQUM3QixvQkFBUSxLQUFLLFFBQVEsU0FBUyxDQUFDO0FBRS9CLGdCQUFJLFlBQVlDLFlBQVc7QUFDdkIsbUJBQUssV0FBVztBQUFBLFlBQ3BCLE9BQU87QUFDSCxtQkFBSyxXQUFXLE1BQU0sU0FBUztBQUFBLFlBQ25DO0FBQUEsVUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBV0EsT0FBTyxXQUFZO0FBRWYsZ0JBQUksV0FBVyxLQUFLO0FBQ3BCLGdCQUFJLGlCQUFpQixTQUFTO0FBRzlCLGdCQUFJLFdBQVcsQ0FBQztBQUNoQixxQkFBU0MsS0FBSSxHQUFHQSxLQUFJLGdCQUFnQkEsTUFBSztBQUNyQyxrQkFBSSxVQUFVLFNBQVNBLEVBQUM7QUFDeEIsdUJBQVMsS0FBSyxRQUFRLElBQUk7QUFDMUIsdUJBQVMsS0FBSyxRQUFRLEdBQUc7QUFBQSxZQUM3QjtBQUVBLG1CQUFPLGFBQWEsT0FBTyxVQUFVLEtBQUssUUFBUTtBQUFBLFVBQ3REO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFXQSxPQUFPLFdBQVk7QUFDZixnQkFBSSxRQUFRLEtBQUssTUFBTSxLQUFLLElBQUk7QUFHaEMsZ0JBQUksUUFBUSxNQUFNLFFBQVEsS0FBSyxNQUFNLE1BQU0sQ0FBQztBQUc1QyxnQkFBSSxjQUFjLE1BQU07QUFDeEIscUJBQVNBLEtBQUksR0FBR0EsS0FBSSxhQUFhQSxNQUFLO0FBQ2xDLG9CQUFNQSxFQUFDLElBQUksTUFBTUEsRUFBQyxFQUFFLE1BQU07QUFBQSxZQUM5QjtBQUVBLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0wsR0FBRTtBQUdGLGFBQU9GO0FBQUEsSUFFUixDQUFDO0FBQUE7QUFBQTs7O0FDL1NEO0FBQUEsdURBQUFHLFNBQUE7QUFBQyxLQUFDLFNBQVUsTUFBTSxTQUFTO0FBQzFCLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFFaEMsUUFBQUEsUUFBTyxVQUFVLFVBQVUsUUFBUSxjQUFpQjtBQUFBLE1BQ3JELFdBQ1MsT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBRXBELGVBQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTztBQUFBLE1BQzNCLE9BQ0s7QUFFSixnQkFBUSxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUFBLElBQ0QsR0FBRSxTQUFNLFNBQVVDLFdBQVU7QUFFM0IsT0FBQyxXQUFZO0FBRVQsWUFBSSxPQUFPLGVBQWUsWUFBWTtBQUNsQztBQUFBLFFBQ0o7QUFHQSxZQUFJLElBQUlBO0FBQ1IsWUFBSSxRQUFRLEVBQUU7QUFDZCxZQUFJLFlBQVksTUFBTTtBQUd0QixZQUFJLFlBQVksVUFBVTtBQUcxQixZQUFJLFVBQVUsVUFBVSxPQUFPLFNBQVUsWUFBWTtBQUVqRCxjQUFJLHNCQUFzQixhQUFhO0FBQ25DLHlCQUFhLElBQUksV0FBVyxVQUFVO0FBQUEsVUFDMUM7QUFHQSxjQUNJLHNCQUFzQixhQUNyQixPQUFPLHNCQUFzQixlQUFlLHNCQUFzQixxQkFDbkUsc0JBQXNCLGNBQ3RCLHNCQUFzQixlQUN0QixzQkFBc0IsY0FDdEIsc0JBQXNCLGVBQ3RCLHNCQUFzQixnQkFDdEIsc0JBQXNCLGNBQ3hCO0FBQ0UseUJBQWEsSUFBSSxXQUFXLFdBQVcsUUFBUSxXQUFXLFlBQVksV0FBVyxVQUFVO0FBQUEsVUFDL0Y7QUFHQSxjQUFJLHNCQUFzQixZQUFZO0FBRWxDLGdCQUFJLHVCQUF1QixXQUFXO0FBR3RDLGdCQUFJLFFBQVEsQ0FBQztBQUNiLHFCQUFTQyxLQUFJLEdBQUdBLEtBQUksc0JBQXNCQSxNQUFLO0FBQzNDLG9CQUFNQSxPQUFNLENBQUMsS0FBSyxXQUFXQSxFQUFDLEtBQU0sS0FBTUEsS0FBSSxJQUFLO0FBQUEsWUFDdkQ7QUFHQSxzQkFBVSxLQUFLLE1BQU0sT0FBTyxvQkFBb0I7QUFBQSxVQUNwRCxPQUFPO0FBRUgsc0JBQVUsTUFBTSxNQUFNLFNBQVM7QUFBQSxVQUNuQztBQUFBLFFBQ0o7QUFFQSxnQkFBUSxZQUFZO0FBQUEsTUFDeEIsR0FBRTtBQUdGLGFBQU9ELFVBQVMsSUFBSTtBQUFBLElBRXJCLENBQUM7QUFBQTtBQUFBOzs7QUMzRUQ7QUFBQSxpREFBQUUsU0FBQTtBQUFDLEtBQUMsU0FBVSxNQUFNLFNBQVM7QUFDMUIsVUFBSSxPQUFPLFlBQVksVUFBVTtBQUVoQyxRQUFBQSxRQUFPLFVBQVUsVUFBVSxRQUFRLGNBQWlCO0FBQUEsTUFDckQsV0FDUyxPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFFcEQsZUFBTyxDQUFDLFFBQVEsR0FBRyxPQUFPO0FBQUEsTUFDM0IsT0FDSztBQUVKLGdCQUFRLEtBQUssUUFBUTtBQUFBLE1BQ3RCO0FBQUEsSUFDRCxHQUFFLFNBQU0sU0FBVUMsV0FBVTtBQUUzQixPQUFDLFdBQVk7QUFFVCxZQUFJLElBQUlBO0FBQ1IsWUFBSSxRQUFRLEVBQUU7QUFDZCxZQUFJLFlBQVksTUFBTTtBQUN0QixZQUFJLFFBQVEsRUFBRTtBQUtkLFlBQUksVUFBVSxNQUFNLFFBQVEsTUFBTSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQWN4QyxXQUFXLFNBQVUsV0FBVztBQUU1QixnQkFBSSxRQUFRLFVBQVU7QUFDdEIsZ0JBQUksV0FBVyxVQUFVO0FBR3pCLGdCQUFJLGFBQWEsQ0FBQztBQUNsQixxQkFBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVVBLE1BQUssR0FBRztBQUNsQyxrQkFBSSxZQUFhLE1BQU1BLE9BQU0sQ0FBQyxNQUFPLEtBQU1BLEtBQUksSUFBSyxJQUFNO0FBQzFELHlCQUFXLEtBQUssT0FBTyxhQUFhLFNBQVMsQ0FBQztBQUFBLFlBQ2xEO0FBRUEsbUJBQU8sV0FBVyxLQUFLLEVBQUU7QUFBQSxVQUM3QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFlQSxPQUFPLFNBQVUsVUFBVTtBQUV2QixnQkFBSSxpQkFBaUIsU0FBUztBQUc5QixnQkFBSSxRQUFRLENBQUM7QUFDYixxQkFBU0EsS0FBSSxHQUFHQSxLQUFJLGdCQUFnQkEsTUFBSztBQUNyQyxvQkFBTUEsT0FBTSxDQUFDLEtBQUssU0FBUyxXQUFXQSxFQUFDLEtBQU0sS0FBTUEsS0FBSSxJQUFLO0FBQUEsWUFDaEU7QUFFQSxtQkFBTyxVQUFVLE9BQU8sT0FBTyxpQkFBaUIsQ0FBQztBQUFBLFVBQ3JEO0FBQUEsUUFDSjtBQUtBLGNBQU0sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFjWixXQUFXLFNBQVUsV0FBVztBQUU1QixnQkFBSSxRQUFRLFVBQVU7QUFDdEIsZ0JBQUksV0FBVyxVQUFVO0FBR3pCLGdCQUFJLGFBQWEsQ0FBQztBQUNsQixxQkFBU0EsS0FBSSxHQUFHQSxLQUFJLFVBQVVBLE1BQUssR0FBRztBQUNsQyxrQkFBSSxZQUFZLFdBQVksTUFBTUEsT0FBTSxDQUFDLE1BQU8sS0FBTUEsS0FBSSxJQUFLLElBQU0sS0FBTTtBQUMzRSx5QkFBVyxLQUFLLE9BQU8sYUFBYSxTQUFTLENBQUM7QUFBQSxZQUNsRDtBQUVBLG1CQUFPLFdBQVcsS0FBSyxFQUFFO0FBQUEsVUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBZUEsT0FBTyxTQUFVLFVBQVU7QUFFdkIsZ0JBQUksaUJBQWlCLFNBQVM7QUFHOUIsZ0JBQUksUUFBUSxDQUFDO0FBQ2IscUJBQVNBLEtBQUksR0FBR0EsS0FBSSxnQkFBZ0JBLE1BQUs7QUFDckMsb0JBQU1BLE9BQU0sQ0FBQyxLQUFLLFdBQVcsU0FBUyxXQUFXQSxFQUFDLEtBQU0sS0FBTUEsS0FBSSxJQUFLLEVBQUc7QUFBQSxZQUM5RTtBQUVBLG1CQUFPLFVBQVUsT0FBTyxPQUFPLGlCQUFpQixDQUFDO0FBQUEsVUFDckQ7QUFBQSxRQUNKO0FBRUEsaUJBQVMsV0FBVyxNQUFNO0FBQ3RCLGlCQUFTLFFBQVEsSUFBSyxhQUFnQixTQUFTLElBQUs7QUFBQSxRQUN4RDtBQUFBLE1BQ0osR0FBRTtBQUdGLGFBQU9ELFVBQVMsSUFBSTtBQUFBLElBRXJCLENBQUM7QUFBQTtBQUFBOzs7QUNwSkQ7QUFBQSxrREFBQUUsU0FBQTtBQUFDLEtBQUMsU0FBVSxNQUFNLFNBQVM7QUFDMUIsVUFBSSxPQUFPLFlBQVksVUFBVTtBQUVoQyxRQUFBQSxRQUFPLFVBQVUsVUFBVSxRQUFRLGNBQWlCO0FBQUEsTUFDckQsV0FDUyxPQUFPLFdBQVcsY0FBYyxPQUFPLEtBQUs7QUFFcEQsZUFBTyxDQUFDLFFBQVEsR0FBRyxPQUFPO0FBQUEsTUFDM0IsT0FDSztBQUVKLGdCQUFRLEtBQUssUUFBUTtBQUFBLE1BQ3RCO0FBQUEsSUFDRCxHQUFFLFNBQU0sU0FBVUMsV0FBVTtBQUUzQixPQUFDLFdBQVk7QUFFVCxZQUFJLElBQUlBO0FBQ1IsWUFBSSxRQUFRLEVBQUU7QUFDZCxZQUFJLFlBQVksTUFBTTtBQUN0QixZQUFJLFFBQVEsRUFBRTtBQUtkLFlBQUksU0FBUyxNQUFNLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBY3hCLFdBQVcsU0FBVSxXQUFXO0FBRTVCLGdCQUFJLFFBQVEsVUFBVTtBQUN0QixnQkFBSSxXQUFXLFVBQVU7QUFDekIsZ0JBQUksTUFBTSxLQUFLO0FBR2Ysc0JBQVUsTUFBTTtBQUdoQixnQkFBSSxjQUFjLENBQUM7QUFDbkIscUJBQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVQSxNQUFLLEdBQUc7QUFDbEMsa0JBQUksUUFBUyxNQUFNQSxPQUFNLENBQUMsTUFBYSxLQUFNQSxLQUFJLElBQUssSUFBWTtBQUNsRSxrQkFBSSxRQUFTLE1BQU9BLEtBQUksTUFBTyxDQUFDLE1BQU8sTUFBT0EsS0FBSSxLQUFLLElBQUssSUFBTTtBQUNsRSxrQkFBSSxRQUFTLE1BQU9BLEtBQUksTUFBTyxDQUFDLE1BQU8sTUFBT0EsS0FBSSxLQUFLLElBQUssSUFBTTtBQUVsRSxrQkFBSSxVQUFXLFNBQVMsS0FBTyxTQUFTLElBQUs7QUFFN0MsdUJBQVMsSUFBSSxHQUFJLElBQUksS0FBT0EsS0FBSSxJQUFJLE9BQU8sVUFBVyxLQUFLO0FBQ3ZELDRCQUFZLEtBQUssSUFBSSxPQUFRLFlBQWEsS0FBSyxJQUFJLEtBQU8sRUFBSSxDQUFDO0FBQUEsY0FDbkU7QUFBQSxZQUNKO0FBR0EsZ0JBQUksY0FBYyxJQUFJLE9BQU8sRUFBRTtBQUMvQixnQkFBSSxhQUFhO0FBQ2IscUJBQU8sWUFBWSxTQUFTLEdBQUc7QUFDM0IsNEJBQVksS0FBSyxXQUFXO0FBQUEsY0FDaEM7QUFBQSxZQUNKO0FBRUEsbUJBQU8sWUFBWSxLQUFLLEVBQUU7QUFBQSxVQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFlQSxPQUFPLFNBQVUsV0FBVztBQUV4QixnQkFBSSxrQkFBa0IsVUFBVTtBQUNoQyxnQkFBSSxNQUFNLEtBQUs7QUFDZixnQkFBSSxhQUFhLEtBQUs7QUFFdEIsZ0JBQUksQ0FBQyxZQUFZO0FBQ1QsMkJBQWEsS0FBSyxjQUFjLENBQUM7QUFDakMsdUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsMkJBQVcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJO0FBQUEsY0FDcEM7QUFBQSxZQUNSO0FBR0EsZ0JBQUksY0FBYyxJQUFJLE9BQU8sRUFBRTtBQUMvQixnQkFBSSxhQUFhO0FBQ2Isa0JBQUksZUFBZSxVQUFVLFFBQVEsV0FBVztBQUNoRCxrQkFBSSxpQkFBaUIsSUFBSTtBQUNyQixrQ0FBa0I7QUFBQSxjQUN0QjtBQUFBLFlBQ0o7QUFHQSxtQkFBTyxVQUFVLFdBQVcsaUJBQWlCLFVBQVU7QUFBQSxVQUUzRDtBQUFBLFVBRUEsTUFBTTtBQUFBLFFBQ1Y7QUFFQSxpQkFBUyxVQUFVLFdBQVcsaUJBQWlCLFlBQVk7QUFDekQsY0FBSSxRQUFRLENBQUM7QUFDYixjQUFJLFNBQVM7QUFDYixtQkFBU0EsS0FBSSxHQUFHQSxLQUFJLGlCQUFpQkEsTUFBSztBQUN0QyxnQkFBSUEsS0FBSSxHQUFHO0FBQ1Asa0JBQUksUUFBUSxXQUFXLFVBQVUsV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBT0EsS0FBSSxJQUFLO0FBQ2xFLGtCQUFJLFFBQVEsV0FBVyxVQUFVLFdBQVdBLEVBQUMsQ0FBQyxNQUFPLElBQUtBLEtBQUksSUFBSztBQUNuRSxrQkFBSSxlQUFlLFFBQVE7QUFDM0Isb0JBQU0sV0FBVyxDQUFDLEtBQUssZ0JBQWlCLEtBQU0sU0FBUyxJQUFLO0FBQzVEO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxVQUFVLE9BQU8sT0FBTyxNQUFNO0FBQUEsUUFDdkM7QUFBQSxNQUNKLEdBQUU7QUFHRixhQUFPRCxVQUFTLElBQUk7QUFBQSxJQUVyQixDQUFDO0FBQUE7QUFBQTs7O0FDdklEO0FBQUEscURBQUFFLFNBQUE7QUFBQyxLQUFDLFNBQVUsTUFBTSxTQUFTO0FBQzFCLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFFaEMsUUFBQUEsUUFBTyxVQUFVLFVBQVUsUUFBUSxjQUFpQjtBQUFBLE1BQ3JELFdBQ1MsT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBRXBELGVBQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTztBQUFBLE1BQzNCLE9BQ0s7QUFFSixnQkFBUSxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUFBLElBQ0QsR0FBRSxTQUFNLFNBQVVDLFdBQVU7QUFFM0IsT0FBQyxXQUFZO0FBRVQsWUFBSSxJQUFJQTtBQUNSLFlBQUksUUFBUSxFQUFFO0FBQ2QsWUFBSSxZQUFZLE1BQU07QUFDdEIsWUFBSSxRQUFRLEVBQUU7QUFLZCxZQUFJLFlBQVksTUFBTSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFnQjlCLFdBQVcsU0FBVSxXQUFXLFVBQVEsTUFBTTtBQUUxQyxnQkFBSSxRQUFRLFVBQVU7QUFDdEIsZ0JBQUksV0FBVyxVQUFVO0FBQ3pCLGdCQUFJLE1BQU0sVUFBVSxLQUFLLFlBQVksS0FBSztBQUcxQyxzQkFBVSxNQUFNO0FBR2hCLGdCQUFJLGNBQWMsQ0FBQztBQUNuQixxQkFBU0MsS0FBSSxHQUFHQSxLQUFJLFVBQVVBLE1BQUssR0FBRztBQUNsQyxrQkFBSSxRQUFTLE1BQU1BLE9BQU0sQ0FBQyxNQUFhLEtBQU1BLEtBQUksSUFBSyxJQUFZO0FBQ2xFLGtCQUFJLFFBQVMsTUFBT0EsS0FBSSxNQUFPLENBQUMsTUFBTyxNQUFPQSxLQUFJLEtBQUssSUFBSyxJQUFNO0FBQ2xFLGtCQUFJLFFBQVMsTUFBT0EsS0FBSSxNQUFPLENBQUMsTUFBTyxNQUFPQSxLQUFJLEtBQUssSUFBSyxJQUFNO0FBRWxFLGtCQUFJLFVBQVcsU0FBUyxLQUFPLFNBQVMsSUFBSztBQUU3Qyx1QkFBUyxJQUFJLEdBQUksSUFBSSxLQUFPQSxLQUFJLElBQUksT0FBTyxVQUFXLEtBQUs7QUFDdkQsNEJBQVksS0FBSyxJQUFJLE9BQVEsWUFBYSxLQUFLLElBQUksS0FBTyxFQUFJLENBQUM7QUFBQSxjQUNuRTtBQUFBLFlBQ0o7QUFHQSxnQkFBSSxjQUFjLElBQUksT0FBTyxFQUFFO0FBQy9CLGdCQUFJLGFBQWE7QUFDYixxQkFBTyxZQUFZLFNBQVMsR0FBRztBQUMzQiw0QkFBWSxLQUFLLFdBQVc7QUFBQSxjQUNoQztBQUFBLFlBQ0o7QUFFQSxtQkFBTyxZQUFZLEtBQUssRUFBRTtBQUFBLFVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFpQkEsT0FBTyxTQUFVLFdBQVcsVUFBUSxNQUFNO0FBRXRDLGdCQUFJLGtCQUFrQixVQUFVO0FBQ2hDLGdCQUFJLE1BQU0sVUFBVSxLQUFLLFlBQVksS0FBSztBQUMxQyxnQkFBSSxhQUFhLEtBQUs7QUFFdEIsZ0JBQUksQ0FBQyxZQUFZO0FBQ2IsMkJBQWEsS0FBSyxjQUFjLENBQUM7QUFDakMsdUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsMkJBQVcsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJO0FBQUEsY0FDcEM7QUFBQSxZQUNKO0FBR0EsZ0JBQUksY0FBYyxJQUFJLE9BQU8sRUFBRTtBQUMvQixnQkFBSSxhQUFhO0FBQ2Isa0JBQUksZUFBZSxVQUFVLFFBQVEsV0FBVztBQUNoRCxrQkFBSSxpQkFBaUIsSUFBSTtBQUNyQixrQ0FBa0I7QUFBQSxjQUN0QjtBQUFBLFlBQ0o7QUFHQSxtQkFBTyxVQUFVLFdBQVcsaUJBQWlCLFVBQVU7QUFBQSxVQUUzRDtBQUFBLFVBRUEsTUFBTTtBQUFBLFVBQ04sV0FBVztBQUFBLFFBQ2Y7QUFFQSxpQkFBUyxVQUFVLFdBQVcsaUJBQWlCLFlBQVk7QUFDdkQsY0FBSSxRQUFRLENBQUM7QUFDYixjQUFJLFNBQVM7QUFDYixtQkFBU0EsS0FBSSxHQUFHQSxLQUFJLGlCQUFpQkEsTUFBSztBQUN0QyxnQkFBSUEsS0FBSSxHQUFHO0FBQ1Asa0JBQUksUUFBUSxXQUFXLFVBQVUsV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBT0EsS0FBSSxJQUFLO0FBQ2xFLGtCQUFJLFFBQVEsV0FBVyxVQUFVLFdBQVdBLEVBQUMsQ0FBQyxNQUFPLElBQUtBLEtBQUksSUFBSztBQUNuRSxrQkFBSSxlQUFlLFFBQVE7QUFDM0Isb0JBQU0sV0FBVyxDQUFDLEtBQUssZ0JBQWlCLEtBQU0sU0FBUyxJQUFLO0FBQzVEO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxVQUFVLE9BQU8sT0FBTyxNQUFNO0FBQUEsUUFDekM7QUFBQSxNQUNKLEdBQUU7QUFFRixhQUFPRCxVQUFTLElBQUk7QUFBQSxJQUVyQixDQUFDO0FBQUE7QUFBQTs7O0FDM0lEO0FBQUEsMkNBQUFFLFNBQUE7QUFBQyxLQUFDLFNBQVUsTUFBTSxTQUFTO0FBQzFCLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFFaEMsUUFBQUEsUUFBTyxVQUFVLFVBQVUsUUFBUSxjQUFpQjtBQUFBLE1BQ3JELFdBQ1MsT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBRXBELGVBQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTztBQUFBLE1BQzNCLE9BQ0s7QUFFSixnQkFBUSxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUFBLElBQ0QsR0FBRSxTQUFNLFNBQVVDLFdBQVU7QUFFM0IsT0FBQyxTQUFVQyxPQUFNO0FBRWIsWUFBSSxJQUFJRDtBQUNSLFlBQUksUUFBUSxFQUFFO0FBQ2QsWUFBSSxZQUFZLE1BQU07QUFDdEIsWUFBSSxTQUFTLE1BQU07QUFDbkIsWUFBSSxTQUFTLEVBQUU7QUFHZixZQUFJRSxLQUFJLENBQUM7QUFHVCxTQUFDLFdBQVk7QUFDVCxtQkFBU0MsS0FBSSxHQUFHQSxLQUFJLElBQUlBLE1BQUs7QUFDekIsWUFBQUQsR0FBRUMsRUFBQyxJQUFLRixNQUFLLElBQUlBLE1BQUssSUFBSUUsS0FBSSxDQUFDLENBQUMsSUFBSSxhQUFlO0FBQUEsVUFDdkQ7QUFBQSxRQUNKLEdBQUU7QUFLRixZQUFJLE1BQU0sT0FBTyxNQUFNLE9BQU8sT0FBTztBQUFBLFVBQ2pDLFVBQVUsV0FBWTtBQUNsQixpQkFBSyxRQUFRLElBQUksVUFBVSxLQUFLO0FBQUEsY0FDNUI7QUFBQSxjQUFZO0FBQUEsY0FDWjtBQUFBLGNBQVk7QUFBQSxZQUNoQixDQUFDO0FBQUEsVUFDTDtBQUFBLFVBRUEsaUJBQWlCLFNBQVVDLElBQUcsUUFBUTtBQUVsQyxxQkFBU0QsS0FBSSxHQUFHQSxLQUFJLElBQUlBLE1BQUs7QUFFekIsa0JBQUksV0FBVyxTQUFTQTtBQUN4QixrQkFBSSxhQUFhQyxHQUFFLFFBQVE7QUFFM0IsY0FBQUEsR0FBRSxRQUFRLEtBQ0gsY0FBYyxJQUFPLGVBQWUsTUFBTyxZQUMzQyxjQUFjLEtBQU8sZUFBZSxLQUFPO0FBQUEsWUFFdEQ7QUFHQSxnQkFBSUMsS0FBSSxLQUFLLE1BQU07QUFFbkIsZ0JBQUksYUFBY0QsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksYUFBY0EsR0FBRSxTQUFTLENBQUM7QUFDOUIsZ0JBQUksY0FBY0EsR0FBRSxTQUFTLEVBQUU7QUFDL0IsZ0JBQUksY0FBY0EsR0FBRSxTQUFTLEVBQUU7QUFDL0IsZ0JBQUksY0FBY0EsR0FBRSxTQUFTLEVBQUU7QUFDL0IsZ0JBQUksY0FBY0EsR0FBRSxTQUFTLEVBQUU7QUFDL0IsZ0JBQUksY0FBY0EsR0FBRSxTQUFTLEVBQUU7QUFDL0IsZ0JBQUksY0FBY0EsR0FBRSxTQUFTLEVBQUU7QUFHL0IsZ0JBQUlFLEtBQUlELEdBQUUsQ0FBQztBQUNYLGdCQUFJRSxLQUFJRixHQUFFLENBQUM7QUFDWCxnQkFBSUcsS0FBSUgsR0FBRSxDQUFDO0FBQ1gsZ0JBQUlJLEtBQUlKLEdBQUUsQ0FBQztBQUdYLFlBQUFDLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxhQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxhQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBRXpDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLEdBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLEdBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxhQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBRXpDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxhQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxhQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBRXpDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxhQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxZQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gsSUFBRyxhQUFhLElBQUlKLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFJLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0MsSUFBRyxZQUFhLEdBQUlQLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFPLEtBQUksR0FBR0EsSUFBR0gsSUFBR0MsSUFBR0MsSUFBRyxhQUFhLElBQUlOLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFNLEtBQUksR0FBR0EsSUFBR0MsSUFBR0gsSUFBR0MsSUFBRyxZQUFhLElBQUlMLEdBQUUsRUFBRSxDQUFDO0FBQ3pDLFlBQUFLLEtBQUksR0FBR0EsSUFBR0MsSUFBR0MsSUFBR0gs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LFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFNBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFNBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxTQUFVO0FBQUEsVUFDN0UsZUFBZSxXQUFZLFNBQVU7QUFBQSxVQUFHLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFNBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFVBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFDN0UsZUFBZSxZQUFZLFNBQVU7QUFBQSxVQUFHLGVBQWUsWUFBWSxVQUFVO0FBQUEsUUFDakY7QUFHQSxZQUFJLElBQUksQ0FBQztBQUNU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RDtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQzNEO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDNUQ7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxRQUFFLENBQUM7QUFDbEUsWUFBSSxNQUFNLFVBQVUsT0FBTztBQUFBLFVBQ3ZCO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFDM0Q7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUM1RDtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQzVEO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFDM0Q7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxRQUFFLENBQUM7QUFDbkUsWUFBSSxNQUFNLFVBQVUsT0FBTztBQUFBLFVBQ3RCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDOUQ7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUMzRDtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQzNEO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFDOUQ7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxRQUFFLENBQUM7QUFDbkUsWUFBSSxNQUFNLFVBQVUsT0FBTztBQUFBLFVBQ3ZCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFDNUQ7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUMzRDtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQzVE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QUFJO0FBQUEsVUFBSTtBQUFBLFVBQzVCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQzVCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQzVCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFFBQ2hDO0FBR0EsWUFBSSxNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDcEI7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQ3BCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUNwQjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDcEI7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQ3BCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUNwQjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDcEI7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFFBQ3hCO0FBR0EsWUFBSSxhQUFhLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUdoRixZQUFJLFNBQVM7QUFBQSxVQUNUO0FBQUEsWUFDSSxHQUFLO0FBQUEsWUFDTCxXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixXQUFXO0FBQUEsWUFDWCxXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixHQUFLO0FBQUEsWUFDTCxXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixXQUFXO0FBQUEsWUFDWCxXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsVUFDaEI7QUFBQSxVQUNBO0FBQUEsWUFDSSxHQUFLO0FBQUEsWUFDTCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxTQUFVO0FBQUEsWUFDVixVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsWUFDWixXQUFZO0FBQUEsVUFDaEI7QUFBQSxVQUNBO0FBQUEsWUFDSSxHQUFLO0FBQUEsWUFDTCxTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixRQUFTO0FBQUEsWUFDVCxTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsWUFDWCxVQUFXO0FBQUEsVUFDZjtBQUFBLFVBQ0E7QUFBQSxZQUNJLEdBQUs7QUFBQSxZQUNMLE9BQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULE9BQVE7QUFBQSxZQUNSLE9BQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxZQUNWLFNBQVU7QUFBQSxVQUNkO0FBQUEsVUFDQTtBQUFBLFlBQ0ksR0FBSztBQUFBLFlBQ0wsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsTUFBTztBQUFBLFlBQ1AsTUFBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUTtBQUFBLFlBQ1IsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsT0FBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFlBQ1QsUUFBUztBQUFBLFVBQ2I7QUFBQSxVQUNBO0FBQUEsWUFDSSxHQUFLO0FBQUEsWUFDTCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxLQUFNO0FBQUEsWUFDTixLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFPO0FBQUEsWUFDUCxNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsWUFDUixNQUFRO0FBQUEsVUFDWjtBQUFBLFVBQ0E7QUFBQSxZQUNJLEdBQUs7QUFBQSxZQUNMLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEdBQUs7QUFBQSxZQUNMLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU07QUFBQSxZQUNOLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxZQUNQLEtBQU87QUFBQSxVQUNYO0FBQUEsVUFDQTtBQUFBLFlBQ0ksR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsR0FBSztBQUFBLFlBQ0wsSUFBSztBQUFBLFlBQ0wsSUFBSztBQUFBLFlBQ0wsSUFBSztBQUFBLFlBQ0wsSUFBSztBQUFBLFlBQ0wsSUFBSztBQUFBLFlBQ0wsSUFBSztBQUFBLFlBQ0wsWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtB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QUFJLEtBQUs7QUFHYixtQkFBU0YsS0FBSSxHQUFHQSxLQUFJLEdBQUdBLE1BQUs7QUFDeEIsZUFBR0EsRUFBQyxJQUFJRSxHQUFFRixFQUFDO0FBQUEsVUFDZjtBQUdBLFVBQUFFLEdBQUUsQ0FBQyxJQUFLQSxHQUFFLENBQUMsSUFBSSxhQUFhLEtBQUssS0FBTTtBQUN2QyxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksY0FBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksYUFBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksY0FBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksY0FBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksYUFBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksY0FBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxVQUFBQSxHQUFFLENBQUMsSUFBS0EsR0FBRSxDQUFDLElBQUksY0FBZUEsR0FBRSxDQUFDLE1BQU0sSUFBTSxHQUFHLENBQUMsTUFBTSxJQUFLLElBQUksS0FBTTtBQUN0RSxlQUFLLEtBQU1BLEdBQUUsQ0FBQyxNQUFNLElBQU0sR0FBRyxDQUFDLE1BQU0sSUFBSyxJ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RSxDQUFDLE1BQU0sTUFBUTtBQUNsRixVQUFBRSxHQUFFLENBQUMsSUFBS0YsR0FBRSxDQUFDLEtBQU1BLEdBQUUsQ0FBQyxLQUFLLElBQU9BLEdBQUUsQ0FBQyxNQUFNLE1BQU9BLEdBQUUsQ0FBQyxJQUFLO0FBQ3hELFVBQUFFLEdBQUUsQ0FBQyxJQUFLRixHQUFFLENBQUMsS0FBTUEsR0FBRSxDQUFDLEtBQUssS0FBT0EsR0FBRSxDQUFDLE1BQU0sT0FBU0EsR0FBRSxDQUFDLEtBQUssS0FBT0EsR0FBRSxDQUFDLE1BQU0sTUFBUTtBQUNsRixVQUFBRSxHQUFFLENBQUMsSUFBS0YsR0FBRSxDQUFDLEtBQU1BLEdBQUUsQ0FBQyxLQUFLLElBQU9BLEdBQUUsQ0FBQyxNQUFNLE1BQU9BLEdBQUUsQ0FBQyxJQUFLO0FBQ3hELFVBQUFFLEdBQUUsQ0FBQyxJQUFLRixHQUFFLENBQUMsS0FBTUEsR0FBRSxDQUFDLEtBQUssS0FBT0EsR0FBRSxDQUFDLE1BQU0sT0FBU0EsR0FBRSxDQUFDLEtBQUssS0FBT0EsR0FBRSxDQUFDLE1BQU0sTUFBUTtBQUNsRixVQUFBRSxHQUFFLENBQUMsSUFBS0YsR0FBRSxDQUFDLEtBQU1BLEdBQUUsQ0FBQyxLQUFLLElBQU9BLEdBQUUsQ0FBQyxNQUFNLE1BQU9BLEdBQUUsQ0FBQyxJQUFLO0FBQ3hELFVBQUFFLEdBQUUsQ0FBQyxJQUFLRixHQUFFLENBQUMsS0FBTUEsR0FBRSxDQUFDLEtBQUssS0FBT0EsR0FBRSxDQUFDLE1BQU0sT0FBU0EsR0FBRSxDQUFDLEtBQUssS0FBT0EsR0FBRSxDQUFDLE1BQU0sTUFBUTtBQUNsRixVQUFBRSxHQUFFLENBQUMsSUFBS0YsR0FBRSxDQUFDLEtBQU1BLEdBQUUsQ0FBQyxLQUFLLElBQU9BLEdBQUUsQ0FBQyxNQUFNLE1BQU9BLEdBQUUsQ0FBQyxJQUFLO0FBQUEsUUFDNUQ7QUFVQSxVQUFFLGVBQWUsYUFBYSxjQUFjLFlBQVk7QUFBQSxNQUM1RCxHQUFFO0FBR0YsYUFBT0YsVUFBUztBQUFBLElBRWpCLENBQUM7QUFBQTtBQUFB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QVEsT0FBTyxJQUFJLFlBQVksSUFBTztBQUFBLEVBQ2hELEVBQUUsUUFBUSxLQUFRLE9BQU8sSUFBSSxZQUFZLEtBQU87QUFBQSxFQUNoRCxFQUFFLFFBQVEsTUFBUSxPQUFPLElBQUksWUFBWSxLQUFPO0FBQUEsRUFDaEQsRUFBRSxRQUFRLE1BQVEsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2pELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksS0FBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxNQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJ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Q0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0scUJBQStCO0FBQUEsRUFDcEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Q7QUFHTyxTQUFTLGdDQUFnQyxRQUF3QjtBQUN2RSxRQUFNLGNBQWMsS0FBSyxNQUFNLEtBQUssT0FBTyxJQUFJLHdCQUF3QixNQUFNO0FBQzdFLFFBQU0sVUFBVSx3QkFBd0IsV0FBVztBQUNuRCxTQUFPLFFBQVEsUUFBUSxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ2hEO0FBR08sU0FBUyxpQ0FBaUMsUUFBd0I7QUFDeEUsUUFBTSxjQUFjLEtBQUssTUFBTSxLQUFLLE9BQU8sSUFBSSxnQkFBZ0IsTUFBTTtBQUNyRSxRQUFNLFVBQVUsZ0JBQWdCLFdBQVc7QUFDM0MsU0FBTyxRQUFRLFFBQVEsT0FBTyxPQUFPLFNBQVMsQ0FBQztBQUNoRDtBQUdPLFNBQVMsdUJBQXVCLFFBQXdCO0FBQzlELFFBQU0sY0FBYyxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksbUJBQW1CLE1BQU07QUFDeEUsUUFBTSxVQUFVLG1CQUFtQixXQUFXO0FBQzlDLFNBQU8sUUFBUSxRQUFRLE9BQU8sT0FBTyxTQUFTLENBQUM7QUFDaEQ7OztBQ3ZMQSxJQUFBQyxtQkFBMkI7QUFFcEIsSUFBTSxzQkFBTixjQUFrQyx1QkFBTTtBQUFBO0FBQUEsRUFHOUMsWUFBWUMsTUFBVSxhQUFxQjtBQUMxQyxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQUEsRUFDcEI7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFBQSxFQUNuQztBQUFBLEVBRUEsVUFBVTtBQUNULFVBQU0sRUFBRSxVQUFVLElBQUk7QUFDdEIsY0FBVSxNQUFNO0FBQUEsRUFDakI7QUFDRDs7O0FDbkJBLElBQUFDLG1CQUEyQjs7O0FDQTNCLElBQUFDLG1CQUEyQjtBQWNwQixJQUFNLG1CQUFOLGNBQStCLHVCQUFNO0FBQUEsRUFVM0MsWUFBWUMsTUFBVSxPQUFpQixZQUFvQixzQkFBb0M7QUFDOUYsVUFBTUEsSUFBRztBQVRWLFNBQVEsZ0JBQTBCLENBQUM7QUFDbkMsU0FBUSxpQkFBeUMsQ0FBQztBQUdsRCxTQUFRLFdBQW1DLENBQUM7QUFDNUMsU0FBUSxhQUFzQjtBQUM5QixTQUFRLHdCQUFnRCxDQUFDO0FBSXhELFNBQUssUUFBUTtBQUNiLFNBQUssYUFBYTtBQUNsQixTQUFLLHVCQUF1QjtBQUFBLEVBQzdCO0FBQUEsRUFFQSxTQUFTO0FBQ1IsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFJaEIsUUFBSSxLQUFLLFlBQVk7QUFDcEIscUJBQWUsUUFBUSxVQUFRO0FBQzlCLFlBQUksS0FBSyx1QkFBdUIsS0FBSyxJQUFJLEdBQUc7QUFDM0MsZ0JBQU0sV0FBVyxLQUFLLG9CQUFvQixLQUFLLElBQUk7QUFDbkQsb0JBQVUsWUFBWSxRQUFRO0FBQUEsUUFDL0I7QUFBQSxNQUNELENBQUM7QUFDRCxZQUFNLHlCQUF5QixlQUFlLEtBQUssV0FBUyxNQUFNLFlBQVksaUJBQWlCO0FBQy9GLFVBQUksd0JBQXVCO0FBQzFCLGNBQU0sV0FBVyxLQUFLLG9CQUFvQix1QkFBdUIsSUFBSTtBQUNyRSxrQkFBVSxZQUFZLFFBQVE7QUFBQSxNQUMvQjtBQUFBLElBQ0QsT0FBTztBQUNOLFlBQU0sV0FBVyxLQUFLLG9CQUFvQixFQUFFO0FBQzVDLGdCQUFVLFlBQVksUUFBUTtBQUFBLElBQy9CO0FBQUEsRUFDRDtBQUFBLEVBR0EsVUFBVTtBQUNULFNBQUssZ0JBQWdCLENBQUM7QUFBQSxFQUN2QjtBQUFBLEVBRVEsdUJBQXVCLE1BQWM7QUFFNUMsUUFBSSxRQUFRO0FBQ1osbUNBQStCLFFBQVEsYUFBVztBQUVqRCxVQUFJLFFBQVEsU0FBUztBQUNwQixZQUFJLENBQUMsT0FBTztBQUNYLGtCQUFRO0FBQUEsUUFDVDtBQUFBLE1BRUQ7QUFBQSxJQUVELENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUEsY0FBYyxZQUFxQjtBQUNsQyxTQUFLLGFBQWE7QUFBQSxFQUNuQjtBQUFBO0FBQUEsRUFJUSxvQkFBb0IsV0FBbUI7QUFDOUMsUUFBSSxLQUFLLFlBQVk7QUFDcEIsYUFBTyxLQUFLLGtCQUFrQixTQUFTO0FBQUEsSUFDeEMsT0FBTztBQUVOLGFBQU8sS0FBSyxxQkFBcUI7QUFBQSxJQUNsQztBQUFBLEVBQ0Q7QUFBQSxFQUVBLHFCQUFxQixXQUFtQixPQUFlO0FBQ3RELFlBQVEsSUFBSSxjQUFjLHdCQUF3QixPQUFPO0FBQ3pELFNBQUssZUFBZSxTQUFTLElBQUk7QUFDakMsU0FBSyxxQkFBcUIsaUJBQWlCLEtBQUssNkJBQTZCLFNBQVMsS0FBSyxJQUFJLEtBQUs7QUFBQSxFQUNyRztBQUFBLEVBR0EsbUJBQW1CLFNBQWlCLGVBQXVCO0FBQzFELFNBQUssU0FBUyxPQUFPLEtBQUs7QUFBQSxFQUMzQjtBQUFBLEVBRUEsaUJBQWlCLFNBQWlCLGVBQXVCO0FBQ3hELFVBQU0sUUFBUSxLQUFLLFNBQVMsT0FBTztBQUNuQyxVQUFNLHNCQUFzQixLQUFLLHFCQUFxQixpQkFBaUIsS0FBSyx1QkFBdUIsT0FBTyxDQUFDO0FBQzNHLFFBQUksT0FBTyx3QkFBd0IsWUFBWSx3QkFBd0IsTUFBTTtBQUM3RSxZQUFNLGFBQWEsT0FBTyxPQUFPLHFCQUFxQixxQkFBcUI7QUFDM0UsVUFBSSxRQUFRLEtBQUssZ0JBQWdCLFlBQVksS0FBSywyQkFBMkIsT0FBTyxDQUFDLEdBQUc7QUFDdkYsYUFBSyxTQUFTLE9BQU8sS0FBSztBQUMxQixhQUFLLHFCQUFxQixpQkFBaUIsS0FBSywwQkFBMEIsT0FBTyxHQUFHLEtBQUssU0FBUyxPQUFPLENBQUM7QUFDMUcsYUFBSyxxQkFBcUIsa0JBQWtCLEtBQUsseUJBQXlCLE9BQU8sR0FBRyxJQUFJO0FBQ3hGLGFBQUsscUJBQXFCLGlCQUFpQixLQUFLLHVCQUF1QixPQUFPLEdBQUcsT0FBTyxPQUFPLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQztBQUM5SCxjQUFNLG9CQUFvQixLQUFLLHFCQUFxQixpQkFBaUIsaUJBQWlCO0FBQ3RGLFlBQUksT0FBTyxzQkFBc0IsWUFBWSxzQkFBc0IsTUFBTTtBQUV4RSxlQUFLLHFCQUFxQixpQkFBaUIsbUJBQWtCLG9CQUFvQixDQUFDO0FBQUEsUUFDakYsT0FBTztBQUVSLGtCQUFRLE1BQU0seURBQXlEO0FBQUEsUUFDdEU7QUFDRixjQUFNLGFBQWEsS0FBSyxxQkFBcUIsaUJBQWlCLEtBQUssc0JBQXNCLE9BQU8sQ0FBQztBQUNqRyxZQUFJLE9BQU8sZUFBZSxZQUFZLGVBQWUsTUFBTTtBQUUxRCxlQUFLLHFCQUFxQixpQkFBaUIsS0FBSyxzQkFBc0IsT0FBTyxHQUFFLGFBQWEsQ0FBQztBQUFBLFFBQzVGLE9BQU87QUFFUixrQkFBUSxNQUFNLHNCQUFzQixLQUFLLHNCQUFzQixPQUFPLHdCQUF3QjtBQUFBLFFBQzdGO0FBQ0YsYUFBSyxzQkFBc0IsT0FBTztBQUFBLE1BQ25DO0FBQUEsSUFDQSxPQUFPO0FBRVAsY0FBUSxNQUFNLGNBQWMsS0FBSywwQkFBMEIsT0FBTyx5REFBeUQ7QUFBQSxJQUMzSDtBQUFBLEVBRUQ7QUFBQSxFQUdBLG9CQUFvQjtBQUNuQixRQUFJLEtBQUssc0JBQXNCO0FBQzlCLFdBQUssV0FBVztBQUFBLFFBQ2Ysb0JBQW9CLEtBQUsscUJBQXFCLGlCQUFpQixpQkFBaUI7QUFBQSxRQUNoRixzQkFBc0IsS0FBSyxxQkFBcUIsaUJBQWlCLG1CQUFtQjtBQUFBLFFBQ3BGLHNCQUFzQixLQUFLLHFCQUFxQixpQkFBaUIsbUJBQW1CO0FBQUEsUUFDcEYsMkJBQTJCLEtBQUsscUJBQXFCLGlCQUFpQix3QkFBd0I7QUFBQSxRQUM5RixnQkFBZ0IsS0FBSyxxQkFBcUIsaUJBQWlCLGFBQWE7QUFBQSxRQUN4RSx3QkFBd0IsS0FBSyxxQkFBcUIsaUJBQWlCLHFCQUFxQjtBQUFBLFFBQ3hGLHdCQUF3QixLQUFLLHFCQUFxQixpQkFBaUIscUJBQXFCO0FBQUEsUUFDeEYsa0JBQWtCLEtBQUsscUJBQXFCLGlCQUFpQixlQUFlO0FBQUEsUUFDNUUsd0JBQXdCLEtBQUsscUJBQXFCLGlCQUFpQixxQkFBcUI7QUFBQSxRQUN4RixlQUFlLEtBQUsscUJBQXFCLGlCQUFpQixZQUFZO0FBQUEsUUFDdEUsbUJBQW1CLEtBQUsscUJBQXFCLGlCQUFpQixnQkFBZ0I7QUFBQSxRQUM5RSxxQkFBcUIsS0FBSyxxQkFBcUIsaUJBQWlCLGtCQUFrQjtBQUFBLFFBQ2xGLHNCQUFzQixLQUFLLHFCQUFxQixpQkFBaUIsbUJBQW1CO0FBQUEsUUFDcEYsb0JBQW9CO0FBQUEsTUFDckI7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBR0EscUJBQXFCO0FBQ3BCLFFBQUksS0FBSyxzQkFBc0I7QUFDOUIsV0FBSyxpQkFBaUI7QUFBQSxRQUNyQixjQUFjLEtBQUsscUJBQXFCLGlCQUFpQixXQUFXO0FBQUEsUUFDcEUsc0JBQXNCLEtBQUsscUJBQXFCLGlCQUFpQixtQkFBbUI7QUFBQSxRQUNwRixrQkFBa0IsS0FBSyxxQkFBcUIsaUJBQWlCLGVBQWU7QUFBQSxRQUM1RSxpQkFBaUIsS0FBSyxxQkFBcUIsaUJBQWlCLGNBQWM7QUFBQSxRQUMxRSxzQkFBc0IsS0FBSyxxQkFBcUIsaUJBQWlCLG1CQUFtQjtBQUFBLFFBQ3BGLHlCQUF5QixLQUFLLHFCQUFxQixpQkFBaUIsc0JBQXNCO0FBQUEsUUFDMUYscUJBQXFCLEtBQUsscUJBQXFCLGlCQUFpQixrQkFBa0I7QUFBQSxRQUNsRixrQkFBa0IsS0FBSyxxQkFBcUIsaUJBQWlCLGVBQWU7QUFBQSxNQUM3RTtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFHUSx1QkFBdUI7QUFDOUIsU0FBSyxtQkFBbUI7QUFDeEIsVUFBTSxZQUFZLFNBQVMsY0FBYyxLQUFLO0FBQzlDLGNBQVUsWUFBWTtBQUd0QixVQUFNLGlCQUFpQixTQUFTLGNBQWMsS0FBSztBQUNuRCxtQkFBZSxZQUFZO0FBRzNCLG1CQUFlLFFBQVEsWUFBVTtBQUNoQyxVQUFJLEtBQUssdUJBQXVCLE9BQU8sSUFBSSxHQUFHO0FBQzdDLGNBQU0sZ0JBQWdCLFNBQVMsY0FBYyxLQUFLO0FBQ2xELHNCQUFjLFlBQVk7QUFFMUIsY0FBTSxTQUFTLFNBQVMsY0FBYyxRQUFRO0FBQzlDLGVBQU8sWUFBWTtBQUNuQixlQUFPLFVBQVUsTUFBTSxLQUFLLGlCQUFpQixNQUFNO0FBRW5ELGNBQU0sZ0JBQWdCLFNBQVMsY0FBYyxRQUFRO0FBQ3JELHNCQUFjLFlBQVk7QUFDMUIsc0JBQWMsVUFBVSxNQUFNO0FBQzdCLGNBQUksb0JBQW9CLEtBQUssS0FBSyxLQUFLLDRCQUE0QixPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUs7QUFBQSxRQUN2RjtBQUVBLGNBQU0sV0FBVyxTQUFTLGNBQWMsTUFBTTtBQUM5QyxpQkFBUyxZQUFZLEdBQUcsT0FBTyxlQUFVLE9BQU8sWUFBWSxLQUFLLE1BQU07QUFFdkUsc0JBQWMsWUFBWSxNQUFNO0FBQ2hDLHNCQUFjLFlBQVksYUFBYTtBQUN2QyxzQkFBYyxZQUFZLFFBQVE7QUFDbEMsa0JBQVUsWUFBWSxhQUFhO0FBQUEsTUFDcEM7QUFBQSxJQUNELENBQUM7QUFFRCxVQUFNLFlBQVksU0FBUyxjQUFjLEtBQUs7QUFDOUMsY0FBVSxZQUFZO0FBRXRCLHNDQUFrQyxRQUFRLGFBQVc7QUFFcEQsZ0JBQVUsYUFBYSxHQUFHLEtBQUssc0JBQXNCLE9BQU8sRUFBRSxjQUFjLEtBQUssZUFBZSxLQUFLLHNCQUFzQixPQUFPLEVBQUUsSUFBSSxLQUFLO0FBQUEsSUFDOUksQ0FBQztBQUVELG1CQUFlLFlBQVksU0FBUztBQUtwQyxjQUFVLFlBQVksY0FBYztBQUVwQyxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBSVEsa0JBQWtCLFdBQW1CO0FBQzVDLFVBQU0sWUFBWSxTQUFTLGNBQWMsS0FBSztBQUM5QyxjQUFVLFlBQVk7QUFHdEIsVUFBTSxRQUFRLEtBQUssU0FBUyxTQUFTO0FBRXJDLFVBQU0sUUFBUSxTQUFTLGNBQWMsS0FBSztBQUMxQyxVQUFNLFlBQVksR0FBRyxVQUFVLFFBQVEsS0FBSyxHQUFHO0FBQy9DLFVBQU0sWUFBWSxTQUFTLGNBQWMsUUFBUTtBQUNqRCxVQUFNLGFBQWEsS0FBSyxxQkFBcUIsaUJBQWlCLEtBQUssdUJBQXVCLFNBQVMsQ0FBQztBQUNwRyxRQUFJLGdCQUFnQixPQUFPLE9BQU8sWUFBc0IscUJBQXFCLEdBQUcsS0FBSywyQkFBMkIsU0FBUyxDQUFDLEtBQUssT0FBTztBQUNySSxjQUFRLElBQUksV0FBVyxzQ0FBc0MsT0FBTyxPQUFPLFlBQXNCLHFCQUFxQixHQUFHLEtBQUssMkJBQTJCLFNBQVMsSUFBSSxVQUFVO0FBQ2hMLFlBQU0sWUFBWSxHQUFHLGdCQUFnQjtBQUVyQyxnQkFBVSxZQUFZLFlBQVksd0JBQXdCLE9BQU8sT0FBTyxZQUFzQixxQkFBcUIsR0FBRyxLQUFLLDJCQUEyQixTQUFTLENBQUM7QUFDaEssZ0JBQVUsS0FBSyxjQUFjLFVBQVUsUUFBUSxLQUFLLEdBQUc7QUFDdkQsZ0JBQVUsVUFBVSxNQUFNO0FBQ3pCLFlBQUksb0JBQW9CLEtBQUssS0FBSyxHQUFHLG9CQUFvQix3QkFBd0IsT0FBTyxPQUFPLFlBQXNCLHFCQUFxQixHQUFHLEtBQUssMkJBQTJCLFNBQVMsQ0FBQyxzREFBc0QsRUFBRSxLQUFLO0FBQUEsTUFDclA7QUFBQSxJQUNELE9BQU87QUFDTixZQUFNLFlBQVksR0FBRyxnQkFBZ0I7QUFFckMsZ0JBQVUsWUFBWTtBQUN0QixnQkFBVSxLQUFLLGNBQWMsVUFBVSxRQUFRLEtBQUssR0FBRztBQUN2RCxnQkFBVSxVQUFVLE1BQU07QUFDekIsYUFBSyxlQUFlLFNBQVM7QUFBQSxNQUM5QjtBQUFBLElBQ0Q7QUFFQSxVQUFNLGdCQUFnQixTQUFTLGNBQWMsUUFBUTtBQUNyRCxrQkFBYyxZQUFZO0FBQzFCLGtCQUFjLEtBQUssZUFBZSxVQUFVLFFBQVEsS0FBSyxHQUFHO0FBQzVELGtCQUFjLFVBQVUsTUFBTTtBQUM3QixVQUFJLG9CQUFvQixLQUFLLEtBQUssS0FBSyw0QkFBNEIsU0FBUyxDQUFDLEVBQUUsS0FBSztBQUFBLElBQ3JGO0FBR0EsY0FBVSxZQUFZLFNBQVM7QUFDL0IsY0FBVSxZQUFZLGFBQWE7QUFDbkMsY0FBVSxZQUFZLEtBQUs7QUFHM0IsV0FBTztBQUFBLEVBRVI7QUFBQSxFQUdBLGNBQWMsTUFBYztBQUMzQixVQUFNLFFBQVEsS0FBSyxlQUFlLElBQUk7QUFFdEMsUUFBSSxRQUFRLEdBQUc7QUFDZCxXQUFLLGNBQWMsS0FBSyxJQUFJO0FBQzVCLFdBQUssZUFBZSxJQUFJO0FBQ3hCLFdBQUssc0JBQXNCLElBQUk7QUFBQSxJQUNoQztBQUNBLFFBQUksS0FBSyxTQUFTLElBQUksTUFBTSxRQUFXO0FBQ3RDLFdBQUssU0FBUyxJQUFJO0FBQ2xCLFdBQUssc0JBQXNCLElBQUk7QUFBQSxJQUNoQztBQUFBLEVBQ0Q7QUFBQSxFQUdBLGNBQWMsTUFBYztBQUMzQixVQUFNLFlBQVksS0FBSyxjQUFjLFFBQVEsSUFBSTtBQUVqRCxRQUFJLFlBQVksSUFBSTtBQUNuQixXQUFLLGNBQWMsT0FBTyxXQUFXLENBQUM7QUFDdEMsV0FBSyxlQUFlLElBQUk7QUFDeEIsV0FBSyxzQkFBc0IsSUFBSTtBQUFBLElBQ2hDO0FBQ0EsUUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLFFBQVc7QUFDdEMsV0FBSyxTQUFTLElBQUk7QUFDbEIsV0FBSyxzQkFBc0IsSUFBSTtBQUFBLElBQ2hDO0FBQUEsRUFDRDtBQUFBLEVBR1EsZUFBZSxXQUFtQjtBQUN6QyxZQUFRLElBQUksZUFBZSxXQUFXO0FBQ3RDLFFBQUcsYUFBVyxvQkFBbUI7QUFFaEMsV0FBSyxxQkFBcUIsbUJBQW1CLEdBQUUsR0FBRSxFQUFFO0FBQUEsSUFDcEQsV0FBVyxhQUFXLG9CQUFtQjtBQUFBLElBRXpDLFdBQVcsYUFBVyxzQkFBcUI7QUFDMUMsV0FBSyxxQkFBcUIsa0JBQWtCLGtDQUFrQyxJQUFJO0FBQUEsSUFDbkYsV0FBVyxhQUFXLHNCQUFxQjtBQUMxQyxXQUFLLHFCQUFxQixrQkFBa0Isa0NBQWtDLElBQUk7QUFBQSxJQUNuRixXQUFXLGFBQVcsMkJBQTBCO0FBQUEsSUFFaEQsV0FBVyxhQUFXLGdCQUFlO0FBQ3BDLFdBQUsscUJBQXFCLGtCQUFrQiw0QkFBNEIsSUFBSTtBQUFBLElBQzdFLFdBQVcsYUFBVyx3QkFBdUI7QUFBQSxJQUU3QyxXQUFXLGFBQVcsd0JBQXVCO0FBQzVDLFdBQUsscUJBQXFCLGtCQUFrQixvQ0FBb0MsSUFBSTtBQUFBLElBQ3JGLFdBQVcsYUFBVyxrQkFBaUI7QUFDdEMsV0FBSyxxQkFBcUIsa0JBQWtCLDhCQUE4QixJQUFJO0FBQUEsSUFDL0UsV0FBVyxhQUFXLHdCQUF1QjtBQUFBLElBRTdDLFdBQVcsYUFBVyxlQUFjO0FBQ25DLFdBQUsscUJBQXFCLGtCQUFrQiwyQkFBMkIsSUFBSTtBQUFBLElBQzVFLFdBQVcsYUFBVyxtQkFBa0I7QUFDdkMsV0FBSyxxQkFBcUIsa0JBQWtCLCtCQUErQixJQUFJO0FBQUEsSUFDaEYsV0FBVyxhQUFXLHFCQUFvQjtBQUN6QyxXQUFLLHFCQUFxQixrQkFBa0IsaUNBQWlDLElBQUk7QUFBQSxJQUNsRixXQUFXLGFBQVcsc0JBQXFCO0FBQzFDLFdBQUsscUJBQXFCLGtCQUFrQixrQ0FBa0MsSUFBSTtBQUFBLElBQ25GO0FBUUEsU0FBSyxpQkFBaUIsV0FBVyxDQUFDO0FBQUEsRUFFbkM7QUFBQSxFQUlRLHNCQUFzQixXQUFtQjtBQUNoRCxVQUFNLFFBQVEsS0FBSyxTQUFTLFNBQVM7QUFDckMsVUFBTSxZQUFZLFNBQVMsY0FBYyxJQUFJLFVBQVUsUUFBUSxLQUFLLEdBQUcsR0FBRztBQUMxRSxRQUFJLFdBQVc7QUFDZCxnQkFBVSxZQUFZO0FBQ3RCLGdCQUFVLFlBQVksR0FBRyxnQkFBZ0I7QUFBQSxJQUMxQztBQUNBLFVBQU0sWUFBc0MsU0FBUyxjQUFjLGVBQWUsVUFBVSxRQUFRLEtBQUssR0FBRyxHQUFHO0FBQy9HLFFBQUksY0FBYyxNQUFNO0FBQ3ZCLFlBQU0sT0FBTyxLQUFLLHFCQUFxQixpQkFBaUIsS0FBSyx1QkFBdUIsU0FBUyxDQUFDO0FBQzlGLFlBQU0sYUFBYSxPQUFPLE9BQU8sS0FBSyxxQkFBcUIsaUJBQWlCLEtBQUssdUJBQXVCLFNBQVMsQ0FBQyxHQUFHLHFCQUFxQjtBQUMxSSxVQUFJLGdCQUFnQixZQUFZLEtBQUssMkJBQTJCLFNBQVMsQ0FBQyxLQUFLLE9BQU87QUFDckYsa0JBQVUsUUFBUSxZQUFZLHdCQUF3QixZQUFZLEtBQUssMkJBQTJCLFNBQVMsQ0FBQyxTQUFTO0FBQ3JILGtCQUFVLFVBQVUsTUFBTTtBQUN6QixjQUFJLG9CQUFvQixLQUFLLEtBQUssR0FBRyxvQkFBb0Isd0JBQXdCLFlBQVksS0FBSywyQkFBMkIsU0FBUyxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7QUFBQSxRQUNyTTtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBR1EsNkJBQTZCLGFBQXVEO0FBQzNGLGVBQVcsY0FBYyxZQUFZLGFBQWE7QUFDakQsWUFBTSxDQUFDLFVBQVUsU0FBUyxJQUFJLFdBQVcsTUFBTSxHQUFHO0FBRWxELFlBQU0sbUJBQW1CLFNBQVMsUUFBUTtBQUMxQyxZQUFNLGlCQUFpQixLQUFLLGVBQWUsS0FBSywrQkFBK0IsU0FBUyxLQUFLLENBQUM7QUFFOUYsVUFBSSxtQkFBbUIsZ0JBQWdCO0FBQ3RDLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFHUSx1Q0FBdUM7QUFDOUMsUUFBSSw0QkFBNEI7QUFJaEMsc0NBQWtDLFFBQVEsZUFBYTtBQUN0RCxtQ0FBNkIsS0FBSyxlQUFlLEtBQUssc0JBQXNCLFNBQVMsRUFBRSxJQUFJLEtBQUs7QUFBQSxJQUNqRyxDQUFDO0FBRUQsWUFBUSxJQUFJLGlDQUFpQywyQkFBMkI7QUFFeEUsUUFBSSw2QkFBNkIsS0FBTTtBQUd0Qyx3Q0FBa0MsUUFBUSxlQUFhO0FBQ3RELFlBQUksS0FBSyxlQUFlLEtBQUssc0JBQXNCLFNBQVMsRUFBRSxJQUFJLEdBQUc7QUFDcEUsZ0JBQU0scUJBQXFCLEtBQUssS0FBTSxLQUFLLGVBQWUsS0FBSyxzQkFBc0IsU0FBUyxFQUFFLElBQUksSUFBSSw0QkFBNkIsR0FBSTtBQUt6SSxlQUFLLHFCQUFxQixLQUFLLHNCQUFzQixTQUFTLEVBQUUsTUFBTSxLQUFLLGVBQWUsS0FBSyxzQkFBc0IsU0FBUyxFQUFFLElBQUksSUFBSSxrQkFBa0I7QUFBQSxRQUMzSjtBQUFBLE1BQ0QsQ0FBQztBQUtELFdBQUssdUJBQXVCO0FBRTVCLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQU1RLGdCQUFnQixhQUF1RDtBQUM5RSxlQUFXLGNBQWMsWUFBWSxhQUFhO0FBQ2pELFlBQU0sQ0FBQyxVQUFVLFNBQVMsSUFBSSxXQUFXLE1BQU0sR0FBRztBQUNsRCxZQUFNLG1CQUFtQixTQUFTLFFBQVE7QUFDMUMsWUFBTSxpQkFBaUIsS0FBSyxlQUFlLEtBQUssK0JBQStCLFNBQVMsS0FBSyxDQUFDO0FBQzlGLFlBQU0sZ0JBQWdCLEtBQUssK0JBQStCLFNBQVMsS0FBSztBQUN4RSxXQUFLLHFCQUFxQixlQUFlLGlCQUFpQixnQkFBZ0I7QUFBQSxJQUMzRTtBQUVBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFHUSx5QkFBeUI7QUFDaEMsVUFBTSxZQUFZLFNBQVMsY0FBYyxhQUFhO0FBQ3RELFFBQUksV0FBVztBQUNkLGdCQUFVLFlBQVk7QUFHdEIsd0NBQWtDLFFBQVEsYUFBVztBQUVwRCxrQkFBVSxhQUFhLEdBQUcsS0FBSyxzQkFBc0IsT0FBTyxFQUFFLGNBQWMsS0FBSyxlQUFlLEtBQUssc0JBQXNCLE9BQU8sRUFBRSxJQUFJLEtBQUs7QUFBQSxNQUM5SSxDQUFDO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFBQSxFQUdRLGlCQUFpQixlQUF5RDtBQUVqRixRQUFHLGNBQWMsUUFBUSxzQkFBcUI7QUFDN0MsVUFBRyxLQUFLLHFDQUFxQyxHQUFFO0FBQzlDLGFBQUssbUJBQW1CLGNBQWMsTUFBTSxDQUFDO0FBQzdDLGFBQUsscUJBQXFCLGlCQUFpQixLQUFLLDBCQUEwQixjQUFjLElBQUksR0FBRyxLQUFLLFNBQVMsY0FBYyxJQUFJLENBQUM7QUFDaEksZ0JBQVEsSUFBSSxpQkFBaUIsY0FBYyxNQUFNO0FBQUEsTUFDbEQsT0FBTztBQUNOLGdCQUFRLElBQUksc0NBQXNDLGNBQWMsZUFBZTtBQUMvRSxZQUFJLG9CQUFvQixLQUFLLEtBQUssMENBQTBDLGNBQWMsc0RBQXNELEVBQUUsS0FBSztBQUFBLE1BQ3hKO0FBQUEsSUFDRCxXQUFVLGNBQWMsUUFBUSxvQkFBbUI7QUFBQSxJQUVuRCxPQUFPO0FBQ04sVUFBSSxLQUFLLDZCQUE2QixhQUFhLEdBQUc7QUFDckQsZ0JBQVEsSUFBSSxpQkFBaUIsY0FBYyxNQUFNO0FBQ2pELGFBQUssbUJBQW1CLGNBQWMsTUFBTSxDQUFDO0FBQzdDLGFBQUsscUJBQXFCLGlCQUFpQixLQUFLLDBCQUEwQixjQUFjLElBQUksR0FBRyxLQUFLLFNBQVMsY0FBYyxJQUFJLENBQUM7QUFDaEksYUFBSyxnQkFBZ0IsYUFBYTtBQUVsQyxhQUFLLHVCQUF1QjtBQUFBLE1BQzdCLE9BQU87QUFDTixnQkFBUSxJQUFJLHNDQUFzQyxjQUFjLGVBQWU7QUFDL0UsWUFBSSxvQkFBb0IsS0FBSyxLQUFLLDBDQUEwQyxjQUFjLHNEQUFzRCxFQUFFLEtBQUs7QUFBQSxNQUN4SjtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFHUSwrQkFBK0IsV0FBbUI7QUFDekQsZUFBVyxXQUFXLFVBQVU7QUFDL0IsVUFBSSxRQUFRLGNBQWMsV0FBVztBQUNwQyxlQUFPLFFBQVE7QUFBQSxNQUNoQjtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRVEsK0JBQStCLE1BQWM7QUFDcEQsZUFBVyxXQUFXLFVBQVU7QUFDL0IsVUFBSSxRQUFRLFNBQVMsTUFBTTtBQUMxQixlQUFPLFFBQVE7QUFBQSxNQUNoQjtBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUFBLEVBRVEsc0JBQXNCLE1BQWM7QUFDM0MsZUFBVyxXQUFXLFVBQVU7QUFDL0IsVUFBSSxRQUFRLFNBQVMsTUFBTTtBQUMxQixlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFDQSxXQUFPLEVBQUUsV0FBVyxJQUFJLE1BQU0sSUFBSSxTQUFTLEdBQUc7QUFBQSxFQUMvQztBQUFBLEVBR1Esa0NBQWtDLFdBQW1CO0FBQzVELGVBQVcsV0FBVyxVQUFVO0FBQy9CLFVBQUksUUFBUSxjQUFjLFdBQVc7QUFDcEMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLDZCQUE2QixNQUFjO0FBQ2xELGVBQVcsV0FBVyxVQUFVO0FBQy9CLFVBQUksUUFBUSxTQUFTLE1BQU07QUFDMUIsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLDBCQUEwQixhQUFxQjtBQUN0RCxlQUFXLFdBQVcsZ0JBQWdCO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGFBQWE7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLDRCQUE0QixhQUFxQjtBQUN4RCxlQUFXLFdBQVcsZ0JBQWdCO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGFBQWE7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLHlCQUF5QixhQUFxQjtBQUNyRCxlQUFXLFdBQVcsZ0JBQWdCO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGFBQWE7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLHVCQUF1QixhQUFxQjtBQUNuRCxlQUFXLFdBQVcsZ0JBQWdCO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGFBQWE7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLDJCQUEyQixhQUFxQjtBQUN2RCxlQUFXLFdBQVcsZ0JBQWdCO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGFBQWE7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVRLHNCQUFzQixhQUFxQjtBQUNsRCxlQUFXLFdBQVcsZ0JBQWdCO0FBQ3JDLFVBQUksUUFBUSxTQUFTLGFBQWE7QUFDakMsZUFBTyxRQUFRO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFFRDs7O0FEdmtCTyxJQUFNLGVBQU4sY0FBMkIsdUJBQU07QUFBQSxFQUl2QyxZQUFZQyxNQUFVLGFBQXFCLHNCQUFvQztBQUM5RSxVQUFNQSxJQUFHO0FBQ1QsU0FBSyxjQUFjO0FBQ25CLFNBQUssdUJBQXVCO0FBQUEsRUFDN0I7QUFBQSxFQUVBLFNBQVM7QUFDUixVQUFNLEVBQUUsVUFBVSxJQUFJO0FBQ3RCLGNBQVUsUUFBUSxLQUFLLFdBQVc7QUFFbEMsVUFBTSxtQkFBbUIsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLENBQUMsR0FBRyxzQkFBc0IsS0FBSyxvQkFBb0I7QUFJM0csVUFBTSxTQUFTLFNBQVMsY0FBYyxRQUFRO0FBQzlDLFdBQU8sWUFBWTtBQUNuQixXQUFPLFVBQVUsTUFBTTtBQUN0Qix1QkFBaUIsY0FBYyxLQUFLO0FBQ3BDLHVCQUFpQixLQUFLO0FBQUEsSUFDdkI7QUFHQSxxQkFBaUIsa0JBQWtCO0FBQ25DLHFCQUFpQixtQkFBbUI7QUFHcEMsVUFBTSxVQUFVLFNBQVMsY0FBYyxRQUFRO0FBQy9DLFlBQVEsWUFBWTtBQUNwQixZQUFRLFVBQVUsTUFBTTtBQUN2Qix1QkFBaUIsY0FBYyxJQUFJO0FBQ25DLHVCQUFpQixLQUFLO0FBQUEsSUFDdkI7QUFFQSxjQUFVLFlBQVksTUFBTTtBQUM1QixjQUFVLFlBQVksT0FBTztBQUFBLEVBQzlCO0FBQUEsRUFFQSxVQUFVO0FBQ1QsVUFBTSxFQUFFLFVBQVUsSUFBSTtBQUN0QixjQUFVLE1BQU07QUFBQSxFQUNqQjtBQUVEOzs7QTdDbERBLElBQU0sUUFBUSxTQUFTLGNBQWMsT0FBTztBQUM1QyxNQUFNLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlwQixTQUFTLEtBQUssT0FBTyxLQUFLO0FBd0MxQixJQUFJLG1CQUEyQjtBQUMvQixJQUFxQkMsZ0JBQXJCLGNBQTBDLHdCQUFPO0FBQUEsRUFBakQ7QUFBQTtBQUlDLFNBQVEsZ0JBQWdCLEtBQUssaUJBQWlCO0FBQzlDLFNBQVEsd0JBQXdCLEtBQUssY0FBYyxTQUFTLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUFBO0FBQUEsRUFJaEYsaUJBQWlCLEtBQWE7QUFDdkIsVUFBTSxpQkFBaUIsS0FBSyxTQUFTLEdBQUcsTUFBTSxTQUFZLEtBQUssU0FBUyxHQUFHLEVBQUUsU0FBUyxJQUFJO0FBRWhHLFdBQU8sY0FBYyxjQUFjO0FBQUEsRUFDakM7QUFBQSxFQUVILGlCQUFpQixLQUFhO0FBQzdCLFVBQU0saUJBQWlCLEtBQUssU0FBUyxHQUFHLE1BQU0sU0FBWSxLQUFLLFNBQVMsR0FBRyxFQUFFLFNBQVMsSUFBSTtBQUUxRixXQUFPLGNBQWMsY0FBYztBQUFBLEVBQ2pDO0FBQUEsRUFFSCxrQkFBa0IsS0FBYTtBQUN4QixVQUFNLGlCQUFpQixLQUFLLFNBQVMsR0FBRyxNQUFNLFNBQVksS0FBSyxTQUFTLEdBQUcsRUFBRSxTQUFTLElBQUk7QUFFaEcsV0FBTyxlQUFlLGNBQWM7QUFBQSxFQUNsQztBQUFBLEVBR0gsaUJBQWlCLEtBQWEsT0FBZTtBQUU1QyxVQUFNLGlCQUFpQixjQUFjLEtBQUs7QUFDcEMsU0FBSyxTQUFTLEdBQUcsSUFBSTtBQUdyQixTQUFLLGFBQWE7QUFBQSxFQUN6QjtBQUFBLEVBR0EsaUJBQWlCLEtBQWEsT0FBZTtBQUc1QyxVQUFNLGlCQUFpQixjQUFjLEtBQUs7QUFFMUMsU0FBSyxTQUFTLEdBQUcsSUFBSTtBQUVmLFNBQUssYUFBYTtBQUFBLEVBQ3RCO0FBQUEsRUFHSCxrQkFBa0IsS0FBYSxPQUFnQjtBQUc5QyxVQUFNLGlCQUFpQixlQUFlLEtBQUs7QUFDckMsU0FBSyxTQUFTLEdBQUcsSUFBSTtBQUVyQixTQUFLLGFBQWE7QUFBQSxFQUN6QjtBQUFBLEVBTUEsTUFBTSxTQUFTO0FBQ2QsWUFBUSxJQUFJLG1DQUFtQztBQUkvQyxTQUFLLGNBQWMsSUFBSSwyQkFBMkIsS0FBSyxLQUFLLElBQUksQ0FBQztBQUdqRSxVQUFNLEtBQUssYUFBYTtBQUd4QixlQUFXLFlBQVk7QUFFdEIsWUFBTSxLQUFLLGFBQWE7QUFDeEIsWUFBTSxLQUFLLGdCQUFnQjtBQUMzQixZQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQUEsSUFDdEQsR0FBRyxLQUFLLGlCQUFpQixlQUFlLElBQUUsR0FBSTtBQUk5QyxTQUFLLGdCQUFnQixLQUFLLEtBQUs7QUFDL0IsU0FBSyxVQUFVLE9BQU8sWUFBWSxLQUFLLGdCQUFnQixLQUFLLElBQUksR0FBRyxLQUFLLGFBQWE7QUFLckYsUUFBSSxLQUFLLGtCQUFrQixPQUFPLEdBQUU7QUFDbkMsV0FBSyxjQUFjLGlCQUFpQixZQUFZLFlBQVk7QUFTM0QsWUFBSSxhQUFhLEtBQUssS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLO0FBQUEsTUFFNUMsQ0FBQztBQUFBLElBQ0Y7QUFFQSxRQUFHLEtBQUssaUJBQWlCLDRCQUE0QixLQUFLLElBQUc7QUFDNUQsV0FBSyxjQUFjLGVBQWUsWUFBWSxZQUFZO0FBRXpELFlBQUksYUFBYSxLQUFLLEtBQUssS0FBSyxJQUFJLEVBQUUsS0FBSztBQUFBLE1BQzVDLENBQUM7QUFFRCxXQUFLLFdBQVc7QUFBQSxRQUNmLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLFVBQVUsWUFBWTtBQUNyQixjQUFJLGFBQWEsS0FBSyxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUs7QUFBQSxRQUM1QztBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFFQSxTQUFLLGNBQWMsVUFBVSwyQkFBMkIsWUFBWTtBQUVuRSxZQUFNLEtBQUssc0JBQXNCO0FBQUEsSUFDbEMsQ0FBQztBQUlELFFBQUksS0FBSyxrQkFBa0IsbUJBQW1CLEdBQUU7QUFFL0MsV0FBSyxXQUFXO0FBQUEsUUFDZixJQUFJO0FBQUEsUUFDSixNQUFNO0FBQUEsUUFDTixVQUFVLFlBQVk7QUFDckIsZ0JBQU0sS0FBSyxlQUFlLEtBQUsscUJBQXFCO0FBQUEsUUFDckQ7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsUUFBSSxLQUFLLGtCQUFrQixtQkFBbUIsR0FBRTtBQUUvQyxXQUFLLFdBQVc7QUFBQSxRQUNmLElBQUk7QUFBQSxRQUNKLE1BQU07QUFBQSxRQUNOLFVBQVUsWUFBWTtBQUNyQixnQkFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLO0FBQ3ZCLGdCQUFNLGlCQUFpQixLQUFLLEtBQUssS0FBSyxpQkFBaUIsZ0JBQWdCLENBQUM7QUFBQSxRQUd6RTtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFHQSxRQUFJLEtBQUssa0JBQWtCLG1CQUFtQixHQUFHO0FBRWhELFdBQUssV0FBVztBQUFBLFFBQ2YsSUFBSTtBQUFBLFFBQ0osTUFBTTtBQUFBLFFBQ04sVUFBVSxZQUFZO0FBQ04sZ0JBQU0sS0FBSyxVQUFVO0FBQUEsUUFDekI7QUFBQSxNQUViLENBQUM7QUFBQSxJQUNGO0FBSUEsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLFlBQVk7QUFDckIsY0FBTSxLQUFLLHNCQUFzQjtBQUFBLE1BQ2xDO0FBQUEsSUFDRCxDQUFDO0FBSUQsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLFlBQVk7QUFDckIsY0FBTSxxQkFBcUIsS0FBSyxpQkFBaUIsc0JBQXNCLEdBQUcsS0FBSyxpQkFBaUIsc0JBQXNCLENBQUM7QUFBQSxNQUN4SDtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBRUY7QUFBQSxFQUdHLE1BQWMsWUFBWTtBQUN0QixVQUFNLEtBQUssMEJBQTBCO0FBQ3JDLFNBQUssaUJBQWlCLGVBQWUsQ0FBQztBQUN0QyxTQUFLLGlCQUFpQixnQkFBZ0IsQ0FBQztBQUN2QyxTQUFLLGlCQUFpQixrQkFBa0IsR0FBSTtBQUM1QyxTQUFLLGtCQUFrQixxQkFBcUIsS0FBSztBQUNqRCxTQUFLLGlCQUFpQixzQkFBc0IsQ0FBQztBQUU3QyxVQUFNLEtBQUssaUJBQWlCLEdBQUUsRUFBRTtBQUNoQyxVQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQ3JELFFBQUksb0JBQW9CLEtBQUssS0FBSyx5REFBeUQsS0FBSyxpQkFBaUIsZ0JBQWdCLGlCQUFpQixFQUFFLEtBQUs7QUFBQSxFQUM3SjtBQUFBLEVBR0EsTUFBYyxlQUFlLHVCQUF3QztBQUN2RSxTQUFLLGlCQUFpQix5QkFBeUIsT0FBTyxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUM7QUFDL0UsVUFBTSxLQUFLLGFBQWE7QUFFeEIsVUFBTSxFQUFDLE1BQUssSUFBSSxLQUFLO0FBQ3JCLFVBQU0saUJBQWlCLEtBQUssS0FBSyxLQUFLLGlCQUFpQixnQkFBZ0IsQ0FBQztBQUd4RSxVQUFNLEtBQUssZUFBZTtBQUMxQixVQUFNLGVBQXdCLE1BQU0sV0FBVyxLQUFLLEtBQUssS0FBSyxpQkFBaUIsYUFBYSxHQUFHLEtBQUssaUJBQWlCLGVBQWUsQ0FBQztBQUNySSxZQUFRLElBQUkseUNBQXlDLGFBQWEsUUFBUTtBQUUxRSxRQUFJLGlCQUFpQjtBQUVyQixlQUFXLFlBQVksY0FBYztBQUNwQyxZQUFNLE9BQU87QUFDYixZQUFNLGVBQWUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQzlDLFlBQU0sYUFBYSxLQUFLLElBQUksVUFBVSxvQkFBb0IsNkJBQVk7QUFDdEUsVUFBSSxjQUFjLFdBQVcsUUFBUSxXQUFXLEtBQUssU0FBUyxLQUFLLE1BQU07QUFDeEUsZ0JBQVEsS0FBSyxRQUFRLEtBQUssbUNBQW1DO0FBQzdEO0FBQUEsTUFDRDtBQUVBLFlBQU0sYUFBYSw0QkFBNEIsY0FBYyxTQUFTLFFBQVE7QUFDOUUsWUFBTSxpQkFBaUIsZUFBZSxVQUFVO0FBQ2hELFlBQU07QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNELElBQUksK0JBQStCLGNBQWMsU0FBUyxVQUFVLEtBQUssaUJBQWlCLHNCQUFzQixHQUFHLEtBQUssaUJBQWlCLHNCQUFzQixDQUFDO0FBQ2hLLFlBQU0scUJBQTZCLDZCQUE2QixXQUFXLGtCQUFrQixTQUFTO0FBQ3RHLFlBQU0sZUFBZSxtQkFBbUIsS0FBSyxJQUFJO0FBQ2pELFlBQU0sZUFBZSxjQUFjLElBQUk7QUFDdkMsWUFBTSxjQUFjLFlBQVksWUFBWTtBQUM1QyxZQUFNLFVBQVUsYUFBYSxvQkFBb0IsSUFBSSxDQUFDO0FBQ3RELFlBQU0sZUFBZSxvQkFBb0IsZ0JBQWdCLGNBQWMsYUFBYSxTQUFTLGtCQUFrQjtBQUcvRyxjQUFRLElBQUksbUJBQW1CLFNBQVMsb0JBQW9CLFNBQVMsTUFBTTtBQUUzRSxVQUFJO0FBQ0gsY0FBTSxLQUFLLElBQUksWUFBWSxtQkFBbUIsTUFBTSxDQUFDLGdCQUFnQjtBQUNwRSxjQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxZQUFZLEtBQUssR0FBRztBQUVsRixpQkFBSyxpQkFBaUIscUJBQXFCLDZCQUE2QixnQ0FBZ0MsWUFBWSxHQUFFLGtCQUFrQjtBQUN4SSw4QkFBa0I7QUFBQSxVQUNuQixXQUFXLEVBQUUsbUJBQW1CLGNBQWM7QUFFN0MsaUJBQUssaUJBQWlCLHFCQUFxQiw2QkFBNkIsS0FBSyxZQUFZLEdBQUUsMkJBQTJCO0FBQ3RILDhCQUFrQjtBQUFBLFVBQ25CO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWSxLQUFLLEtBQUssaUJBQWlCLGFBQWE7QUFFaEgsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxhQUFhLEdBQUcsWUFBWSxHQUFFLGdCQUFnQjtBQUM5SCw4QkFBa0I7QUFBQSxVQUNuQixXQUFXLEVBQUUsaUJBQWlCLGNBQWM7QUFFM0MsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZLEdBQUUseUJBQXlCO0FBQ2hILDhCQUFrQjtBQUFBLFVBQ25CO0FBRUEsY0FBSSw2QkFBNkIsWUFBWSxtQkFBbUIsR0FBRyxjQUFjLEtBQUssR0FBRztBQUV4RixpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG1CQUFtQixHQUFHLGNBQWMsR0FBRSxxQkFBcUI7QUFDM0ksOEJBQWtCO0FBQUEsVUFDbkIsV0FBVyxFQUFFLHVCQUF1QixjQUFjO0FBRWpELGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssY0FBYyxHQUFFLDhCQUE4QjtBQUN2SCw4QkFBa0I7QUFBQSxVQUNuQjtBQUVBLGNBQUksNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVcsS0FBSyxHQUFHO0FBRWhGLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksY0FBYyxHQUFHLFdBQVcsR0FBRSxpQkFBaUI7QUFDL0gsOEJBQWtCO0FBQUEsVUFDbkIsV0FBVyxFQUFFLGtCQUFrQixjQUFjO0FBRTVDLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVyxHQUFFLDBCQUEwQjtBQUNoSCw4QkFBa0I7QUFBQSxVQUNuQjtBQUVBLGNBQUksNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU8sS0FBSyxHQUFHO0FBRTdFLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksZUFBZSxHQUFHLE9BQU8sR0FBRSxrQkFBa0I7QUFDN0gsOEJBQWtCO0FBQUEsVUFDbkIsV0FBVyxFQUFFLG1CQUFtQixjQUFjO0FBRTdDLGlCQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssT0FBTyxHQUFFLDJCQUEyQjtBQUM3Ryw4QkFBa0I7QUFBQSxVQUNuQjtBQUVBLGNBQUksNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCLEtBQUssR0FBRztBQUU3RyxpQkFBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixHQUFFLHNDQUFzQztBQUNqTCw4QkFBa0I7QUFBQSxVQUNuQixXQUFXLEVBQUUsd0NBQXdDLGNBQWM7QUFFbEUsaUJBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxrQkFBa0IsR0FBRSwrQ0FBK0M7QUFDNUksOEJBQWtCO0FBQUEsVUFDbkI7QUFFQSxlQUFLLGlCQUFpQixhQUFhLGNBQWMsZ0JBQWdCLGFBQWEsU0FBUyxvQkFBb0IsWUFBWTtBQUFBLFFBQ3hILENBQUM7QUFBQSxNQUNGLFNBQVNDLElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsZ0VBQWdFLEtBQUssUUFBUUEsR0FBRTtBQUNwRyxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsUUFBSSxpQkFBaUIsR0FBRztBQUN2QixVQUFJLHdCQUFPLEdBQUcsa0NBQWlDLEdBQUk7QUFDbkQsY0FBUSxJQUFJLEdBQUcsZ0NBQWdDO0FBQUEsSUFDaEQ7QUFJQSxlQUFXLFlBQVk7QUFFdEIsWUFBTSxZQUFtQixxQkFBcUIsS0FBSyxpQkFBaUIsYUFBYSxDQUFDO0FBQ2xGLFVBQUksd0JBQU8sc0JBQXNCLFVBQVUsZ0JBQWdCLFVBQVUsZUFBYyxHQUFJO0FBQ3ZGLGNBQVEsSUFBSSxjQUFjLFVBQVUsVUFBVSxVQUFVLGFBQWE7QUFDckUsWUFBTSxLQUFLLHVCQUF1QixLQUFLLGlCQUFpQixnQkFBZ0IsR0FBRyxTQUFTO0FBQ3BGLFlBQU0sS0FBSyxnQ0FBZ0MsS0FBSyxpQkFBaUIsZ0JBQWdCLEdBQUcsS0FBSyxpQkFBaUIsYUFBYSxDQUFDO0FBQ3hILFlBQU0sS0FBSyxlQUFlO0FBQzFCLFlBQU0sS0FBSyxnQkFBZ0IscUJBQXFCO0FBQUEsSUFDakQsR0FBRyxHQUFJO0FBRVAsUUFBSSxvQkFBb0IsS0FBSyxLQUFLO0FBQUEsNkJBQXdFO0FBQUE7QUFBQSwyQkFBc0QsS0FBSyxpQkFBaUIsZ0JBQWdCO0FBQUE7QUFBQSxnRkFBMEYsRUFBRSxLQUFLO0FBQUEsRUFDeFM7QUFBQSxFQUdRLGlCQUFpQixhQUFrQixjQUFzQixnQkFBd0IsYUFBcUIsU0FBaUIsb0JBQTRCLGNBQXNCO0FBQ2hMLGdCQUFZLGFBQWEsSUFBSSxjQUFjLFlBQVksYUFBYSxHQUFHLFlBQVk7QUFDbkYsZ0JBQVksbUJBQW1CLElBQUksY0FBYyxZQUFZLG1CQUFtQixHQUFHLGNBQWM7QUFDakcsZ0JBQVksY0FBYyxJQUFJLGNBQWMsWUFBWSxjQUFjLEdBQUcsV0FBVztBQUNwRixnQkFBWSxlQUFlLElBQUksY0FBYyxZQUFZLGVBQWUsR0FBRyxPQUFPO0FBQ2xGLGdCQUFZLG9DQUFvQyxJQUFJLGNBQWMsWUFBWSxvQ0FBb0MsR0FBRyxrQkFBa0I7QUFDdkksZ0JBQVksZUFBZSxJQUFJLGNBQWMsWUFBWSxlQUFlLEdBQUcsWUFBWTtBQUFBLEVBQ3hGO0FBQUEsRUFHQSxXQUFXO0FBQ1YsWUFBUSxJQUFJLHFDQUFxQztBQUdqRCxRQUFJLEtBQUssWUFBWSxNQUFNO0FBQzFCLG9CQUFjLEtBQUssT0FBTztBQUMxQixXQUFLLFVBQVU7QUFBQSxJQUNoQjtBQUFBLEVBQ0Q7QUFBQSxFQUdBLE1BQU0sd0JBQXVCO0FBelo5QjtBQTBaRSxVQUFNLE9BQW9CLEtBQUssSUFBSSxVQUFVLGNBQWM7QUFDM0QsUUFBSSxRQUFRLE1BQU07QUFDakIsY0FBUSxNQUFNLHNDQUFzQztBQUFBLElBQ3JEO0FBRUEsUUFBSSwrQkFBK0I7QUFHbkMsVUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLG9CQUFvQiw2QkFBWTtBQUN0RSxVQUFNLGVBQWUseUNBQVksT0FBTztBQUN4QyxVQUFNLFdBQVcseUNBQVksS0FBSztBQUdsQyxRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGFBQWE7QUFDakIsUUFBSSxxQkFBcUI7QUFFekIsUUFBSSxpQkFBaUIsVUFBYSxhQUFhLFFBQVc7QUFDekQsbUJBQWEsNEJBQTRCLGNBQWMsUUFBUTtBQUMvRCx1QkFBaUIsZUFBZSxVQUFVO0FBRzFDLFVBQUksaUJBQWlCLFFBQVEsYUFBYSxNQUFNO0FBQy9DLGNBQU0sRUFBRSxXQUFXLGtCQUFrQixVQUFVLElBQUksK0JBQStCLGNBQWMsVUFBVSxLQUFLLGlCQUFpQixzQkFBc0IsR0FBRyxLQUFLLGlCQUFpQixzQkFBc0IsQ0FBQztBQUN0TSw2QkFBcUIsNkJBQTZCLFdBQVcsa0JBQWtCLFNBQVM7QUFBQSxNQUN6RjtBQUFBLElBQ0Q7QUFFQSxRQUFJLGVBQWU7QUFDbkIsUUFBSSxlQUFlO0FBQ25CLFFBQUksY0FBYztBQUNsQixRQUFJLFVBQVU7QUFFZCxRQUFJLFNBQVMsTUFBTTtBQUNsQixxQkFBZSxvQkFBbUIsVUFBSyxTQUFMLFlBQWEsRUFBRTtBQUNqRCxxQkFBZSxjQUFjLElBQUk7QUFDakMsb0JBQWMsWUFBWSxZQUFZO0FBQ3RDLGdCQUFVLGFBQWEsb0JBQW9CLElBQUksQ0FBQztBQUVoRCxZQUFNLGVBQWUsb0JBQW9CLGdCQUFnQixjQUFjLGFBQWEsU0FBUyxrQkFBa0I7QUFJL0csV0FBSyxpQkFBaUIsdUJBQXNCLEtBQUssaUJBQWlCLHFCQUFxQixJQUFJLENBQUM7QUFHNUYsVUFBSTtBQUNILGNBQU0sS0FBSyxJQUFJLFlBQVksbUJBQW1CLE1BQU0sQ0FBQyxnQkFBZ0I7QUFDcEUsY0FBSSxhQUFhO0FBQ2hCLGdCQUFJLGlCQUFpQjtBQUNyQixnQkFBSSw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsWUFBWSxLQUFLLEdBQUU7QUFDakYsc0JBQVEsSUFBSSxtQkFBbUI7QUFFL0Isb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixxQkFBcUIsNkJBQTZCLGdDQUFnQyxZQUFZLEdBQUUsa0JBQWtCO0FBQ3pKLGdDQUFrQjtBQUNsQixtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVcsRUFBRSxtQkFBbUIsY0FBYTtBQUU1QyxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLHFCQUFxQiw2QkFBNkIsS0FBSyxZQUFZLEdBQUUsMkJBQTJCO0FBQ3ZJLGdDQUFrQjtBQUNsQixtQkFBSyxnQkFBZ0IsUUFBUTtBQUM3Qiw2Q0FBK0I7QUFDL0IsbUJBQUssaUJBQWlCLDhCQUE2QixLQUFLLGlCQUFpQiw0QkFBNEIsSUFBSSxDQUFDO0FBQzFHLG1CQUFLLG1CQUFtQix3QkFBdUIsR0FBRSxDQUFDO0FBQ2xELGtCQUFHLEtBQUssaUJBQWlCLDRCQUE0QixLQUFLLElBQUc7QUFDNUQsb0JBQUksb0JBQW9CLEtBQUssS0FBSyx1U0FBb1EsRUFBRSxLQUFLO0FBQUEsY0FDOVM7QUFBQSxZQUNEO0FBRUEsZ0JBQUksNkJBQTZCLFlBQVksYUFBYSxHQUFHLFlBQVksS0FBSyxLQUFLLGlCQUFpQixhQUFZO0FBRS9HLG9CQUFNLFdBQVcsS0FBSyxpQkFBaUIsaUJBQWlCLDZCQUE2QixZQUFZLGFBQWEsR0FBRyxZQUFZLEdBQUUsZ0JBQWdCO0FBQy9JLGdDQUFrQjtBQUNsQixtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVcsRUFBRSxpQkFBaUIsY0FBYTtBQUUxQyxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxZQUFZLEdBQUUseUJBQXlCO0FBQ2pJLGdDQUFrQjtBQUNsQixtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCO0FBRUEsZ0JBQUksNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYyxLQUFLLEdBQUU7QUFFdkYsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksbUJBQW1CLEdBQUcsY0FBYyxHQUFFLHFCQUFxQjtBQUM1SixnQ0FBa0I7QUFDbEIsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsdUJBQXVCLGNBQWE7QUFFL0Msb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssY0FBYyxHQUFFLDhCQUE4QjtBQUN4SSxnQ0FBa0I7QUFDbEIsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGNBQWMsR0FBRyxXQUFXLEtBQUssR0FBRTtBQUUvRSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxjQUFjLEdBQUcsV0FBVyxHQUFFLGlCQUFpQjtBQUNoSixnQ0FBa0I7QUFDbEIsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsa0JBQWtCLGNBQWE7QUFFMUMsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssV0FBVyxHQUFFLDBCQUEwQjtBQUNqSSxnQ0FBa0I7QUFDbEIsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLGVBQWUsR0FBRyxPQUFPLEtBQUssR0FBRTtBQUU1RSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsWUFBWSxlQUFlLEdBQUcsT0FBTyxHQUFFLGtCQUFrQjtBQUM5SSxnQ0FBa0I7QUFDbEIsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QixXQUFVLEVBQUUsbUJBQW1CLGNBQWE7QUFFM0Msb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLEtBQUssT0FBTyxHQUFFLDJCQUEyQjtBQUM5SCxnQ0FBa0I7QUFDbEIsbUJBQUssZ0JBQWdCLFFBQVE7QUFBQSxZQUM5QjtBQUVBLGdCQUFJLDZCQUE2QixZQUFZLG9DQUFvQyxHQUFHLGtCQUFrQixLQUFLLEdBQUU7QUFFNUcsb0JBQU0sV0FBVyxLQUFLLGlCQUFpQixpQkFBaUIsNkJBQTZCLFlBQVksb0NBQW9DLEdBQUcsa0JBQWtCLEdBQUUsc0NBQXNDO0FBQ2xNLGdDQUFrQjtBQUNsQixtQkFBSyxnQkFBZ0IsUUFBUTtBQUFBLFlBQzlCLFdBQVUsRUFBRSx3Q0FBd0MsY0FBYTtBQUVoRSxvQkFBTSxXQUFXLEtBQUssaUJBQWlCLGlCQUFpQiw2QkFBNkIsS0FBSyxrQkFBa0IsR0FBRSwrQ0FBK0M7QUFDN0osZ0NBQWtCO0FBQ2xCLG1CQUFLLGdCQUFnQixRQUFRO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSxpQkFBaUIsR0FBRTtBQUN0QixvQkFBTSxnQkFBZ0IsdUJBQXVCLGNBQWM7QUFDM0Qsa0JBQUksd0JBQU8sZUFBYyxHQUFJO0FBQzdCLHNCQUFRLElBQUksYUFBYTtBQUFBLFlBQzFCO0FBRUEsaUJBQUssaUJBQWlCLGFBQWEsY0FBYyxnQkFBZ0IsYUFBYSxTQUFTLG9CQUFvQixZQUFZO0FBQUEsVUFDeEg7QUFBQSxRQUNELENBQUM7QUFBQSxNQUNGLFNBQVNBLElBQVA7QUFDRCxhQUFJQSxNQUFBLGdCQUFBQSxHQUFHLFVBQVMsa0JBQWtCO0FBQ2pDLGdCQUFNLGVBQWUsZ0VBQWdFLEtBQUssUUFBUUEsR0FBRTtBQUNwRyxjQUFJLHdCQUFPLGNBQWMsR0FBSTtBQUM3QixrQkFBUSxNQUFNLFlBQVk7QUFBQSxRQUMzQjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLHdCQUFPLHdCQUF3QjtBQUNuQyxjQUFRLElBQUksd0JBQXdCO0FBQ3BDLFlBQU0sS0FBSyxnQkFBZ0IsS0FBSyxxQkFBcUI7QUFBQSxJQUN0RCxPQUFPO0FBQ04sY0FBUSxNQUFNLHNFQUFzRTtBQUFBLElBQ3JGO0FBQ0EsUUFBSSw4QkFBNkI7QUFDaEMsWUFBTSxLQUFLLDhCQUE4QjtBQUN6QyxZQUFNLEtBQUssK0JBQStCO0FBQUEsSUFDM0M7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLGtCQUFpQjtBQUN0QixRQUFJLFFBQVE7QUFDWixRQUFHLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSyxpQkFBaUIsdUJBQXVCLEdBQUcsWUFBWSxDQUFDLEdBQUU7QUFDMUYsV0FBSyxpQkFBaUIseUJBQXlCLENBQUM7QUFDaEQsV0FBSyxpQkFBaUIseUJBQXlCLE9BQU8sT0FBTyxFQUFFLE9BQU8sWUFBWSxDQUFDO0FBQ25GLFlBQU0sS0FBSyxhQUFhO0FBQ3hCLGNBQVEsSUFBSSx5QkFBeUI7QUFDckMsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFHLENBQUMsZUFBZSxPQUFPLE9BQU8sS0FBSyxpQkFBaUIsd0JBQXdCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLE9BQU8sT0FBTyxLQUFLLGlCQUFpQix3QkFBd0IsR0FBRyxZQUFZLENBQUMsR0FBRTtBQUM1TCxZQUFNLGFBQWEsT0FBTyxPQUFPLEVBQUUsS0FBSyxPQUFPLE9BQU8sS0FBSyxpQkFBaUIsd0JBQXdCLEdBQUcsWUFBWSxHQUFHLE1BQU0sSUFBSTtBQUNoSSxXQUFLLGlCQUFpQiwwQkFBMEIsQ0FBQztBQUNqRCxXQUFLLGlCQUFpQiwwQkFBMEIsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxPQUFPLFlBQVksQ0FBQztBQUN2RyxXQUFLLHNCQUFzQixVQUFVO0FBQ3JDLGNBQVEsSUFBSSxHQUFHLHdCQUF3QjtBQUN2QyxZQUFNLEtBQUssYUFBYTtBQUN4QixZQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQ3JELGNBQVEsSUFBSSwwQkFBMEI7QUFDdEMsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFHLGVBQWUsT0FBTyxPQUFPLEtBQUssaUJBQWlCLHdCQUF3QixHQUFHLFlBQVksQ0FBQyxLQUFLLEtBQUssaUJBQWlCLHdCQUF3QixLQUFLLEdBQUU7QUFDdkosV0FBSyxpQkFBaUIsMEJBQTBCLENBQUM7QUFDakQsV0FBSyxpQkFBaUIsMEJBQTBCLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdkcsWUFBTSxLQUFLLGFBQWE7QUFDeEIsY0FBUTtBQUFBLElBQ1Q7QUFDQSxRQUFJLE9BQU07QUFDVCxZQUFNLEtBQUssaUJBQWlCLEtBQUssaUJBQWlCLGdCQUFnQixDQUFDO0FBQUEsSUFDcEU7QUFHQSxRQUFJLEtBQUssa0JBQWtCLGdDQUFnQyxLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sT0FBTyxLQUFLLGlCQUFpQiw4QkFBOEIsR0FBRyxxQkFBcUIsR0FBRSw2QkFBNkIsbUJBQW1CLENBQUMsR0FBRTtBQUN0TyxXQUFLLGtCQUFrQixrQ0FBaUMsS0FBSztBQUM3RCxjQUFRLElBQUksaUNBQWlDO0FBQUEsSUFDOUM7QUFDQSxRQUFJLEtBQUssa0JBQWtCLGdDQUFnQyxLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sT0FBTyxLQUFLLGlCQUFpQiw4QkFBOEIsR0FBRyxxQkFBcUIsR0FBRSw2QkFBNkIsbUJBQW1CLENBQUMsR0FBRTtBQUN0TyxXQUFLLGtCQUFrQixrQ0FBaUMsS0FBSztBQUM3RCxjQUFRLElBQUksaUNBQWlDO0FBQUEsSUFDOUM7QUFDQSxRQUFJLEtBQUssa0JBQWtCLDBCQUEwQixLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sT0FBTyxLQUFLLGlCQUFpQix3QkFBd0IsR0FBRyxxQkFBcUIsR0FBRSw2QkFBNkIsYUFBYSxDQUFDLEdBQUU7QUFDcE4sV0FBSyxrQkFBa0IsNEJBQTJCLEtBQUs7QUFDdkQsY0FBUSxJQUFJLDJCQUEyQjtBQUFBLElBQ3hDO0FBQ0EsUUFBSSxLQUFLLGtCQUFrQixrQ0FBa0MsS0FBSyxRQUFRLGdCQUFnQixPQUFPLE9BQU8sS0FBSyxpQkFBaUIsZ0NBQWdDLEdBQUcscUJBQXFCLEdBQUUsNkJBQTZCLHFCQUFxQixDQUFDLEdBQUU7QUFDNU8sV0FBSyxrQkFBa0Isb0NBQW1DLEtBQUs7QUFDL0QsY0FBUSxJQUFJLG1DQUFtQztBQUFBLElBQ2hEO0FBQ0EsUUFBSSxLQUFLLGtCQUFrQiw0QkFBNEIsS0FBSyxRQUFRLGdCQUFnQixPQUFPLE9BQU8sS0FBSyxpQkFBaUIsMEJBQTBCLEdBQUcscUJBQXFCLEdBQUUsNkJBQTZCLGVBQWUsQ0FBQyxHQUFFO0FBQzFOLFdBQUssa0JBQWtCLDhCQUE2QixLQUFLO0FBQ3pELGNBQVEsSUFBSSw2QkFBNkI7QUFBQSxJQUMxQztBQUNBLFFBQUksS0FBSyxrQkFBa0IseUJBQXlCLEtBQUssUUFBUSxnQkFBZ0IsT0FBTyxPQUFPLEtBQUssaUJBQWlCLHVCQUF1QixHQUFHLHFCQUFxQixHQUFFLDZCQUE2QixZQUFZLENBQUMsR0FBRTtBQUNqTixXQUFLLGtCQUFrQiwyQkFBMEIsS0FBSztBQUN0RCxjQUFRLElBQUksMEJBQTBCO0FBQUEsSUFDdkM7QUFDQSxRQUFJLEtBQUssa0JBQWtCLDZCQUE2QixLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sT0FBTyxLQUFLLGlCQUFpQiwyQkFBMkIsR0FBRyxxQkFBcUIsR0FBRSw2QkFBNkIsZ0JBQWdCLENBQUMsR0FBRTtBQUM3TixXQUFLLGtCQUFrQiwrQkFBOEIsS0FBSztBQUMxRCxjQUFRLElBQUksOEJBQThCO0FBQUEsSUFDM0M7QUFDQSxRQUFJLEtBQUssa0JBQWtCLCtCQUErQixLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sT0FBTyxLQUFLLGlCQUFpQiw2QkFBNkIsR0FBRyxxQkFBcUIsR0FBRSw2QkFBNkIsa0JBQWtCLENBQUMsR0FBRTtBQUNuTyxXQUFLLGtCQUFrQixpQ0FBZ0MsS0FBSztBQUM1RCxjQUFRLElBQUksZ0NBQWdDO0FBQUEsSUFDN0M7QUFDQSxRQUFJLEtBQUssa0JBQWtCLGdDQUFnQyxLQUFLLFFBQVEsZ0JBQWdCLE9BQU8sT0FBTyxLQUFLLGlCQUFpQiw4QkFBOEIsR0FBRyxxQkFBcUIsR0FBRSw2QkFBNkIsbUJBQW1CLENBQUMsR0FBRTtBQUN0TyxXQUFLLGtCQUFrQixrQ0FBaUMsS0FBSztBQUM3RCxjQUFRLElBQUksaUNBQWlDO0FBQUEsSUFDOUM7QUFBQSxFQUVEO0FBQUEsRUFHQSxNQUFNLGdDQUErQjtBQUNwQyxRQUFJLDJCQUEyQixLQUFLLGlCQUFpQix1QkFBdUI7QUFDdEUsUUFBSSwyQkFBMkIsR0FBRTtBQUN0QztBQUNBLFdBQUssaUJBQWlCLHlCQUF5Qix3QkFBd0I7QUFDdkUsWUFBTSxLQUFLLGFBQWE7QUFFeEIsVUFBRyw0QkFBNEIsR0FBRTtBQUVoQyxjQUFNLEtBQUssaUJBQWlCLEtBQUssaUJBQWlCLGdCQUFnQixDQUFDO0FBQ25FLGdCQUFRLElBQUksR0FBRyxpREFBaUQ7QUFBQSxNQUNqRSxXQUFXLDRCQUE0QixHQUFHO0FBQ3pDLGFBQUssc0JBQXNCLDBCQUEwQjtBQUNyRCxjQUFNLEtBQUssYUFBYTtBQUN4QixjQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQ3JELGNBQU0sS0FBSyxpQkFBaUIseUJBQXdCLG1DQUFtQztBQUN2RixjQUFNLFVBQVUsaUNBQWlDLDJCQUEyQixLQUFLLGlCQUFpQixvQkFBb0IsSUFBSSxLQUFLLGlCQUFpQixlQUFlLEVBQUU7QUFDakssZ0JBQVEsSUFBSSw0QkFBNEIscUNBQXFDO0FBQzdFLFlBQUksd0JBQU8sU0FBUSxHQUFJO0FBQ3ZCLGdCQUFRLElBQUksT0FBTztBQUFBLE1BQ3BCLE9BQU87QUFFTixnQkFBUSxJQUFJLEdBQUcsaURBQWlEO0FBQUEsTUFDakU7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBR0EsTUFBTSxpQ0FBZ0M7QUFDckMsUUFBRyxlQUFlLE9BQU8sT0FBTyxLQUFLLGlCQUFpQix3QkFBd0IsR0FBRyxZQUFZLENBQUMsR0FBRTtBQUMvRixZQUFNLEtBQUssa0NBQWtDO0FBQUEsSUFDOUMsV0FBVyxVQUFVLE9BQU8sT0FBTyxLQUFLLGlCQUFpQix3QkFBd0IsR0FBRyxZQUFZLENBQUMsR0FBRTtBQUVsRyxjQUFRLElBQUksOENBQThDO0FBQUEsSUFDM0QsT0FBTztBQUNOLFdBQUssaUJBQWlCLDBCQUEwQixPQUFPLE9BQU8sRUFBRSxPQUFPLFlBQVksQ0FBQztBQUNwRixXQUFLLGlCQUFpQiwwQkFBMEIsQ0FBQztBQUNqRCxZQUFNLEtBQUssYUFBYTtBQUFBLElBQ3pCO0FBQUEsRUFDRDtBQUFBLEVBR0EsTUFBYyxvQ0FBb0M7QUFDakQsUUFBSSw0QkFBNEIsS0FBSyxpQkFBaUIsd0JBQXdCO0FBQzlFLFFBQUksNEJBQTRCLEdBQUc7QUFDbEM7QUFDQSxXQUFLLGlCQUFpQiwwQkFBMEIsT0FBTyxPQUFPLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDcEYsV0FBSyxpQkFBaUIsMEJBQTBCLHlCQUF5QjtBQUN6RSxZQUFNLEtBQUssYUFBYTtBQUV4QixZQUFNLEtBQUssc0NBQXNDLHlCQUF5QjtBQUFBLElBQzNFO0FBQUEsRUFDRDtBQUFBLEVBR0EsTUFBYyxzQ0FBc0MsMkJBQW1DO0FBQ3RGLFFBQUksNkJBQTZCLEdBQUc7QUFFbkMsWUFBTSxLQUFLLGlCQUFpQixLQUFLLGlCQUFpQixnQkFBZ0IsQ0FBQztBQUNuRSxjQUFRLElBQUksR0FBRyx1REFBdUQ7QUFBQSxJQUN2RSxXQUFXLDZCQUE2QixHQUFHO0FBQzFDLFdBQUssc0JBQXNCLDJCQUEyQjtBQUN0RCxZQUFNLEtBQUssYUFBYTtBQUN4QixZQUFNLEtBQUssZ0JBQWdCLEtBQUsscUJBQXFCO0FBQ3JELFlBQU0sS0FBSyxpQkFBaUIsMEJBQTBCLDJDQUEyQztBQUNqRyxjQUFRLElBQUksNkJBQTZCLGlEQUFpRDtBQUMxRixZQUFNLFVBQVUsZ0NBQWdDLDRCQUE0QixLQUFLLGlCQUFpQixvQkFBb0IsSUFBSSxLQUFLLGlCQUFpQixlQUFlLEVBQUU7QUFDakssVUFBSSx3QkFBTyxTQUFRLEdBQUk7QUFDdkIsY0FBUSxJQUFJLE9BQU87QUFBQSxJQUNwQixPQUFPO0FBRU4sY0FBUSxJQUFJLEdBQUcsdURBQXVEO0FBQUEsSUFDdkU7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLGdCQUFnQixXQUEyQjtBQUNoRCxVQUFNLGVBQWUsa0JBQWtCLEtBQUssaUJBQWlCLGNBQWMsQ0FBQztBQUM1RSxVQUFNLHNCQUFzQixLQUFLLGlCQUFpQixjQUFjLElBQUksYUFBYSxXQUFTLGFBQWEsYUFBYSxhQUFhLFVBQVE7QUFDekksVUFBTSxxQkFBcUI7QUFDM0IsVUFBTSxZQUFZLEtBQUssTUFBTSxxQkFBcUIsa0JBQWtCO0FBQ3BFLFVBQU0sZ0JBQWdCLEtBQUssaUJBQWlCLGVBQWU7QUFDM0QsY0FBVSxRQUFRLGtCQUFXLEtBQUssaUJBQWlCLGFBQWEsT0FBTyxLQUFLLGtCQUFrQixvQkFBb0IsU0FBUyxjQUFPLGdCQUFnQixLQUFLLHFCQUFxQixHQUFHO0FBQUEsRUFDaEw7QUFBQSxFQUdRLHVCQUFzQjtBQUM3QixRQUFJLFlBQVk7QUFDaEIsUUFBRyxLQUFLLGlCQUFpQix1QkFBdUIsS0FBRyxHQUFFO0FBQ3BELGtCQUFZO0FBQUEsSUFDYixXQUFVLEtBQUssa0JBQWtCLG1CQUFtQixHQUFFO0FBQ3JELGtCQUFZO0FBQUEsSUFDYixXQUFVLENBQUMsS0FBSyxrQkFBa0IsbUJBQW1CLEdBQUU7QUFDdEQsa0JBQVk7QUFBQSxJQUNiO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUdRLGtCQUFrQixvQkFBNEIsV0FBbUI7QUFDeEUsUUFBSSxjQUFjO0FBQ2xCLGFBQVNDLEtBQUksR0FBR0EsTUFBSyxvQkFBb0JBLE1BQUs7QUFDN0MsVUFBSUEsTUFBSyxXQUFXO0FBQ25CLHVCQUFlO0FBQUEsTUFDaEIsT0FBTztBQUNOLHVCQUFlO0FBQUEsTUFDaEI7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVBLE1BQU0sZUFBZTtBQUNwQixTQUFLLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxpQkFBaUIsTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUN4RSxZQUFRLElBQUksZ0JBQWdCO0FBQUEsRUFDN0I7QUFBQSxFQUdBLE1BQU0sZUFBZTtBQUNwQixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNsQztBQUFBLEVBR0EsTUFBTSxpQkFBaUIsYUFBcUIsUUFBaUM7QUFDNUUsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxnQkFBZ0IsS0FBSyxpQkFBaUIsZUFBZTtBQUN6RCxRQUFJLGlDQUFpQztBQUNyQyxRQUFJLGlDQUFpQztBQUNyQyxRQUFJLDJCQUEyQjtBQUMvQixRQUFJLG1DQUFtQztBQUN2QyxRQUFJLDZCQUE2QjtBQUNqQyxRQUFJLDBCQUEwQjtBQUM5QixRQUFJLDhCQUE4QjtBQUNsQyxRQUFJLGdDQUFnQztBQUNwQyxRQUFJLGlDQUFpQztBQUVyQyxRQUFJLEtBQUssa0JBQWtCLG1CQUFtQixHQUFFO0FBQy9DLHNCQUFnQixLQUFLLGlCQUFpQixvQkFBb0I7QUFBQSxJQUMzRDtBQUNBLFFBQUksS0FBSyxrQkFBa0IsZ0NBQWdDLEdBQUU7QUFDNUQsdUNBQWlDO0FBQUEsSUFDbEM7QUFDQSxRQUFJLEtBQUssa0JBQWtCLGdDQUFnQyxHQUFFO0FBQzVELHVDQUFpQztBQUFBLElBQ2xDO0FBQ0EsUUFBSSxLQUFLLGtCQUFrQiwwQkFBMEIsR0FBRTtBQUN0RCxpQ0FBMkI7QUFBQSxJQUM1QjtBQUNBLFFBQUksS0FBSyxrQkFBa0Isa0NBQWtDLE1BQU8sVUFBVSxzQkFBc0IsVUFBVSxvQkFBb0IsVUFBVSx5QkFBeUIsVUFBVSxxQkFBcUIsVUFBVSxzQkFBc0IsVUFBVSx5Q0FBd0M7QUFDclIseUNBQW1DO0FBQUEsSUFDcEM7QUFDQSxRQUFJLEtBQUssa0JBQWtCLDRCQUE0QixNQUFNLFVBQVUscUJBQXFCLFVBQVUscUJBQW9CO0FBQ3pILG1DQUE2QjtBQUFBLElBQzlCO0FBQ0EsUUFBSSxLQUFLLGtCQUFrQix5QkFBeUIsS0FBSyxVQUFVLGtCQUFpQjtBQUNuRixnQ0FBMEI7QUFBQSxJQUMzQjtBQUNBLFFBQUksS0FBSyxrQkFBa0IsNkJBQTZCLEtBQUssVUFBVSx1QkFBc0I7QUFDNUYsb0NBQThCO0FBQUEsSUFDL0I7QUFDQSxRQUFJLEtBQUssa0JBQWtCLCtCQUErQixNQUFNLFVBQVUscUJBQXFCLFVBQVUscUJBQW9CO0FBQzVILHNDQUFnQztBQUFBLElBQ2pDO0FBQ0EsUUFBSSxLQUFLLGtCQUFrQixnQ0FBZ0MsR0FBRTtBQUM1RCx1Q0FBaUM7QUFBQSxJQUNsQztBQUVBLHVCQUFtQixlQUFlLGdCQUFnQixnQkFBZ0IsaUNBQWlDLGlDQUFpQywyQkFBMkIsbUNBQW1DLDZCQUE2QiwwQkFBMEIsOEJBQThCLGdDQUFnQztBQUN2VCxTQUFLLGlCQUFpQixnQkFBZ0IsbUJBQW1CLEtBQUssaUJBQWlCLGNBQWMsQ0FBQztBQUc5RixXQUFPLEtBQUssaUJBQWlCLEtBQUssaUJBQWlCLGdCQUFnQixDQUFDO0FBQUEsRUFDckU7QUFBQSxFQUVBLE1BQU0sc0JBQXNCLGVBQXFCO0FBQ2hELFFBQUksbUJBQW1CLFlBQVksS0FBSyxpQkFBaUIsZUFBZSxJQUFJLGVBQWUsUUFBUSxDQUFDLENBQUM7QUFDckcsUUFBRyxtQkFBbUIsSUFBRztBQUN4Qix5QkFBbUI7QUFBQSxJQUNwQjtBQUNBLFlBQVEsSUFBSSxxQkFBcUIsa0JBQWtCO0FBRW5ELFNBQUssaUJBQWlCLGlCQUFpQixnQkFBZ0I7QUFDdkQsU0FBSyxrQkFBa0IscUJBQXFCLElBQUk7QUFBQSxFQUloRDtBQUFBLEVBR0QsTUFBTSxzQkFBc0IsZUFBcUI7QUFDaEQsUUFBSSxtQkFBbUIsWUFBWSxLQUFLLGlCQUFpQixlQUFlLElBQUksZ0JBQWdCLHVCQUF1QixRQUFRLENBQUMsQ0FBQztBQUM3SCxTQUFLLGlCQUFpQixpQkFBaUIsZ0JBQWdCO0FBQ3ZELFFBQUksbUJBQW1CLEdBQUU7QUFDeEIseUJBQW1CO0FBQUEsSUFDcEI7QUFDQSxTQUFLLGlCQUFpQixpQkFBaUIsZ0JBQWdCO0FBQ3ZELFNBQUssa0JBQWtCLHFCQUFxQixLQUFLO0FBQUEsRUFFbEQ7QUFBQSxFQUdBLE1BQU0saUJBQWlCLGdCQUF5QztBQUMvRCxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RCxhQUFPO0FBQUEsSUFDUjtBQUNBLFVBQU0sT0FBTztBQUViLFVBQU0sVUFBVSxNQUFNLElBQUksTUFBTSxLQUFLLElBQUk7QUFDekMsUUFBSSwwQkFBeUM7QUFDN0MsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLGFBQTRCO0FBQ2hDLFFBQUksYUFBNEI7QUFDaEMsUUFBSSxvQkFBbUM7QUFDdkMsUUFBSSxzQkFBcUM7QUFDekMsUUFBSSwwQkFBeUM7QUFDN0MsUUFBSSw0QkFBMkM7QUFDL0MsUUFBSSwyQkFBMEM7QUFDOUMsUUFBSSw2QkFBNEM7QUFDaEQsUUFBSSxvQkFBbUM7QUFDdkMsUUFBSSxzQkFBcUM7QUFFekMsVUFBTSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQ2hDLGFBQVNBLEtBQUksR0FBR0EsS0FBSSxNQUFNLFFBQVFBLE1BQUs7QUFDdEMsWUFBTSxPQUFPLE1BQU1BLEVBQUMsRUFBRSxLQUFLO0FBQzNCLFVBQUksU0FBUyxtQkFBbUI7QUFDL0IsWUFBSSw0QkFBNEIsTUFBTTtBQUNyQyxvQ0FBMEJBO0FBQUEsUUFDM0I7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLHdCQUF3QjtBQUNwQyxZQUFJLGVBQWUsTUFBTTtBQUN4Qix1QkFBYUE7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUNBLFVBQUksU0FBUyx5QkFBeUI7QUFDckMsWUFBSSxlQUFlLE1BQU07QUFDeEIsdUJBQWFBO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFDQSxVQUFJLFNBQVMsa0JBQWtCO0FBQzlCLFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFVBQU0sWUFBWSxLQUFLLGlCQUFpQixjQUFjO0FBRXRELFVBQU0sUUFBUSxrQkFBa0IsU0FBUztBQUN6QyxRQUFJLGNBQWMsS0FBSyxpQkFBaUIsZ0JBQWdCO0FBQ3hELFFBQUksZUFBZTtBQUNuQixRQUFJLEtBQUssaUJBQWlCLGFBQWEsSUFBSSxNQUFNLE9BQU07QUFFdEQsVUFBSSx3QkFBTyxRQUFRLDBDQUEwQyxNQUFNLFVBQVMsR0FBSTtBQUVoRixxQkFBZSxxQkFBcUIsS0FBSyxpQkFBaUIsYUFBYSxHQUFHLE1BQU0sS0FBSztBQUNyRixXQUFLLGlCQUFpQixlQUFlLE1BQU0sS0FBSztBQUNoRCxvQkFBYyxNQUFNO0FBQ3BCLFdBQUssaUJBQWlCLGtCQUFrQixNQUFNLFVBQVU7QUFBQSxJQUV6RDtBQUVBLFVBQU0saUJBQWlCLGNBQWM7QUFDckMsVUFBTSxrQkFBa0Isc0JBQXNCLE1BQU0sUUFBUSxzQkFBc0IsWUFBWSx3SEFBd0gsWUFBWSwwREFBMEQsaUJBQWlCLGNBQWMsTUFBTSxTQUFTLGFBQWEsTUFBTSxhQUFhO0FBQzFXLFVBQU0saUJBQWlCLDBCQUEwQiwyQkFBMkIsS0FBSyxpQkFBaUIsb0JBQW9CLElBQUksS0FBSyxpQkFBaUIsZUFBZSxLQUFLLGFBQWEsS0FBSyxpQkFBaUIsdUJBQXVCLElBQUk7QUFDbE8sVUFBTSx3QkFBaUMsSUFBSSxLQUFLLGlCQUFpQix3QkFBd0I7QUFDekYsUUFBSSxrQkFBa0I7QUFDdEIsUUFBRyxVQUFVLE9BQU8sT0FBTyxLQUFLLGlCQUFpQix3QkFBd0IsR0FBRyxZQUFZLENBQUMsR0FBRTtBQUMxRix3QkFBa0IsMkJBQTJCLDRCQUE0QixLQUFLLGlCQUFpQixvQkFBb0IsSUFBSSxLQUFLLGlCQUFpQixlQUFlLEtBQUssa0JBQWtCLEtBQUssaUJBQWlCLHdCQUF3QixJQUFJLHlKQUErSSxLQUFLLGlCQUFpQix3QkFBd0IsSUFBSSwwREFBMEQsd0JBQXdCO0FBQUEsSUFDemYsT0FBTztBQUNOLHdCQUFrQiwyQkFBMkIsNEJBQTRCLEtBQUssaUJBQWlCLG9CQUFvQixJQUFJLEtBQUssaUJBQWlCLGVBQWUsS0FBSyxrQkFBa0IsS0FBSyxpQkFBaUIsd0JBQXdCLElBQUksNklBQTZJLEtBQUssaUJBQWlCLHdCQUF3QixJQUFJLDBEQUEwRCx3QkFBd0I7QUFBQSxJQUN2ZjtBQUVBLFVBQU0sZ0JBQWdCLDhCQUE4QixLQUFLLGlCQUFpQixlQUFlLElBQUk7QUFFN0YsUUFBSSwyQkFBMkIsUUFBUSxjQUFjLFFBQVEsY0FBYyxRQUFRLGNBQWMsTUFBSztBQUNyRyw0QkFBc0IsMEJBQTBCO0FBQ2hELDBCQUFvQiwwQkFBMEI7QUFDOUMsa0NBQTRCLGFBQWEsSUFBSTtBQUM3QyxnQ0FBMEIsYUFBYTtBQUN2QyxtQ0FBNkIsYUFBYSxJQUFHO0FBQzdDLGlDQUEyQixhQUFhLEtBQUk7QUFDNUMsNEJBQXNCLGFBQWEsSUFBSTtBQUN2QywwQkFBb0IsYUFBYTtBQUVqQyxZQUFNLFdBQVcsQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixHQUFHLGlCQUFpQixHQUFHLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUM1RyxZQUFNLFlBQVksQ0FBQyxHQUFHLFNBQVMsTUFBTSxHQUFHLHlCQUF5QixHQUFHLGdCQUFnQixHQUFHLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUM5SCxZQUFNLFlBQVksQ0FBQyxHQUFHLFVBQVUsTUFBTSxHQUFHLDBCQUEwQixHQUFHLGlCQUFpQixHQUFHLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuSSxZQUFNLFlBQVksQ0FBQyxHQUFHLFVBQVUsTUFBTSxHQUFHLG1CQUFtQixHQUFHLGVBQWUsR0FBRyxVQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDbkgsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNsRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQUEsRUFHQSxNQUFNLG1CQUFtQixnQkFBd0IsT0FBYTtBQUM3RCxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxhQUE0QjtBQUNoQyxRQUFJLE1BQXFCO0FBQ3pCLFFBQUksUUFBdUI7QUFDM0IsUUFBSSxPQUFzQjtBQUMxQixRQUFJLFNBQXdCO0FBRTVCLFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNoQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3RDLFlBQU0sT0FBTyxNQUFNQSxFQUFDLEVBQUUsS0FBSztBQUMzQixVQUFJLFNBQVMsaUJBQWlCO0FBQzdCLFlBQUksY0FBYyxNQUFNO0FBQ3ZCLHNCQUFZQTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTLE1BQU0sUUFBUSxRQUFRLE1BQU0sT0FBTyxLQUFJO0FBQ25ELFlBQUksZUFBZSxNQUFNO0FBQ3hCLHVCQUFhQTtBQUFBLFFBQ2Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFFBQUksYUFBYSxRQUFRLGNBQWMsTUFBSztBQUMzQyxZQUFNLFlBQVk7QUFDbEIsY0FBUSxZQUFZO0FBRXBCLGFBQU8sYUFBYTtBQUNwQixlQUFTLGFBQWE7QUFFdEIsWUFBTSxjQUFjLE9BQU8sTUFBTSxPQUFPLFFBQVEsTUFBTSxRQUFRLFNBQVMsTUFBTSxjQUFjLFNBQVMsT0FBTyxPQUFPLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDdkksWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDNUUsWUFBTSxZQUFZLENBQUMsR0FBRyxTQUFTLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxTQUFTLE1BQU0sSUFBSSxDQUFDO0FBQ3hFLFlBQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQUEsSUFFbEQ7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLHVCQUF1QixnQkFBd0IsT0FBYTtBQUNqRSxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxNQUFxQjtBQUN6QixRQUFJLFFBQXVCO0FBRTNCLFVBQU0sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNoQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3RDLFlBQU0sT0FBTyxNQUFNQSxFQUFDLEVBQUUsS0FBSztBQUMzQixVQUFJLFNBQVMsaUJBQWlCO0FBQzdCLFlBQUksY0FBYyxNQUFNO0FBQ3ZCLHNCQUFZQTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUNBLFFBQUksYUFBYSxNQUFNO0FBQ3RCLFlBQU0sWUFBWTtBQUNsQixjQUFRLFlBQVk7QUFFcEIsWUFBTSxjQUFjLE9BQU8sTUFBTSxPQUFPLFdBQVcsTUFBTSxjQUFjLFNBQVMsT0FBTyxPQUFPLEVBQUUsT0FBTyxRQUFRLElBQUk7QUFDbkgsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsYUFBYSxHQUFHLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFDNUUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFDaEQsY0FBUSxJQUFJLGdCQUFnQixhQUFhO0FBQUEsSUFDMUM7QUFBQSxFQUNEO0FBQUEsRUFHQSxNQUFNLGdDQUFnQyxnQkFBd0IsT0FBYztBQUMzRSxVQUFNLGVBQWUsSUFBSSxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQjtBQUMzRSxRQUFJLGdCQUFnQixNQUFNO0FBQ3pCLGNBQVEsSUFBSSxRQUFRLGtDQUFrQztBQUN0RDtBQUFBLElBQ0Q7QUFDQSxVQUFNLE9BQU87QUFFYixVQUFNLFVBQVUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJO0FBQ3pDLFFBQUksWUFBMkI7QUFDL0IsUUFBSSxhQUE0QjtBQUVoQyxVQUFNLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDaEMsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUUEsTUFBSztBQUN0QyxZQUFNLE9BQU8sTUFBTUEsRUFBQyxFQUFFLEtBQUs7QUFDM0IsVUFBSSxTQUFTLG9CQUFvQjtBQUNoQyxZQUFJLGNBQWMsTUFBTTtBQUN2QixzQkFBWUE7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUNBLFVBQUksYUFBYSxRQUFRLGNBQWMsTUFBSztBQUUzQyxjQUFNLGFBQWE7QUFFbkIsY0FBTUMsU0FBUSxLQUFLLE1BQU0sVUFBVTtBQUVuQyxZQUFHQSxRQUFNO0FBQ1IsZ0JBQU0sY0FBYyxTQUFTQSxPQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3pDLGNBQUksY0FBYyxPQUFPO0FBQ3hCLHlCQUFhRDtBQUFBLFVBQ2Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFDQSxRQUFJLGFBQWEsUUFBUSxjQUFjLE1BQUs7QUFDM0MsWUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFDOUUsWUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNqRDtBQUFBLEVBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXNEQSxNQUFNLGdCQUFnQixVQUEyQjtBQUNoRCxhQUFTLEtBQUssQ0FBQyxXQUFtQjtBQUNqQyxVQUFHLFFBQU87QUFDVCxjQUFNLFFBQWdCLGlCQUFpQixLQUFLLGlCQUFpQixhQUFhLEdBQUcsS0FBSztBQUNsRixZQUFJLHdCQUFPLHNCQUFzQixNQUFNLGdCQUFnQixNQUFNLGVBQWMsR0FBSTtBQUMvRSxnQkFBUSxJQUFJLHNCQUFzQixNQUFNLGdCQUFnQixNQUFNLGFBQWE7QUFDM0UsYUFBSyxtQkFBbUIsS0FBSyxpQkFBaUIsZ0JBQWdCLEdBQUcsS0FBSztBQUN0RSxhQUFLLGtCQUFrQixxQkFBcUIsS0FBSztBQUNqRCxhQUFLLGlCQUFpQixzQkFBc0IsQ0FBQztBQUFBLE1BRTlDO0FBQUEsSUFDRCxDQUFDO0FBQUEsRUFDRjtBQUFBLEVBR0EsTUFBTSw0QkFBNEI7QUFDakMsVUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLO0FBQ3ZCLFVBQU0sZUFBZSxNQUFNLGdCQUFnQixLQUFLLEtBQUssS0FBSyxpQkFBaUIsYUFBYSxHQUFHLEtBQUssaUJBQWlCLGVBQWUsQ0FBQztBQUNqSSxlQUFXLFlBQVksYUFBYSxLQUFLLEdBQUc7QUFDM0MsWUFBTSxRQUFRLE1BQU0sU0FBUztBQUM3QixZQUFNLE9BQU8sTUFBTSxLQUFLLENBQUFFLFVBQVFBLE1BQUssYUFBYSxRQUFRO0FBQzFELFVBQUksQ0FBQyxNQUFNO0FBQ1YsZ0JBQVEsS0FBSyxRQUFRLHFCQUFxQjtBQUMxQztBQUFBLE1BQ0Q7QUFDQSxjQUFRLElBQUksbUJBQW1CLFVBQVU7QUFDekMsVUFBSTtBQUNILGNBQU0sS0FBSyxJQUFJLFlBQVksbUJBQW1CLE1BQU0sQ0FBQyxnQkFBZ0I7QUFDcEUsaUJBQU8sWUFBWSxhQUFhO0FBQ2hDLGlCQUFPLFlBQVksbUJBQW1CO0FBQ3RDLGlCQUFPLFlBQVksY0FBYztBQUNqQyxpQkFBTyxZQUFZLGVBQWU7QUFDbEMsaUJBQU8sWUFBWSxvQ0FBb0M7QUFDdkQsaUJBQU8sWUFBWSxlQUFlO0FBQUEsUUFDbkMsQ0FBQztBQUFBLE1BQ0YsU0FBU0gsSUFBUDtBQUNELGFBQUlBLE1BQUEsZ0JBQUFBLEdBQUcsVUFBUyxrQkFBa0I7QUFDakMsZ0JBQU0sZUFBZSxpREFBaURBLEdBQUU7QUFDeEUsY0FBSSx3QkFBTyxjQUFjLEdBQUk7QUFDN0Isa0JBQVEsTUFBTSxZQUFZO0FBQUEsUUFDM0I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUdBLE1BQU0sb0JBQW9CLGNBQXNDO0FBQy9ELFFBQUksaUJBQWlCO0FBQ3JCLGFBQVNDLEtBQUksY0FBY0EsS0FBSSxLQUFLQSxNQUFJO0FBQ3ZDLFlBQU0sUUFBZ0IsaUJBQWlCQSxJQUFHLElBQUk7QUFFOUMsWUFBTSxhQUFhO0FBRW5CLFlBQU1DLFNBQVEsTUFBTSxNQUFNLE1BQU0sVUFBVTtBQUMxQyxVQUFHQSxRQUFNO0FBQ1IsY0FBTSxjQUFjLFNBQVNBLE9BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDekMsWUFBSSxjQUFjLGdCQUFnQixrQkFBa0IsR0FBSTtBQUN2RCwyQkFBaUI7QUFBQSxRQUNsQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUdBLE1BQU0saUJBQWtDO0FBQ3ZDLFVBQU0sY0FBYyxNQUFNLEtBQUssb0JBQW9CLEtBQUssaUJBQWlCLGFBQWEsQ0FBQztBQUN2RixVQUFNLHNCQUFzQixxQkFBcUIsV0FBVztBQUk1RCxVQUFNLGdCQUFnQixLQUFLLE9BQU8sc0JBQXNCLEtBQUssaUJBQWlCLGNBQWMsS0FBRyxLQUFHLEdBQUc7QUFDckcsU0FBSyxpQkFBaUIsc0JBQXNCLGFBQWE7QUFDekQsU0FBSyxrQkFBa0IscUJBQXFCLElBQUk7QUFHaEQsV0FBTztBQUFBLEVBQ1I7QUFBQSxFQUdBLE1BQU0saUJBQWlCO0FBbnFDeEI7QUFvcUNFLFVBQU0sZUFBZSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxpQkFBaUIsZ0JBQWdCLE1BQU07QUFDcEcsUUFBSSxjQUFhO0FBQ2hCLFlBQU0sZUFBYSxVQUFLLElBQUksVUFBVSxjQUFjLE1BQWpDLG1CQUFvQyxTQUFRO0FBQy9ELFlBQU0sSUFBSSxVQUFVLGFBQWEsYUFBYSxNQUFNLFVBQVU7QUFBQSxJQUMvRCxPQUFPO0FBQ04sY0FBUSxJQUFJLG1DQUFtQztBQUFBLElBQ2hEO0FBQUEsRUFDRDtBQUFBLEVBR0EsYUFBYSxLQUFhLEtBQWE7QUFDdEMsV0FBTyxLQUFLLE1BQU0sS0FBSyxPQUFPLEtBQUssTUFBTSxNQUFNLEVBQUUsSUFBSTtBQUFBLEVBQ3BEO0FBQUEsRUFFRixNQUFNLG1CQUFtQixRQUFlLEtBQVksS0FBWTtBQUMvRCxRQUFJLHlCQUF5QixDQUFDO0FBQzlCLFFBQUksS0FBSyxPQUFPLElBQUksUUFBUTtBQUMzQixZQUFNLGVBQWUsS0FBSyxhQUFhLEtBQUksR0FBRztBQUM5QyxlQUFTRCxLQUFFLEdBQUVBLE1BQUcsY0FBYUEsTUFBSTtBQUNoQyxjQUFNLHdCQUF3QixLQUFLLGFBQWEsR0FBRyxrQ0FBa0MsU0FBTyxDQUFDO0FBQzdGLGNBQU0sbUJBQW1CLFNBQVMscUJBQXFCO0FBQ3ZELFlBQUksZUFBZSxLQUFLLGlCQUFpQixpQkFBaUIsT0FBTztBQUNqRSwrQkFBdUIsS0FBSyxpQkFBaUIsSUFBSTtBQUdqRCxZQUFJLGlCQUFpQixRQUFRLE9BQU8saUJBQWlCLFVBQVU7QUFDOUQsZUFBSyxpQkFBaUIsaUJBQWlCLFNBQVMsZUFBZSxDQUFDO0FBQ2hFLGVBQUssYUFBYTtBQUFBLFFBRW5CLE9BQU87QUFDTixrQkFBUSxNQUFNLDZCQUE2QixpQkFBaUIsU0FBUztBQUFBLFFBQ3RFO0FBQUEsTUFDRDtBQUNBLGNBQVEsSUFBSSxlQUFlLG1CQUFtQixzQkFBc0IsR0FBRztBQUN2RSxVQUFJLHdCQUFPLGNBQWMsbUJBQW1CLHNCQUFzQixLQUFJLEdBQUk7QUFBQSxJQUMzRSxPQUFPO0FBQ04sY0FBUSxJQUFJLDJDQUEyQztBQUFBLElBQ3hEO0FBQUEsRUFFRDtBQUdEO0FBa0JBLFNBQVMsbUJBQW1CLEtBQXVCO0FBQy9DLE1BQUksSUFBSSxXQUFXLEdBQUc7QUFDbEIsV0FBTyxJQUFJLENBQUM7QUFBQSxFQUNoQixPQUFPO0FBQ0gsVUFBTSxlQUF1QyxDQUFDO0FBRTlDLFFBQUksUUFBUSxVQUFRO0FBQ2hCLFVBQUksYUFBYSxJQUFJLEdBQUc7QUFDcEIscUJBQWEsSUFBSTtBQUFBLE1BQ3JCLE9BQU87QUFDSCxxQkFBYSxJQUFJLElBQUk7QUFBQSxNQUN6QjtBQUFBLElBQ0osQ0FBQztBQUVELFVBQU0sY0FBd0IsQ0FBQztBQUUvQixlQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFlBQVksR0FBRztBQUNyRCxVQUFJLFVBQVUsR0FBRztBQUNiLG9CQUFZLEtBQUssR0FBRztBQUFBLE1BQ3hCLE9BQU87QUFDSCxvQkFBWSxLQUFLLEdBQUcsV0FBVyxLQUFLO0FBQUEsTUFDeEM7QUFBQSxJQUNKO0FBRUEsV0FBTyxZQUFZLEtBQUssSUFBSTtBQUFBLEVBQ2hDO0FBQ0o7QUFHQSxTQUFTLDZCQUE2QixnQkFBd0I7QUFDN0QsYUFBVyxXQUFXLGdCQUFnQjtBQUNyQyxRQUFJLFFBQVEsWUFBWSxnQkFBZ0I7QUFDdkMsYUFBTyxRQUFRO0FBQUEsSUFDaEI7QUFBQSxFQUNEO0FBQ0EsU0FBTztBQUNSO0FBR0EsU0FBUyxVQUFVLFdBQTRCO0FBQzlDLFFBQU0sY0FBYyxPQUFPLE9BQU87QUFDbEMsU0FBTyxZQUFZLE9BQU8sV0FBVyxLQUFLO0FBQzNDO0FBR0EsU0FBUyxlQUFlLFdBQTRCO0FBQ25ELFFBQU0sc0JBQXNCLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxLQUFLO0FBQzdELFNBQU8sVUFBVSxPQUFPLHFCQUFxQixLQUFLO0FBQ25EO0FBR08sU0FBUyxnQkFBZ0IsV0FBbUIsZUFBZ0M7QUFDL0UsUUFBTSxhQUFhLE9BQU8sT0FBTyxFQUFFLFNBQVMsZUFBZSxTQUFTO0FBQ3ZFLFNBQU8sVUFBVSxlQUFlLFVBQVU7QUFDM0M7QUFHTyxTQUFTLHdCQUF3QixXQUFtQixlQUErQjtBQUN0RixRQUFNLGNBQWMsT0FBTyxPQUFPO0FBQ2xDLFFBQU0sYUFBYSxVQUFVLE1BQU0sRUFBRSxJQUFJLGVBQWUsU0FBUztBQUVqRSxNQUFJLFdBQVcsUUFBUSxXQUFXLEdBQUc7QUFDakMsVUFBTSxpQkFBaUIsV0FBVyxLQUFLLGFBQWEsT0FBTztBQUMzRCxXQUFPO0FBQUEsRUFDWCxPQUFPO0FBQ0gsV0FBTztBQUFBLEVBQ1g7QUFDSjtBQUdBLGVBQWUsaUJBQWlCRyxNQUFVLFVBQWlDO0FBRTFFLFFBQU0sZUFBZUEsS0FBSSxNQUFNLHNCQUFzQixHQUFHLGFBQWE7QUFDckUsTUFBSSx3QkFBd0Isd0JBQU87QUFDbEMsWUFBUSxJQUFJLFFBQVEsNEJBQTRCO0FBQ2hEO0FBQUEsRUFDRDtBQUVBLFFBQU1BLEtBQUksTUFBTSxPQUFPLEdBQUcsZUFBZSxpQkFBaUI7QUFFM0Q7QUFHQSxlQUFlLHFCQUFxQixRQUFnQixRQUFnQjtBQUNuRSxRQUFNLGFBQWEsS0FBSyxJQUFJLFVBQVUsb0JBQW9CLDZCQUFZO0FBRXRFLE1BQUksQ0FBQyxZQUFZO0FBQ2hCLFlBQVEsTUFBTSxnQ0FBZ0M7QUFDOUM7QUFBQSxFQUNEO0FBRUEsUUFBTSxTQUFTLFdBQVc7QUFDMUIsUUFBTSxlQUFlLE9BQU8sYUFBYTtBQUV6QyxNQUFJLENBQUMsY0FBYztBQUNsQixZQUFRLE1BQU0sc0VBQXNFO0FBQ3BGO0FBQUEsRUFDRDtBQUVBLE1BQUksZUFBZSxhQUFhLFdBQVcsUUFBUSxrQkFBTTtBQUN6RCxpQkFBZSxhQUFhLFdBQVcsUUFBUSwwQkFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsNEJBQVEsTUFBTTtBQUNyRCxpQkFBZSxhQUFhLFdBQVcsb0JBQVEsTUFBTTtBQUVyRCxTQUFPLGlCQUFpQixZQUFZO0FBQ3JDO0FBRUEsU0FBUyw2QkFBNkIsZUFBdUIsV0FBMkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIkNyeXB0b0pTIiwgIk1hdGgiLCAidW5kZWZpbmVkIiwgImkiLCAiZSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAidW5kZWZpbmVkIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgIk1hdGgiLCAiVCIsICJpIiwgIk0iLCAiSCIsICJhIiwgImIiLCAiYyIsICJkIiwgIngiLCAicyIsICJ0IiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJNIiwgIkgiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImkiLCAidCIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiTWF0aCIsICJIIiwgIksiLCAibiIsICJNIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJoIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJLIiwgImkiLCAiTSIsICJIIiwgIkgyIiwgIkgzIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiTWF0aCIsICJ4IiwgInkiLCAidCIsICJpIiwgIlQiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiTWF0aCIsICJNIiwgImkiLCAiSCIsICJ0IiwgIngiLCAieSIsICJ6IiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJ1bmRlZmluZWQiLCAiQ0JDIiwgImkiLCAiZm9ybWF0IiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiaSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgInVuZGVmaW5lZCIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiZCIsICJpIiwgIngiLCAieDIiLCAidCIsICJNIiwgIlNVQl9NSVhfMCIsICJTVUJfTUlYXzEiLCAiU1VCX01JWF8yIiwgIlNVQl9NSVhfMyIsICJTQk9YIiwgInMyIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIk0iLCAidCIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiUyIsICJpIiwgInQiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiUyIsICJHIiwgIksiLCAiaSIsICJYIiwgIkMiLCAiaTIiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiUyIsICJHIiwgIksiLCAiWCIsICJDIiwgImkiLCAiaTIiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiZ2FtaWZpY2F0aW9uIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAiYXBwIiwgImdhbWlmaWNhdGlvbiIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMveDY0LWNvcmUuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9saWItdHlwZWRhcnJheXMuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtdXRmMTYuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9lbmMtYmFzZTY0LmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvZW5jLWJhc2U2NHVybC5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21kNS5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTEuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyNTYuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEyMjQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGE1MTIuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzODQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9zaGEzLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcmlwZW1kMTYwLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaG1hYy5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL3Bia2RmMi5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2V2cGtkZi5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2NpcGhlci1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvbW9kZS1jZmIuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLWN0ci5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtY3RyLWdsYWRtYW4uanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9tb2RlLW9mYi5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL21vZGUtZWNiLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWFuc2l4OTIzLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWlzbzEwMTI2LmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLWlzbzk3OTcxLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLXplcm9wYWRkaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvcGFkLW5vcGFkZGluZy5qcyIsICJub2RlX21vZHVsZXMvY3J5cHRvLWpzL2Zvcm1hdC1oZXguanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9hZXMuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy90cmlwbGVkZXMuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yYzQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yYWJiaXQuanMiLCAibm9kZV9tb2R1bGVzL2NyeXB0by1qcy9yYWJiaXQtbGVnYWN5LmpzIiwgIm5vZGVfbW9kdWxlcy9jcnlwdG8tanMvaW5kZXguanMiLCAic3JjL21haW4udHMiLCAic3JjL3NldHRpbmdzLnRzIiwgInNyYy9jb25zdGFudHMudHMiLCAic3JjL2VuY3J5cHRpb24udHMiLCAibm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNEYXRlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vdG9EYXRlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vaXNWYWxpZC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vYWRkTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENEYXlPZlllYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9nZXRVVENJU09XZWVrL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvc3RhcnRPZlVUQ1dlZWsvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ1dlZWtZZWFyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2dldFVUQ1dlZWsvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL19saWIvcHJvdGVjdGVkVG9rZW5zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvX2xpYi9idWlsZEZvcm1hdExvbmdGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdExvbmcvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VzbS9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9fbGliL2J1aWxkTG9jYWxpemVGbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL2xvY2FsaXplL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZGF0ZS1mbnMvZXNtL2xvY2FsZS9lbi1VUy9fbGliL21hdGNoL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vbG9jYWxlL2VuLVVTL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vX2xpYi9kZWZhdWx0TG9jYWxlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kYXRlLWZucy9lc20vZm9ybWF0L2luZGV4LmpzIiwgInNyYy9tYWp1cml0eWNhbGN1bGF0aW9uLnRzIiwgInNyYy9iYWRnZXMudHMiLCAic3JjL2xldmVscy50cyIsICJzcmMvcmFuZG9tTm90aWZpY2F0aW9uVGV4dC50cyIsICJzcmMvTW9kYWxJbmZvcm1hdGlvbmJveC50cyIsICJzcmMvTW9kYWxCb29zdGVyLnRzIiwgInNyYy9NdWx0aVNlbGVjdE1vZGFsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0cm9vdC5DcnlwdG9KUyA9IGZhY3RvcnkoKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0LypnbG9iYWxzIHdpbmRvdywgZ2xvYmFsLCByZXF1aXJlKi9cblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblxuXHQgICAgdmFyIGNyeXB0bztcblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBmcm9tIHdpbmRvdyAoQnJvd3Nlcilcblx0ICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gd2luZG93LmNyeXB0bztcblx0ICAgIH1cblxuXHQgICAgLy8gTmF0aXZlIGNyeXB0byBpbiB3ZWIgd29ya2VyIChCcm93c2VyKVxuXHQgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLmNyeXB0bykge1xuXHQgICAgICAgIGNyeXB0byA9IHNlbGYuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGZyb20gd29ya2VyXG5cdCAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMuY3J5cHRvKSB7XG5cdCAgICAgICAgY3J5cHRvID0gZ2xvYmFsVGhpcy5jcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSAoZXhwZXJpbWVudGFsIElFIDExKSBjcnlwdG8gZnJvbSB3aW5kb3cgKEJyb3dzZXIpXG5cdCAgICBpZiAoIWNyeXB0byAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubXNDcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSB3aW5kb3cubXNDcnlwdG87XG5cdCAgICB9XG5cblx0ICAgIC8vIE5hdGl2ZSBjcnlwdG8gZnJvbSBnbG9iYWwgKE5vZGVKUylcblx0ICAgIGlmICghY3J5cHRvICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbC5jcnlwdG8pIHtcblx0ICAgICAgICBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvO1xuXHQgICAgfVxuXG5cdCAgICAvLyBOYXRpdmUgY3J5cHRvIGltcG9ydCB2aWEgcmVxdWlyZSAoTm9kZUpTKVxuXHQgICAgaWYgKCFjcnlwdG8gJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblx0ICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cdCAgICB9XG5cblx0ICAgIC8qXG5cdCAgICAgKiBDcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3Jcblx0ICAgICAqXG5cdCAgICAgKiBBcyBNYXRoLnJhbmRvbSgpIGlzIGNyeXB0b2dyYXBoaWNhbGx5IG5vdCBzYWZlIHRvIHVzZVxuXHQgICAgICovXG5cdCAgICB2YXIgY3J5cHRvU2VjdXJlUmFuZG9tSW50ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChjcnlwdG8pIHtcblx0ICAgICAgICAgICAgLy8gVXNlIGdldFJhbmRvbVZhbHVlcyBtZXRob2QgKEJyb3dzZXIpXG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdO1xuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gVXNlIHJhbmRvbUJ5dGVzIG1ldGhvZCAoTm9kZUpTKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGNyeXB0by5yYW5kb21CeXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCk7XG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4nKTtcblx0ICAgIH07XG5cblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsbCBvZiBPYmplY3QuY3JlYXRlXG5cblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge31cblxuXHQgICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG5cdCAgICAgICAgICAgIHZhciBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgIEYucHJvdG90eXBlID0gb2JqO1xuXG5cdCAgICAgICAgICAgIHN1YnR5cGUgPSBuZXcgRigpO1xuXG5cdCAgICAgICAgICAgIEYucHJvdG90eXBlID0gbnVsbDtcblxuXHQgICAgICAgICAgICByZXR1cm4gc3VidHlwZTtcblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhhdFNpZ0J5dGVzOyBqICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGopID4+PiAyXSA9IHRoYXRXb3Jkc1tqID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5CeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKGNyeXB0b1NlY3VyZVJhbmRvbUludCgpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgWDMyV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXG5cdCAgICAvKipcblx0ICAgICAqIHg2NCBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3g2NCA9IEMueDY0ID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQSA2NC1iaXQgd29yZC5cblx0ICAgICAqL1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCA2NC1iaXQgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoIFRoZSBoaWdoIDMyIGJpdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxvdyBUaGUgbG93IDMyIGJpdHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4NjRXb3JkID0gQ3J5cHRvSlMueDY0LldvcmQuY3JlYXRlKDB4MDAwMTAyMDMsIDB4MDQwNTA2MDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChoaWdoLCBsb3cpIHtcblx0ICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaDtcblx0ICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3c7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBOT1RzIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBuZWdhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG5lZ2F0ZWQgPSB4NjRXb3JkLm5vdCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIG5vdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IH50aGlzLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB+dGhpcy5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEJpdHdpc2UgQU5EcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIEFORCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBBTkRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhbmRlZCA9IHg2NFdvcmQuYW5kKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhbmQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoICYgd29yZC5oaWdoO1xuXHQgICAgICAgICAgICAvLyB2YXIgbG93ID0gdGhpcy5sb3cgJiB3b3JkLmxvdztcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQml0d2lzZSBPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBPUiB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBPUmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG9yZWQgPSB4NjRXb3JkLm9yKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBvcjogZnVuY3Rpb24gKHdvcmQpIHtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSB0aGlzLmhpZ2ggfCB3b3JkLmhpZ2g7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSB0aGlzLmxvdyB8IHdvcmQubG93O1xuXG5cdCAgICAgICAgICAgIC8vIHJldHVybiBYNjRXb3JkLmNyZWF0ZShoaWdoLCBsb3cpO1xuXHQgICAgICAgIC8vIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBCaXR3aXNlIFhPUnMgdGhpcyB3b3JkIHdpdGggdGhlIHBhc3NlZCB3b3JkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtYNjRXb3JkfSB3b3JkIFRoZSB4NjQtV29yZCB0byBYT1Igd2l0aCB0aGlzIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgWE9SaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgeG9yZWQgPSB4NjRXb3JkLnhvcihhbm90aGVyWDY0V29yZCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgLy8geG9yOiBmdW5jdGlvbiAod29yZCkge1xuXHQgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMuaGlnaCBeIHdvcmQuaGlnaDtcblx0ICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IF4gd29yZC5sb3c7XG5cblx0ICAgICAgICAgICAgLy8gcmV0dXJuIFg2NFdvcmQuY3JlYXRlKGhpZ2gsIGxvdyk7XG5cdCAgICAgICAgLy8gfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFNoaWZ0cyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRMKDI1KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBzaGlmdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIGlmIChuIDwgMzIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gKHRoaXMuaGlnaCA8PCBuKSB8ICh0aGlzLmxvdyA+Pj4gKDMyIC0gbikpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMubG93IDw8IG47XG5cdCAgICAgICAgICAgIC8vIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IHRoaXMubG93IDw8IChuIC0gMzIpO1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogU2hpZnRzIHRoaXMgd29yZCBuIGJpdHMgdG8gdGhlIHJpZ2h0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7WDY0V29yZH0gQSBuZXcgeDY0LVdvcmQgb2JqZWN0IGFmdGVyIHNoaWZ0aW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc2hpZnRlZCA9IHg2NFdvcmQuc2hpZnRSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHNoaWZ0UjogZnVuY3Rpb24gKG4pIHtcblx0ICAgICAgICAgICAgLy8gaWYgKG4gPCAzMikge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9ICh0aGlzLmxvdyA+Pj4gbikgfCAodGhpcy5oaWdoIDw8ICgzMiAtIG4pKTtcblx0ICAgICAgICAgICAgICAgIC8vIHZhciBoaWdoID0gdGhpcy5oaWdoID4+PiBuO1xuXHQgICAgICAgICAgICAvLyB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gdmFyIGxvdyA9IHRoaXMuaGlnaCA+Pj4gKG4gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAvLyB2YXIgaGlnaCA9IDA7XG5cdCAgICAgICAgICAgIC8vIH1cblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSBsZWZ0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBiaXRzIHRvIHJvdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciByb3RhdGluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHJvdGF0ZWQgPSB4NjRXb3JkLnJvdEwoMjUpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdEw6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0TChuKS5vcih0aGlzLnNoaWZ0Uig2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUm90YXRlcyB0aGlzIHdvcmQgbiBiaXRzIHRvIHRoZSByaWdodC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgYml0cyB0byByb3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkfSBBIG5ldyB4NjQtV29yZCBvYmplY3QgYWZ0ZXIgcm90YXRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciByb3RhdGVkID0geDY0V29yZC5yb3RSKDcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIC8vIHJvdFI6IGZ1bmN0aW9uIChuKSB7XG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLnNoaWZ0UihuKS5vcih0aGlzLnNoaWZ0TCg2NCAtIG4pKTtcblx0ICAgICAgICAvLyB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyB0aGlzIHdvcmQgd2l0aCB0aGUgcGFzc2VkIHdvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1g2NFdvcmR9IHdvcmQgVGhlIHg2NC1Xb3JkIHRvIGFkZCB3aXRoIHRoaXMgd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1g2NFdvcmR9IEEgbmV3IHg2NC1Xb3JkIG9iamVjdCBhZnRlciBhZGRpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBhZGRlZCA9IHg2NFdvcmQuYWRkKGFub3RoZXJYNjRXb3JkKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICAvLyBhZGQ6IGZ1bmN0aW9uICh3b3JkKSB7XG5cdCAgICAgICAgICAgIC8vIHZhciBsb3cgPSAodGhpcy5sb3cgKyB3b3JkLmxvdykgfCAwO1xuXHQgICAgICAgICAgICAvLyB2YXIgY2FycnkgPSAobG93ID4+PiAwKSA8ICh0aGlzLmxvdyA+Pj4gMCkgPyAxIDogMDtcblx0ICAgICAgICAgICAgLy8gdmFyIGhpZ2ggPSAodGhpcy5oaWdoICsgd29yZC5oaWdoICsgY2FycnkpIHwgMDtcblxuXHQgICAgICAgICAgICAvLyByZXR1cm4gWDY0V29yZC5jcmVhdGUoaGlnaCwgbG93KTtcblx0ICAgICAgICAvLyB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiA2NC1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2lnQnl0ZXMgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgKi9cblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXkgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB3b3JkcyAoT3B0aW9uYWwpIEFuIGFycmF5IG9mIENyeXB0b0pTLng2NC5Xb3JkIG9iamVjdHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy54NjQuV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgwMDAxMDIwMywgMHgwNDA1MDYwNyksXG5cdCAgICAgICAgICogICAgICAgICBDcnlwdG9KUy54NjQuV29yZC5jcmVhdGUoMHgxODE5MWExYiwgMHgxYzFkMWUxZilcblx0ICAgICAgICAgKiAgICAgXSk7XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLng2NC5Xb3JkQXJyYXkuY3JlYXRlKFtcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDAwMDEwMjAzLCAweDA0MDUwNjA3KSxcblx0ICAgICAgICAgKiAgICAgICAgIENyeXB0b0pTLng2NC5Xb3JkLmNyZWF0ZSgweDE4MTkxYTFiLCAweDFjMWQxZTFmKVxuXHQgICAgICAgICAqICAgICBdLCAxMCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogODtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIDY0LWJpdCB3b3JkIGFycmF5IHRvIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDcnlwdG9KUy5saWIuV29yZEFycmF5fSBUaGlzIHdvcmQgYXJyYXkncyBkYXRhIGFzIGEgMzItYml0IHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB4MzJXb3JkQXJyYXkgPSB4NjRXb3JkQXJyYXkudG9YMzIoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB0b1gzMjogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHg2NFdvcmRzTGVuZ3RoID0geDY0V29yZHMubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHgzMldvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeDY0V29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIHg2NFdvcmQgPSB4NjRXb3Jkc1tpXTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5oaWdoKTtcblx0ICAgICAgICAgICAgICAgIHgzMldvcmRzLnB1c2goeDY0V29yZC5sb3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFgzMldvcmRBcnJheS5jcmVhdGUoeDMyV29yZHMsIHRoaXMuc2lnQnl0ZXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtYNjRXb3JkQXJyYXl9IFRoZSBjbG9uZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNsb25lID0geDY0V29yZEFycmF5LmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIENsb25lIFwid29yZHNcIiBhcnJheVxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBjbG9uZS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUgZWFjaCBYNjRXb3JkIG9iamVjdFxuXHQgICAgICAgICAgICB2YXIgd29yZHNMZW5ndGggPSB3b3Jkcy5sZW5ndGg7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHNMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3b3Jkc1tpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIENoZWNrIGlmIHR5cGVkIGFycmF5cyBhcmUgc3VwcG9ydGVkXG5cdCAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblxuXHQgICAgLy8gUmVmZXJlbmNlIG9yaWdpbmFsIGluaXRcblx0ICAgIHZhciBzdXBlckluaXQgPSBXb3JkQXJyYXkuaW5pdDtcblxuXHQgICAgLy8gQXVnbWVudCBXb3JkQXJyYXkuaW5pdCB0byBoYW5kbGUgdHlwZWQgYXJyYXlzXG5cdCAgICB2YXIgc3ViSW5pdCA9IFdvcmRBcnJheS5pbml0ID0gZnVuY3Rpb24gKHR5cGVkQXJyYXkpIHtcblx0ICAgICAgICAvLyBDb252ZXJ0IGJ1ZmZlcnMgdG8gdWludDhcblx0ICAgICAgICBpZiAodHlwZWRBcnJheSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSh0eXBlZEFycmF5KTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb252ZXJ0IG90aGVyIGFycmF5IHZpZXdzIHRvIHVpbnQ4XG5cdCAgICAgICAgaWYgKFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5IHx8XG5cdCAgICAgICAgICAgICh0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgSW50MTZBcnJheSB8fFxuXHQgICAgICAgICAgICB0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG5cdCAgICAgICAgICAgIHR5cGVkQXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcblx0ICAgICAgICAgICAgdHlwZWRBcnJheSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0eXBlZEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodHlwZWRBcnJheS5idWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5ieXRlTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBIYW5kbGUgVWludDhBcnJheVxuXHQgICAgICAgIGlmICh0eXBlZEFycmF5IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSB0eXBlZEFycmF5LmJ5dGVMZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gRXh0cmFjdCBieXRlc1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZEFycmF5Qnl0ZUxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAyXSB8PSB0eXBlZEFycmF5W2ldIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhpcyB3b3JkIGFycmF5XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5jYWxsKHRoaXMsIHdvcmRzLCB0eXBlZEFycmF5Qnl0ZUxlbmd0aCk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8gRWxzZSBjYWxsIG5vcm1hbCBpbml0XG5cdCAgICAgICAgICAgIHN1cGVySW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgIHN1YkluaXQucHJvdG90eXBlID0gV29yZEFycmF5O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmxpYi5Xb3JkQXJyYXk7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogVVRGLTE2IEJFIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmMTZCRSA9IENfZW5jLlV0ZjE2ID0gQ19lbmMuVXRmMTZCRSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBVVEYtMTYgQkUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi0xNiBCRSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGYxNlN0cmluZyA9IENyeXB0b0pTLmVuYy5VdGYxNi5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMTYgLSAoaSAlIDQpICogOCkpICYgMHhmZmZmO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgQkUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IEJFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTYucGFyc2UodXRmMTZTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodXRmMTZTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2U3RyTGVuZ3RoID0gdXRmMTZTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXRmMTZTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMV0gfD0gdXRmMTZTdHIuY2hhckNvZGVBdChpKSA8PCAoMTYgLSAoaSAlIDIpICogMTYpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIFdvcmRBcnJheS5jcmVhdGUod29yZHMsIHV0ZjE2U3RyTGVuZ3RoICogMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtMTYgTEUgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIENfZW5jLlV0ZjE2TEUgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtMTYgTEUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgdXRmMTZTdHIgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHV0ZjE2Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gc3dhcEVuZGlhbigod29yZHNbaSA+Pj4gMl0gPj4+ICgxNiAtIChpICUgNCkgKiA4KSkgJiAweGZmZmYpO1xuXHQgICAgICAgICAgICAgICAgdXRmMTZDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdXRmMTZDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtMTYgTEUgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGYxNlN0ciBUaGUgVVRGLTE2IExFIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmMTZMRS5wYXJzZSh1dGYxNlN0cik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGYxNlN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgdXRmMTZTdHJMZW5ndGggPSB1dGYxNlN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1dGYxNlN0ckxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAxXSB8PSBzd2FwRW5kaWFuKHV0ZjE2U3RyLmNoYXJDb2RlQXQoaSkgPDwgKDE2IC0gKGkgJSAyKSAqIDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgdXRmMTZTdHJMZW5ndGggKiAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBzd2FwRW5kaWFuKHdvcmQpIHtcblx0ICAgICAgICByZXR1cm4gKCh3b3JkIDw8IDgpICYgMHhmZjAwZmYwMCkgfCAoKHdvcmQgPj4+IDgpICYgMHgwMGZmMDBmZik7XG5cdCAgICB9XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLlV0ZjE2O1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2U2NCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJhc2U2NCA9IENfZW5jLkJhc2U2NCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBCYXNlNjQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBiYXNlNjRTdHJpbmcgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgYmFzZTY0Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTEgPSAod29yZHNbaSA+Pj4gMl0gICAgICAgPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgICAgICAgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUyID0gKHdvcmRzWyhpICsgMSkgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAxKSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMyA9ICh3b3Jkc1soaSArIDIpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMikgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGUxIDw8IDE2KSB8IChieXRlMiA8PCA4KSB8IGJ5dGUzO1xuXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgKGogPCA0KSAmJiAoaSArIGogKiAwLjc1IDwgc2lnQnl0ZXMpOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+ICg2ICogKDMgLSBqKSkpICYgMHgzZikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2U2NENoYXJzLmxlbmd0aCAlIDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBiYXNlNjRDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBCYXNlNjQgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShiYXNlNjRTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoYmFzZTY0U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgYmFzZTY0U3RyTGVuZ3RoID0gYmFzZTY0U3RyLmxlbmd0aDtcblx0ICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcblx0ICAgICAgICAgICAgdmFyIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwO1xuXG5cdCAgICAgICAgICAgIGlmICghcmV2ZXJzZU1hcCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwID0gW107XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZU1hcFttYXAuY2hhckNvZGVBdChqKV0gPSBqO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElnbm9yZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0ckxlbmd0aCA9IHBhZGRpbmdJbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCk7XG5cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21hcDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89J1xuXHQgICAgfTtcblxuXHQgICAgZnVuY3Rpb24gcGFyc2VMb29wKGJhc2U2NFN0ciwgYmFzZTY0U3RyTGVuZ3RoLCByZXZlcnNlTWFwKSB7XG5cdCAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICB2YXIgbkJ5dGVzID0gMDtcblx0ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYXNlNjRTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgaWYgKGkgJSA0KSB7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHMxID0gcmV2ZXJzZU1hcFtiYXNlNjRTdHIuY2hhckNvZGVBdChpIC0gMSldIDw8ICgoaSAlIDQpICogMik7XG5cdCAgICAgICAgICAgICAgdmFyIGJpdHMyID0gcmV2ZXJzZU1hcFtiYXNlNjRTdHIuY2hhckNvZGVBdChpKV0gPj4+ICg2IC0gKGkgJSA0KSAqIDIpO1xuXHQgICAgICAgICAgICAgIHZhciBiaXRzQ29tYmluZWQgPSBiaXRzMSB8IGJpdHMyO1xuXHQgICAgICAgICAgICAgIHdvcmRzW25CeXRlcyA+Pj4gMl0gfD0gYml0c0NvbWJpbmVkIDw8ICgyNCAtIChuQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgIG5CeXRlcysrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBXb3JkQXJyYXkuY3JlYXRlKHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgfVxuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLmVuYy5CYXNlNjQ7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZTY0dXJsIGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZTY0dXJsID0gQ19lbmMuQmFzZTY0dXJsID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIEJhc2U2NHVybCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB1cmxTYWZlIFdoZXRoZXIgdG8gdXNlIHVybCBzYWZlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBCYXNlNjR1cmwgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgYmFzZTY0U3RyaW5nID0gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXksIHVybFNhZmU9dHJ1ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgYmFzZTY0Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSArPSAzKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYnl0ZTEgPSAod29yZHNbaSA+Pj4gMl0gICAgICAgPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgICAgICAgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJ5dGUyID0gKHdvcmRzWyhpICsgMSkgPj4+IDJdID4+PiAoMjQgLSAoKGkgKyAxKSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIHZhciBieXRlMyA9ICh3b3Jkc1soaSArIDIpID4+PiAyXSA+Pj4gKDI0IC0gKChpICsgMikgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGUxIDw8IDE2KSB8IChieXRlMiA8PCA4KSB8IGJ5dGUzO1xuXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgKGogPCA0KSAmJiAoaSArIGogKiAwLjc1IDwgc2lnQnl0ZXMpOyBqKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+ICg2ICogKDMgLSBqKSkpICYgMHgzZikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmdDaGFyID0gbWFwLmNoYXJBdCg2NCk7XG5cdCAgICAgICAgICAgIGlmIChwYWRkaW5nQ2hhcikge1xuXHQgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2U2NENoYXJzLmxlbmd0aCAlIDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBiYXNlNjRDaGFycy5wdXNoKHBhZGRpbmdDaGFyKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBiYXNlNjRDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBCYXNlNjR1cmwgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRTdHIgVGhlIEJhc2U2NHVybCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVybFNhZmUgV2hldGhlciB0byB1c2UgdXJsIHNhZmVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuQmFzZTY0dXJsLnBhcnNlKGJhc2U2NFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChiYXNlNjRTdHIsIHVybFNhZmU9dHJ1ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGJhc2U2NFN0ckxlbmd0aCA9IGJhc2U2NFN0ci5sZW5ndGg7XG5cdCAgICAgICAgICAgIHZhciBtYXAgPSB1cmxTYWZlID8gdGhpcy5fc2FmZV9tYXAgOiB0aGlzLl9tYXA7XG5cdCAgICAgICAgICAgIHZhciByZXZlcnNlTWFwID0gdGhpcy5fcmV2ZXJzZU1hcDtcblxuXHQgICAgICAgICAgICBpZiAoIXJldmVyc2VNYXApIHtcblx0ICAgICAgICAgICAgICAgIHJldmVyc2VNYXAgPSB0aGlzLl9yZXZlcnNlTWFwID0gW107XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldmVyc2VNYXBbbWFwLmNoYXJDb2RlQXQoaildID0gajtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElnbm9yZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nQ2hhciA9IG1hcC5jaGFyQXQoNjQpO1xuXHQgICAgICAgICAgICBpZiAocGFkZGluZ0NoYXIpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBwYWRkaW5nSW5kZXggPSBiYXNlNjRTdHIuaW5kZXhPZihwYWRkaW5nQ2hhcik7XG5cdCAgICAgICAgICAgICAgICBpZiAocGFkZGluZ0luZGV4ICE9PSAtMSkge1xuXHQgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0ckxlbmd0aCA9IHBhZGRpbmdJbmRleDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCk7XG5cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21hcDogJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Jyxcblx0ICAgICAgICBfc2FmZV9tYXA6ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyxcblx0ICAgIH07XG5cblx0ICAgIGZ1bmN0aW9uIHBhcnNlTG9vcChiYXNlNjRTdHIsIGJhc2U2NFN0ckxlbmd0aCwgcmV2ZXJzZU1hcCkge1xuXHQgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgIHZhciBuQnl0ZXMgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmFzZTY0U3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0czEgPSByZXZlcnNlTWFwW2Jhc2U2NFN0ci5jaGFyQ29kZUF0KGkgLSAxKV0gPDwgKChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRzMiA9IHJldmVyc2VNYXBbYmFzZTY0U3RyLmNoYXJDb2RlQXQoaSldID4+PiAoNiAtIChpICUgNCkgKiAyKTtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRzQ29tYmluZWQgPSBiaXRzMSB8IGJpdHMyO1xuXHQgICAgICAgICAgICAgICAgd29yZHNbbkJ5dGVzID4+PiAyXSB8PSBiaXRzQ29tYmluZWQgPDwgKDI0IC0gKG5CeXRlcyAlIDQpICogOCk7XG5cdCAgICAgICAgICAgICAgICBuQnl0ZXMrKztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gV29yZEFycmF5LmNyZWF0ZSh3b3JkcywgbkJ5dGVzKTtcblx0ICAgIH1cblx0fSgpKTtcblxuXHRyZXR1cm4gQ3J5cHRvSlMuZW5jLkJhc2U2NHVybDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIFQgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgIFRbaV0gPSAoTWF0aC5hYnMoTWF0aC5zaW4oaSArIDEpKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNRDUgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NlxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEggPSB0aGlzLl9oYXNoLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8wICA9IE1bb2Zmc2V0ICsgMF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xICA9IE1bb2Zmc2V0ICsgMV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8yICA9IE1bb2Zmc2V0ICsgMl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8zICA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF80ICA9IE1bb2Zmc2V0ICsgNF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF81ICA9IE1bb2Zmc2V0ICsgNV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF82ICA9IE1bb2Zmc2V0ICsgNl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF83ICA9IE1bb2Zmc2V0ICsgN107XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF84ICA9IE1bb2Zmc2V0ICsgOF07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF85ICA9IE1bb2Zmc2V0ICsgOV07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMCA9IE1bb2Zmc2V0ICsgMTBdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTEgPSBNW29mZnNldCArIDExXTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzEyID0gTVtvZmZzZXQgKyAxMl07XG5cdCAgICAgICAgICAgIHZhciBNX29mZnNldF8xMyA9IE1bb2Zmc2V0ICsgMTNdO1xuXHQgICAgICAgICAgICB2YXIgTV9vZmZzZXRfMTQgPSBNW29mZnNldCArIDE0XTtcblx0ICAgICAgICAgICAgdmFyIE1fb2Zmc2V0XzE1ID0gTVtvZmZzZXQgKyAxNV07XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWxiZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGF0aW9uXG5cdCAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBNX29mZnNldF8wLCAgNywgIFRbMF0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMSwgIDEyLCBUWzFdKTtcblx0ICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzIsICAxNywgVFsyXSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8zLCAgMjIsIFRbM10pO1xuXHQgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgTV9vZmZzZXRfNCwgIDcsICBUWzRdKTtcblx0ICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzUsICAxMiwgVFs1XSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF82LCAgMTcsIFRbNl0pO1xuXHQgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgTV9vZmZzZXRfNywgIDIyLCBUWzddKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzgsICA3LCAgVFs4XSk7XG5cdCAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBNX29mZnNldF85LCAgMTIsIFRbOV0pO1xuXHQgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgTV9vZmZzZXRfMTAsIDE3LCBUWzEwXSk7XG5cdCAgICAgICAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBNX29mZnNldF8xMSwgMjIsIFRbMTFdKTtcblx0ICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEyLCA3LCAgVFsxMl0pO1xuXHQgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTMsIDEyLCBUWzEzXSk7XG5cdCAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTcsIFRbMTRdKTtcblx0ICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzE1LCAyMiwgVFsxNV0pO1xuXG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF8xLCAgNSwgIFRbMTZdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzYsICA5LCAgVFsxN10pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfMTEsIDE0LCBUWzE4XSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8wLCAgMjAsIFRbMTldKTtcblx0ICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzUsICA1LCAgVFsyMF0pO1xuXHQgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgTV9vZmZzZXRfMTAsIDksICBUWzIxXSk7XG5cdCAgICAgICAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBNX29mZnNldF8xNSwgMTQsIFRbMjJdKTtcblx0ICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzQsICAyMCwgVFsyM10pO1xuXHQgICAgICAgICAgICBhID0gR0coYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgIDUsICBUWzI0XSk7XG5cdCAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBNX29mZnNldF8xNCwgOSwgIFRbMjVdKTtcblx0ICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzMsICAxNCwgVFsyNl0pO1xuXHQgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgTV9vZmZzZXRfOCwgIDIwLCBUWzI3XSk7XG5cdCAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBNX29mZnNldF8xMywgNSwgIFRbMjhdKTtcblx0ICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzIsICA5LCAgVFsyOV0pO1xuXHQgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgTV9vZmZzZXRfNywgIDE0LCBUWzMwXSk7XG5cdCAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBNX29mZnNldF8xMiwgMjAsIFRbMzFdKTtcblxuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfNSwgIDQsICBUWzMyXSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF84LCAgMTEsIFRbMzNdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzExLCAxNiwgVFszNF0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMTQsIDIzLCBUWzM1XSk7XG5cdCAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBNX29mZnNldF8xLCAgNCwgIFRbMzZdKTtcblx0ICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzQsICAxMSwgVFszN10pO1xuXHQgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgTV9vZmZzZXRfNywgIDE2LCBUWzM4XSk7XG5cdCAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBNX29mZnNldF8xMCwgMjMsIFRbMzldKTtcblx0ICAgICAgICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzEzLCA0LCAgVFs0MF0pO1xuXHQgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgTV9vZmZzZXRfMCwgIDExLCBUWzQxXSk7XG5cdCAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBNX29mZnNldF8zLCAgMTYsIFRbNDJdKTtcblx0ICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzYsICAyMywgVFs0M10pO1xuXHQgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgTV9vZmZzZXRfOSwgIDQsICBUWzQ0XSk7XG5cdCAgICAgICAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBNX29mZnNldF8xMiwgMTEsIFRbNDVdKTtcblx0ICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzE1LCAxNiwgVFs0Nl0pO1xuXHQgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgTV9vZmZzZXRfMiwgIDIzLCBUWzQ3XSk7XG5cblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzAsICA2LCAgVFs0OF0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfNywgIDEwLCBUWzQ5XSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8xNCwgMTUsIFRbNTBdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzUsICAyMSwgVFs1MV0pO1xuXHQgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgTV9vZmZzZXRfMTIsIDYsICBUWzUyXSk7XG5cdCAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBNX29mZnNldF8zLCAgMTAsIFRbNTNdKTtcblx0ICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIE1fb2Zmc2V0XzEwLCAxNSwgVFs1NF0pO1xuXHQgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgTV9vZmZzZXRfMSwgIDIxLCBUWzU1XSk7XG5cdCAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBNX29mZnNldF84LCAgNiwgIFRbNTZdKTtcblx0ICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIE1fb2Zmc2V0XzE1LCAxMCwgVFs1N10pO1xuXHQgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgTV9vZmZzZXRfNiwgIDE1LCBUWzU4XSk7XG5cdCAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBNX29mZnNldF8xMywgMjEsIFRbNTldKTtcblx0ICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIE1fb2Zmc2V0XzQsICA2LCAgVFs2MF0pO1xuXHQgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgTV9vZmZzZXRfMTEsIDEwLCBUWzYxXSk7XG5cdCAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBNX29mZnNldF8yLCAgMTUsIFRbNjJdKTtcblx0ICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIE1fb2Zmc2V0XzksICAyMSwgVFs2M10pO1xuXG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIEhbMF0gPSAoSFswXSArIGEpIHwgMDtcblx0ICAgICAgICAgICAgSFsxXSA9IChIWzFdICsgYikgfCAwO1xuXHQgICAgICAgICAgICBIWzJdID0gKEhbMl0gKyBjKSB8IDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFszXSArIGQpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsSCA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWxMID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSAoXG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsSCA8PCA4KSAgfCAobkJpdHNUb3RhbEggPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsSCA8PCAyNCkgfCAobkJpdHNUb3RhbEggPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxMIDw8IDgpICB8IChuQml0c1RvdGFsTCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWxMIDw8IDI0KSB8IChuQml0c1RvdGFsTCA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICk7XG5cblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gRkYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArICgoYiAmIGMpIHwgKH5iICYgZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gR0coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArICgoYiAmIGQpIHwgKGMgJiB+ZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gSEgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArIChiIF4gYyBeIGQpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gSUkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuXHQgICAgICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgeCArIHQ7XG5cdCAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLk1ENSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuTUQ1KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuTUQ1ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoTUQ1KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNNRDUobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjTUQ1ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKE1ENSk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLk1ENTtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0xIGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMSA9IENfYWxnby5TSEExID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LFxuXHQgICAgICAgICAgICAgICAgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3Nixcblx0ICAgICAgICAgICAgICAgIDB4YzNkMmUxZjBcblx0ICAgICAgICAgICAgXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IChuIDw8IDEpIHwgKG4gPj4+IDMxKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgdmFyIHQgPSAoKGEgPDwgNSkgfCAoYSA+Pj4gMjcpKSArIGUgKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAyMCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKChiICYgYykgfCAofmIgJiBkKSkgKyAweDVhODI3OTk5O1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgNDApIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ICs9IChiIF4gYyBeIGQpICsgMHg2ZWQ5ZWJhMTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IDYwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdCArPSAoKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpKSAtIDB4NzBlNDQzMjQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGkgPCA4MCkgKi8ge1xuXHQgICAgICAgICAgICAgICAgICAgIHQgKz0gKGIgXiBjIF4gZCkgLSAweDM1OWQzZTJhO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBlID0gZDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IChiIDw8IDMwKSB8IChiID4+PiAyKTtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSgnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMSh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTEgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEExKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEExKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTEgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMTtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIEluaXRpYWxpemF0aW9uIGFuZCByb3VuZCBjb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgSCA9IFtdO1xuXHQgICAgdmFyIEsgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gaXNQcmltZShuKSB7XG5cdCAgICAgICAgICAgIHZhciBzcXJ0TiA9IE1hdGguc3FydChuKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFjdG9yID0gMjsgZmFjdG9yIDw9IHNxcnROOyBmYWN0b3IrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCEobiAlIGZhY3RvcikpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsQml0cyhuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoKG4gLSAobiB8IDApKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIG4gPSAyO1xuXHQgICAgICAgIHZhciBuUHJpbWUgPSAwO1xuXHQgICAgICAgIHdoaWxlIChuUHJpbWUgPCA2NCkge1xuXHQgICAgICAgICAgICBpZiAoaXNQcmltZShuKSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5QcmltZSA8IDgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBIW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgS1tuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDMpKTtcblxuXHQgICAgICAgICAgICAgICAgblByaW1lKys7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBuKys7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yNTYgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChILnNsaWNlKDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblx0ICAgICAgICAgICAgdmFyIGYgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgZyA9IEhbNl07XG5cdCAgICAgICAgICAgIHZhciBoID0gSFs3XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4ID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTAgID0gKChnYW1tYTB4IDw8IDI1KSB8IChnYW1tYTB4ID4+PiA3KSkgIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZ2FtbWEweCA8PCAxNCkgfCAoZ2FtbWEweCA+Pj4gMTgpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdhbW1hMHggPj4+IDMpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExICA9ICgoZ2FtbWExeCA8PCAxNSkgfCAoZ2FtbWExeCA+Pj4gMTcpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMXggPDwgMTMpIHwgKGdhbW1hMXggPj4+IDE5KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTF4ID4+PiAxMCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciBjaCAgPSAoZSAmIGYpIF4gKH5lICYgZyk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqID0gKGEgJiBiKSBeIChhICYgYykgXiAoYiAmIGMpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwID0gKChhIDw8IDMwKSB8IChhID4+PiAyKSkgXiAoKGEgPDwgMTkpIHwgKGEgPj4+IDEzKSkgXiAoKGEgPDwgMTApIHwgKGEgPj4+IDIyKSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExID0gKChlIDw8IDI2KSB8IChlID4+PiA2KSkgXiAoKGUgPDwgMjEpIHwgKGUgPj4+IDExKSkgXiAoKGUgPDwgNykgIHwgKGUgPj4+IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gc2lnbWEwICsgbWFqO1xuXG5cdCAgICAgICAgICAgICAgICBoID0gZztcblx0ICAgICAgICAgICAgICAgIGcgPSBmO1xuXHQgICAgICAgICAgICAgICAgZiA9IGU7XG5cdCAgICAgICAgICAgICAgICBlID0gKGQgKyB0MSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gYjtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9ICh0MSArIHQyKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICAgICAgSFs1XSA9IChIWzVdICsgZikgfCAwO1xuXHQgICAgICAgICAgICBIWzZdID0gKEhbNl0gKyBnKSB8IDA7XG5cdCAgICAgICAgICAgIEhbN10gPSAoSFs3XSArIGgpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEyNTYpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjU2KTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjU2O1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGEyNTZcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vc2hhMjU2XCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yMjQgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyMjQgPSBDX2FsZ28uU0hBMjI0ID0gU0hBMjU2LmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuXHQgICAgICAgICAgICAgICAgMHhmZmMwMGIzMSwgMHg2ODU4MTUxMSwgMHg2NGY5OGZhNywgMHhiZWZhNGZhNFxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEEyNTYuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDQ7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyMjQoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTIyNCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTIyNCA9IFNIQTI1Ni5fY3JlYXRlSGVscGVyKFNIQTIyNCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjU0hBMjI0KG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTIyNCA9IFNIQTI1Ni5fY3JlYXRlSG1hY0hlbHBlcihTSEEyMjQpO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTIyNDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4veDY0LWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBYNjRXb3JkQXJyYXkgPSBDX3g2NC5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICBmdW5jdGlvbiBYNjRXb3JkX2NyZWF0ZSgpIHtcblx0ICAgICAgICByZXR1cm4gWDY0V29yZC5jcmVhdGUuYXBwbHkoWDY0V29yZCwgYXJndW1lbnRzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gQ29uc3RhbnRzXG5cdCAgICB2YXIgSyA9IFtcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgWDY0V29yZF9jcmVhdGUoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIFg2NFdvcmRfY3JlYXRlKDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgpLCBYNjRXb3JkX2NyZWF0ZSgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgWDY0V29yZF9jcmVhdGUoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIFg2NFdvcmRfY3JlYXRlKDB4MTI4MzViMDEsIDB4NDU3MDZmYmUpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMpLCBYNjRXb3JkX2NyZWF0ZSgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgWDY0V29yZF9jcmVhdGUoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIFg2NFdvcmRfY3JlYXRlKDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIpLCBYNjRXb3JkX2NyZWF0ZSgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgWDY0V29yZF9jcmVhdGUoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIFg2NFdvcmRfY3JlYXRlKDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQpLCBYNjRXb3JkX2NyZWF0ZSgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgWDY0V29yZF9jcmVhdGUoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIFg2NFdvcmRfY3JlYXRlKDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YzZlMDBiZjMsIDB4M2RhODhmYzIpLCBYNjRXb3JkX2NyZWF0ZSgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgWDY0V29yZF9jcmVhdGUoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIFg2NFdvcmRfY3JlYXRlKDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQpLCBYNjRXb3JkX2NyZWF0ZSgweDUzMzgwZDEzLCAweDlkOTViM2RmKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgWDY0V29yZF9jcmVhdGUoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIFg2NFdvcmRfY3JlYXRlKDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQpLCBYNjRXb3JkX2NyZWF0ZSgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgWDY0V29yZF9jcmVhdGUoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIFg2NFdvcmRfY3JlYXRlKDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEpLCBYNjRXb3JkX2NyZWF0ZSgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgWDY0V29yZF9jcmVhdGUoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIFg2NFdvcmRfY3JlYXRlKDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMpLCBYNjRXb3JkX2NyZWF0ZSgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgWDY0V29yZF9jcmVhdGUoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIFg2NFdvcmRfY3JlYXRlKDB4NzhhNTYzNmYsIDB4NDMxNzJmNjApLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4ODRjODc4MTQsIDB4YTFmMGFiNzIpLCBYNjRXb3JkX2NyZWF0ZSgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgWDY0V29yZF9jcmVhdGUoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIFg2NFdvcmRfY3JlYXRlKDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMpLCBYNjRXb3JkX2NyZWF0ZSgweGQxODZiOGM3LCAweDIxYzBjMjA3KSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgWDY0V29yZF9jcmVhdGUoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIFg2NFdvcmRfY3JlYXRlKDB4MGE2MzdkYzUsIDB4YTJjODk4YTYpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUpLCBYNjRXb3JkX2NyZWF0ZSgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgWDY0V29yZF9jcmVhdGUoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksXG5cdCAgICAgICAgWDY0V29yZF9jcmVhdGUoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIFg2NFdvcmRfY3JlYXRlKDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMpLFxuXHQgICAgICAgIFg2NFdvcmRfY3JlYXRlKDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYpLCBYNjRXb3JkX2NyZWF0ZSgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSxcblx0ICAgICAgICBYNjRXb3JkX2NyZWF0ZSgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgWDY0V29yZF9jcmVhdGUoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNylcblx0ICAgIF07XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBXID0gW107XG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICBXW2ldID0gWDY0V29yZF9jcmVhdGUoKTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS01MTIgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEE1MTIgPSBDX2FsZ28uU0hBNTEyID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBYNjRXb3JkQXJyYXkuaW5pdChbXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpLCBuZXcgWDY0V29yZC5pbml0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweDNjNmVmMzcyLCAweGZlOTRmODJiKSwgbmV3IFg2NFdvcmQuaW5pdCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSksIG5ldyBYNjRXb3JkLmluaXQoMHg5YjA1Njg4YywgMHgyYjNlNmMxZiksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpLCBuZXcgWDY0V29yZC5pbml0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpXG5cdCAgICAgICAgICAgIF0pO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgSDAgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgSDEgPSBIWzFdO1xuXHQgICAgICAgICAgICB2YXIgSDIgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgSDMgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgSDQgPSBIWzRdO1xuXHQgICAgICAgICAgICB2YXIgSDUgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgSDYgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgSDcgPSBIWzddO1xuXG5cdCAgICAgICAgICAgIHZhciBIMGggPSBIMC5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDBsID0gSDAubG93O1xuXHQgICAgICAgICAgICB2YXIgSDFoID0gSDEuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEgxbCA9IEgxLmxvdztcblx0ICAgICAgICAgICAgdmFyIEgyaCA9IEgyLmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBIMmwgPSBIMi5sb3c7XG5cdCAgICAgICAgICAgIHZhciBIM2ggPSBIMy5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDNsID0gSDMubG93O1xuXHQgICAgICAgICAgICB2YXIgSDRoID0gSDQuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg0bCA9IEg0Lmxvdztcblx0ICAgICAgICAgICAgdmFyIEg1aCA9IEg1LmhpZ2g7XG5cdCAgICAgICAgICAgIHZhciBINWwgPSBINS5sb3c7XG5cdCAgICAgICAgICAgIHZhciBINmggPSBINi5oaWdoO1xuXHQgICAgICAgICAgICB2YXIgSDZsID0gSDYubG93O1xuXHQgICAgICAgICAgICB2YXIgSDdoID0gSDcuaGlnaDtcblx0ICAgICAgICAgICAgdmFyIEg3bCA9IEg3LmxvdztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWggPSBIMGg7XG5cdCAgICAgICAgICAgIHZhciBhbCA9IEgwbDtcblx0ICAgICAgICAgICAgdmFyIGJoID0gSDFoO1xuXHQgICAgICAgICAgICB2YXIgYmwgPSBIMWw7XG5cdCAgICAgICAgICAgIHZhciBjaCA9IEgyaDtcblx0ICAgICAgICAgICAgdmFyIGNsID0gSDJsO1xuXHQgICAgICAgICAgICB2YXIgZGggPSBIM2g7XG5cdCAgICAgICAgICAgIHZhciBkbCA9IEgzbDtcblx0ICAgICAgICAgICAgdmFyIGVoID0gSDRoO1xuXHQgICAgICAgICAgICB2YXIgZWwgPSBINGw7XG5cdCAgICAgICAgICAgIHZhciBmaCA9IEg1aDtcblx0ICAgICAgICAgICAgdmFyIGZsID0gSDVsO1xuXHQgICAgICAgICAgICB2YXIgZ2ggPSBINmg7XG5cdCAgICAgICAgICAgIHZhciBnbCA9IEg2bDtcblx0ICAgICAgICAgICAgdmFyIGhoID0gSDdoO1xuXHQgICAgICAgICAgICB2YXIgaGwgPSBIN2w7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIFdpbDtcblx0ICAgICAgICAgICAgICAgIHZhciBXaWg7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgV2kgPSBXW2ldO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFeHRlbmQgbWVzc2FnZVxuXHQgICAgICAgICAgICAgICAgaWYgKGkgPCAxNikge1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpLmhpZ2ggPSBNW29mZnNldCArIGkgKiAyXSAgICAgfCAwO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpbCA9IFdpLmxvdyAgPSBNW29mZnNldCArIGkgKiAyICsgMV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTBcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCAgPSBXW2kgLSAxNV07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMHhoID0gZ2FtbWEweC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4bCA9IGdhbW1hMHgubG93O1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTBoICA9ICgoZ2FtbWEweGggPj4+IDEpIHwgKGdhbW1hMHhsIDw8IDMxKSkgXiAoKGdhbW1hMHhoID4+PiA4KSB8IChnYW1tYTB4bCA8PCAyNCkpIF4gKGdhbW1hMHhoID4+PiA3KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwbCAgPSAoKGdhbW1hMHhsID4+PiAxKSB8IChnYW1tYTB4aCA8PCAzMSkpIF4gKChnYW1tYTB4bCA+Pj4gOCkgfCAoZ2FtbWEweGggPDwgMjQpKSBeICgoZ2FtbWEweGwgPj4+IDcpIHwgKGdhbW1hMHhoIDw8IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBHYW1tYTFcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeCAgPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExeGggPSBnYW1tYTF4LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXhsID0gZ2FtbWExeC5sb3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMWggID0gKChnYW1tYTF4aCA+Pj4gMTkpIHwgKGdhbW1hMXhsIDw8IDEzKSkgXiAoKGdhbW1hMXhoIDw8IDMpIHwgKGdhbW1hMXhsID4+PiAyOSkpIF4gKGdhbW1hMXhoID4+PiA2KTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExbCAgPSAoKGdhbW1hMXhsID4+PiAxOSkgfCAoZ2FtbWExeGggPDwgMTMpKSBeICgoZ2FtbWExeGwgPDwgMykgfCAoZ2FtbWExeGggPj4+IDI5KSkgXiAoKGdhbW1hMXhsID4+PiA2KSB8IChnYW1tYTF4aCA8PCAyNikpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpNyAgPSBXW2kgLSA3XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2k3aCA9IFdpNy5oaWdoO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTdsID0gV2k3LmxvdztcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBXaTE2ICA9IFdbaSAtIDE2XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgV2kxNmggPSBXaTE2LmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFdpMTZsID0gV2kxNi5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBnYW1tYTBsICsgV2k3bDtcblx0ICAgICAgICAgICAgICAgICAgICBXaWggPSBnYW1tYTBoICsgV2k3aCArICgoV2lsID4+PiAwKSA8IChnYW1tYTBsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgICAgICBXaWwgPSBXaWwgKyBnYW1tYTFsO1xuXHQgICAgICAgICAgICAgICAgICAgIFdpaCA9IFdpaCArIGdhbW1hMWggKyAoKFdpbCA+Pj4gMCkgPCAoZ2FtbWExbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICAgICAgV2lsID0gV2lsICsgV2kxNmw7XG5cdCAgICAgICAgICAgICAgICAgICAgV2loID0gV2loICsgV2kxNmggKyAoKFdpbCA+Pj4gMCkgPCAoV2kxNmwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV2kuaGlnaCA9IFdpaDtcblx0ICAgICAgICAgICAgICAgICAgICBXaS5sb3cgID0gV2lsO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2hoICA9IChlaCAmIGZoKSBeICh+ZWggJiBnaCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgY2hsICA9IChlbCAmIGZsKSBeICh+ZWwgJiBnbCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqaCA9IChhaCAmIGJoKSBeIChhaCAmIGNoKSBeIChiaCAmIGNoKTtcblx0ICAgICAgICAgICAgICAgIHZhciBtYWpsID0gKGFsICYgYmwpIF4gKGFsICYgY2wpIF4gKGJsICYgY2wpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwaCA9ICgoYWggPj4+IDI4KSB8IChhbCA8PCA0KSkgIF4gKChhaCA8PCAzMCkgIHwgKGFsID4+PiAyKSkgXiAoKGFoIDw8IDI1KSB8IChhbCA+Pj4gNykpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMGwgPSAoKGFsID4+PiAyOCkgfCAoYWggPDwgNCkpICBeICgoYWwgPDwgMzApICB8IChhaCA+Pj4gMikpIF4gKChhbCA8PCAyNSkgfCAoYWggPj4+IDcpKTtcblx0ICAgICAgICAgICAgICAgIHZhciBzaWdtYTFoID0gKChlaCA+Pj4gMTQpIHwgKGVsIDw8IDE4KSkgXiAoKGVoID4+PiAxOCkgfCAoZWwgPDwgMTQpKSBeICgoZWggPDwgMjMpIHwgKGVsID4+PiA5KSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExbCA9ICgoZWwgPj4+IDE0KSB8IChlaCA8PCAxOCkpIF4gKChlbCA+Pj4gMTgpIHwgKGVoIDw8IDE0KSkgXiAoKGVsIDw8IDIzKSB8IChlaCA+Pj4gOSkpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldXG5cdCAgICAgICAgICAgICAgICB2YXIgS2kgID0gS1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBLaWggPSBLaS5oaWdoO1xuXHQgICAgICAgICAgICAgICAgdmFyIEtpbCA9IEtpLmxvdztcblxuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IGhsICsgc2lnbWExbDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSBoaCArIHNpZ21hMWggKyAoKHQxbCA+Pj4gMCkgPCAoaGwgPj4+IDApID8gMSA6IDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxbCA9IHQxbCArIGNobDtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWggPSB0MWggKyBjaGggKyAoKHQxbCA+Pj4gMCkgPCAoY2hsID4+PiAwKSA/IDEgOiAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MWwgPSB0MWwgKyBLaWw7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFoID0gdDFoICsgS2loICsgKCh0MWwgPj4+IDApIDwgKEtpbCA+Pj4gMCkgPyAxIDogMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgdDFsID0gdDFsICsgV2lsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxaCA9IHQxaCArIFdpaCArICgodDFsID4+PiAwKSA8IChXaWwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyB0MiA9IHNpZ21hMCArIG1halxuXHQgICAgICAgICAgICAgICAgdmFyIHQybCA9IHNpZ21hMGwgKyBtYWpsO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyaCA9IHNpZ21hMGggKyBtYWpoICsgKCh0MmwgPj4+IDApIDwgKHNpZ21hMGwgPj4+IDApID8gMSA6IDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgd29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgICAgIGhoID0gZ2g7XG5cdCAgICAgICAgICAgICAgICBobCA9IGdsO1xuXHQgICAgICAgICAgICAgICAgZ2ggPSBmaDtcblx0ICAgICAgICAgICAgICAgIGdsID0gZmw7XG5cdCAgICAgICAgICAgICAgICBmaCA9IGVoO1xuXHQgICAgICAgICAgICAgICAgZmwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gKGRsICsgdDFsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBlaCA9IChkaCArIHQxaCArICgoZWwgPj4+IDApIDwgKGRsID4+PiAwKSA/IDEgOiAwKSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZGggPSBjaDtcblx0ICAgICAgICAgICAgICAgIGRsID0gY2w7XG5cdCAgICAgICAgICAgICAgICBjaCA9IGJoO1xuXHQgICAgICAgICAgICAgICAgY2wgPSBibDtcblx0ICAgICAgICAgICAgICAgIGJoID0gYWg7XG5cdCAgICAgICAgICAgICAgICBibCA9IGFsO1xuXHQgICAgICAgICAgICAgICAgYWwgPSAodDFsICsgdDJsKSB8IDA7XG5cdCAgICAgICAgICAgICAgICBhaCA9ICh0MWggKyB0MmggKyAoKGFsID4+PiAwKSA8ICh0MWwgPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIMGwgPSBIMC5sb3cgID0gKEgwbCArIGFsKTtcblx0ICAgICAgICAgICAgSDAuaGlnaCA9IChIMGggKyBhaCArICgoSDBsID4+PiAwKSA8IChhbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMWwgPSBIMS5sb3cgID0gKEgxbCArIGJsKTtcblx0ICAgICAgICAgICAgSDEuaGlnaCA9IChIMWggKyBiaCArICgoSDFsID4+PiAwKSA8IChibCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIMmwgPSBIMi5sb3cgID0gKEgybCArIGNsKTtcblx0ICAgICAgICAgICAgSDIuaGlnaCA9IChIMmggKyBjaCArICgoSDJsID4+PiAwKSA8IChjbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIM2wgPSBIMy5sb3cgID0gKEgzbCArIGRsKTtcblx0ICAgICAgICAgICAgSDMuaGlnaCA9IChIM2ggKyBkaCArICgoSDNsID4+PiAwKSA8IChkbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINGwgPSBINC5sb3cgID0gKEg0bCArIGVsKTtcblx0ICAgICAgICAgICAgSDQuaGlnaCA9IChINGggKyBlaCArICgoSDRsID4+PiAwKSA8IChlbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINWwgPSBINS5sb3cgID0gKEg1bCArIGZsKTtcblx0ICAgICAgICAgICAgSDUuaGlnaCA9IChINWggKyBmaCArICgoSDVsID4+PiAwKSA8IChmbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBINmwgPSBINi5sb3cgID0gKEg2bCArIGdsKTtcblx0ICAgICAgICAgICAgSDYuaGlnaCA9IChINmggKyBnaCArICgoSDZsID4+PiAwKSA8IChnbCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgICAgICBIN2wgPSBINy5sb3cgID0gKEg3bCArIGhsKTtcblx0ICAgICAgICAgICAgSDcuaGlnaCA9IChIN2ggKyBoaCArICgoSDdsID4+PiAwKSA8IChobCA+Pj4gMCkgPyAxIDogMCkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3JkcztcblxuXHQgICAgICAgICAgICB2YXIgbkJpdHNUb3RhbCA9IHRoaXMuX25EYXRhQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgbkJpdHNMZWZ0ID0gZGF0YS5zaWdCeXRlcyAqIDg7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHg4MCA8PCAoMjQgLSBuQml0c0xlZnQgJSAzMik7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyAxMjgpID4+PiAxMCkgPDwgNSkgKyAzMV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgaGFzaCB0byAzMi1iaXQgd29yZCBhcnJheSBiZWZvcmUgcmV0dXJuaW5nXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5faGFzaC50b1gzMigpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDEwMjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBNTEyKCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEE1MTIod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEE1MTIpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTUxMihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEE1MTIgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBNTEyKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEE1MTI7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpLCByZXF1aXJlKFwiLi9zaGE1MTJcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4veDY0LWNvcmVcIiwgXCIuL3NoYTUxMlwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX3g2NCA9IEMueDY0O1xuXHQgICAgdmFyIFg2NFdvcmQgPSBDX3g2NC5Xb3JkO1xuXHQgICAgdmFyIFg2NFdvcmRBcnJheSA9IENfeDY0LldvcmRBcnJheTtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cdCAgICB2YXIgU0hBNTEyID0gQ19hbGdvLlNIQTUxMjtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMzg0IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMzg0ID0gQ19hbGdvLlNIQTM4NCA9IFNIQTUxMi5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgWDY0V29yZEFycmF5LmluaXQoW1xuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGNiYmI5ZDVkLCAweGMxMDU5ZWQ4KSwgbmV3IFg2NFdvcmQuaW5pdCgweDYyOWEyOTJhLCAweDM2N2NkNTA3KSxcblx0ICAgICAgICAgICAgICAgIG5ldyBYNjRXb3JkLmluaXQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyksIG5ldyBYNjRXb3JkLmluaXQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSksXG5cdCAgICAgICAgICAgICAgICBuZXcgWDY0V29yZC5pbml0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpLCBuZXcgWDY0V29yZC5pbml0KDB4OGViNDRhODcsIDB4Njg1ODE1MTEpLFxuXHQgICAgICAgICAgICAgICAgbmV3IFg2NFdvcmQuaW5pdCgweGRiMGMyZTBkLCAweDY0Zjk4ZmE3KSwgbmV3IFg2NFdvcmQuaW5pdCgweDQ3YjU0ODFkLCAweGJlZmE0ZmE0KVxuXHQgICAgICAgICAgICBdKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSBTSEE1MTIuX2RvRmluYWxpemUuY2FsbCh0aGlzKTtcblxuXHQgICAgICAgICAgICBoYXNoLnNpZ0J5dGVzIC09IDE2O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMzg0KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEzODQod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhlbHBlcihTSEEzODQpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTM4NChtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEzODQgPSBTSEE1MTIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMzg0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5TSEEzODQ7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL3g2NC1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ194NjQgPSBDLng2NDtcblx0ICAgIHZhciBYNjRXb3JkID0gQ194NjQuV29yZDtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZXNcblx0ICAgIHZhciBSSE9fT0ZGU0VUUyA9IFtdO1xuXHQgICAgdmFyIFBJX0lOREVYRVMgID0gW107XG5cdCAgICB2YXIgUk9VTkRfQ09OU1RBTlRTID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgQ29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8vIENvbXB1dGUgcmhvIG9mZnNldCBjb25zdGFudHNcblx0ICAgICAgICB2YXIgeCA9IDEsIHkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgMjQ7IHQrKykge1xuXHQgICAgICAgICAgICBSSE9fT0ZGU0VUU1t4ICsgNSAqIHldID0gKCh0ICsgMSkgKiAodCArIDIpIC8gMikgJSA2NDtcblxuXHQgICAgICAgICAgICB2YXIgbmV3WCA9IHkgJSA1O1xuXHQgICAgICAgICAgICB2YXIgbmV3WSA9ICgyICogeCArIDMgKiB5KSAlIDU7XG5cdCAgICAgICAgICAgIHggPSBuZXdYO1xuXHQgICAgICAgICAgICB5ID0gbmV3WTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDb21wdXRlIHBpIGluZGV4IGNvbnN0YW50c1xuXHQgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgNTsgeSsrKSB7XG5cdCAgICAgICAgICAgICAgICBQSV9JTkRFWEVTW3ggKyA1ICogeV0gPSB5ICsgKCgyICogeCArIDMgKiB5KSAlIDUpICogNTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIENvbXB1dGUgcm91bmQgY29uc3RhbnRzXG5cdCAgICAgICAgdmFyIExGU1IgPSAweDAxO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgcm91bmRDb25zdGFudE1zdyA9IDA7XG5cdCAgICAgICAgICAgIHZhciByb3VuZENvbnN0YW50THN3ID0gMDtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDc7IGorKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKExGU1IgJiAweDAxKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGJpdFBvc2l0aW9uID0gKDEgPDwgaikgLSAxO1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChiaXRQb3NpdGlvbiA8IDMyKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRMc3cgXj0gMSA8PCBiaXRQb3NpdGlvbjtcblx0ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLyogaWYgKGJpdFBvc2l0aW9uID49IDMyKSAqLyB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kQ29uc3RhbnRNc3cgXj0gMSA8PCAoYml0UG9zaXRpb24gLSAzMik7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG5leHQgTEZTUlxuXHQgICAgICAgICAgICAgICAgaWYgKExGU1IgJiAweDgwKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHBvbHlub21pYWwgb3ZlciBHRigyKTogeF44ICsgeF42ICsgeF41ICsgeF40ICsgMVxuXHQgICAgICAgICAgICAgICAgICAgIExGU1IgPSAoTEZTUiA8PCAxKSBeIDB4NzE7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIExGU1IgPDw9IDE7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBST1VORF9DT05TVEFOVFNbaV0gPSBYNjRXb3JkLmNyZWF0ZShyb3VuZENvbnN0YW50TXN3LCByb3VuZENvbnN0YW50THN3KTtcblx0ICAgICAgICB9XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzIGZvciB0ZW1wb3JhcnkgdmFsdWVzXG5cdCAgICB2YXIgVCA9IFtdO1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgVFtpXSA9IFg2NFdvcmQuY3JlYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMyBoYXNoIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFNIQTMgPSBDX2FsZ28uU0hBMyA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvdXRwdXRMZW5ndGhcblx0ICAgICAgICAgKiAgIFRoZSBkZXNpcmVkIG51bWJlciBvZiBiaXRzIGluIHRoZSBvdXRwdXQgaGFzaC5cblx0ICAgICAgICAgKiAgIE9ubHkgdmFsdWVzIHBlcm1pdHRlZCBhcmU6IDIyNCwgMjU2LCAzODQsIDUxMi5cblx0ICAgICAgICAgKiAgIERlZmF1bHQ6IDUxMlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogSGFzaGVyLmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBvdXRwdXRMZW5ndGg6IDUxMlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGUgPSBbXVxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHN0YXRlW2ldID0gbmV3IFg2NFdvcmQuaW5pdCgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgdGhpcy5ibG9ja1NpemUgPSAoMTYwMCAtIDIgKiB0aGlzLmNmZy5vdXRwdXRMZW5ndGgpIC8gMzI7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tTaXplTGFuZXMgPSB0aGlzLmJsb2NrU2l6ZSAvIDI7XG5cblx0ICAgICAgICAgICAgLy8gQWJzb3JiXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbkJsb2NrU2l6ZUxhbmVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICAgICAgdmFyIE0yaSAgPSBNW29mZnNldCArIDIgKiBpXTtcblx0ICAgICAgICAgICAgICAgIHZhciBNMmkxID0gTVtvZmZzZXQgKyAyICogaSArIDFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgTTJpID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaSA8PCA4KSAgfCAoTTJpID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaSA8PCAyNCkgfCAoTTJpID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgICAgICBNMmkxID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKE0yaTEgPDwgOCkgIHwgKE0yaTEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTTJpMSA8PCAyNCkgfCAoTTJpMSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBYnNvcmIgbWVzc2FnZSBpbnRvIHN0YXRlXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2ldO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IE0yaTE7XG5cdCAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gTTJpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAyNDsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gVGhldGFcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gTWl4IGNvbHVtbiBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gMCwgdExzdyA9IDA7XG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCA1OyB5KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVt4ICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0TXN3IF49IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyBePSBsYW5lLmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBUZW1wb3JhcnkgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4ID0gVFt4XTtcblx0ICAgICAgICAgICAgICAgICAgICBUeC5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUeC5sb3cgID0gdExzdztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgNTsgeCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4NCA9IFRbKHggKyA0KSAlIDVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBUeDEgPSBUWyh4ICsgMSkgJSA1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgVHgxTXN3ID0gVHgxLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFR4MUxzdyA9IFR4MS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBNaXggc3Vycm91bmRpbmcgY29sdW1uc1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0TXN3ID0gVHg0LmhpZ2ggXiAoKFR4MU1zdyA8PCAxKSB8IChUeDFMc3cgPj4+IDMxKSk7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3cgPSBUeDQubG93ICBeICgoVHgxTHN3IDw8IDEpIHwgKFR4MU1zdyA+Pj4gMzEpKTtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW3ggKyA1ICogeV07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGxhbmUuaGlnaCBePSB0TXN3O1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgXj0gdExzdztcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJobyBQaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgbGFuZUluZGV4ID0gMTsgbGFuZUluZGV4IDwgMjU7IGxhbmVJbmRleCsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRNc3c7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHRMc3c7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVNc3cgPSBsYW5lLmhpZ2g7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVMc3cgPSBsYW5lLmxvdztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmhvT2Zmc2V0ID0gUkhPX09GRlNFVFNbbGFuZUluZGV4XTtcblxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFJvdGF0ZSBsYW5lc1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChyaG9PZmZzZXQgPCAzMikge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0TXN3ID0gKGxhbmVNc3cgPDwgcmhvT2Zmc2V0KSB8IChsYW5lTHN3ID4+PiAoMzIgLSByaG9PZmZzZXQpKTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdExzdyA9IChsYW5lTHN3IDw8IHJob09mZnNldCkgfCAobGFuZU1zdyA+Pj4gKDMyIC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChyaG9PZmZzZXQgPj0gMzIpICovIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdE1zdyA9IChsYW5lTHN3IDw8IChyaG9PZmZzZXQgLSAzMikpIHwgKGxhbmVNc3cgPj4+ICg2NCAtIHJob09mZnNldCkpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0THN3ID0gKGxhbmVNc3cgPDwgKHJob09mZnNldCAtIDMyKSkgfCAobGFuZUxzdyA+Pj4gKDY0IC0gcmhvT2Zmc2V0KSk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNwb3NlIGxhbmVzXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIFRQaUxhbmUgPSBUW1BJX0lOREVYRVNbbGFuZUluZGV4XV07XG5cdCAgICAgICAgICAgICAgICAgICAgVFBpTGFuZS5oaWdoID0gdE1zdztcblx0ICAgICAgICAgICAgICAgICAgICBUUGlMYW5lLmxvdyAgPSB0THN3O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBSaG8gcGkgYXQgeCA9IHkgPSAwXG5cdCAgICAgICAgICAgICAgICB2YXIgVDAgPSBUWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgVDAuaGlnaCA9IHN0YXRlMC5oaWdoO1xuXHQgICAgICAgICAgICAgICAgVDAubG93ICA9IHN0YXRlMC5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIENoaVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCA1OyB4KyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDU7IHkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVJbmRleCA9IHggKyA1ICogeTtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmUgPSBzdGF0ZVtsYW5lSW5kZXhdO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVExhbmUgPSBUW2xhbmVJbmRleF07XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUeDFMYW5lID0gVFsoKHggKyAxKSAlIDUpICsgNSAqIHldO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVHgyTGFuZSA9IFRbKCh4ICsgMikgJSA1KSArIDUgKiB5XTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBNaXggcm93c1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmhpZ2ggPSBUTGFuZS5oaWdoIF4gKH5UeDFMYW5lLmhpZ2ggJiBUeDJMYW5lLmhpZ2gpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBsYW5lLmxvdyAgPSBUTGFuZS5sb3cgIF4gKH5UeDFMYW5lLmxvdyAgJiBUeDJMYW5lLmxvdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJb3RhXG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IHN0YXRlWzBdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJvdW5kQ29uc3RhbnQgPSBST1VORF9DT05TVEFOVFNbcm91bmRdO1xuXHQgICAgICAgICAgICAgICAgbGFuZS5oaWdoIF49IHJvdW5kQ29uc3RhbnQuaGlnaDtcblx0ICAgICAgICAgICAgICAgIGxhbmUubG93ICBePSByb3VuZENvbnN0YW50Lmxvdztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVdvcmRzID0gZGF0YS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQml0cyA9IHRoaXMuYmxvY2tTaXplICogMzI7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YVdvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMHgxIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoTWF0aC5jZWlsKChuQml0c0xlZnQgKyAxKSAvIGJsb2NrU2l6ZUJpdHMpICogYmxvY2tTaXplQml0cykgPj4+IDUpIC0gMV0gfD0gMHg4MDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRMZW5ndGhCeXRlcyA9IHRoaXMuY2ZnLm91dHB1dExlbmd0aCAvIDg7XG5cdCAgICAgICAgICAgIHZhciBvdXRwdXRMZW5ndGhMYW5lcyA9IG91dHB1dExlbmd0aEJ5dGVzIC8gODtcblxuXHQgICAgICAgICAgICAvLyBTcXVlZXplXG5cdCAgICAgICAgICAgIHZhciBoYXNoV29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRwdXRMZW5ndGhMYW5lczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBsYW5lID0gc3RhdGVbaV07XG5cdCAgICAgICAgICAgICAgICB2YXIgbGFuZU1zdyA9IGxhbmUuaGlnaDtcblx0ICAgICAgICAgICAgICAgIHZhciBsYW5lTHN3ID0gbGFuZS5sb3c7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgICAgICBsYW5lTXN3ID0gKFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVNc3cgPDwgOCkgIHwgKGxhbmVNc3cgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgKCgobGFuZU1zdyA8PCAyNCkgfCAobGFuZU1zdyA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApXG5cdCAgICAgICAgICAgICAgICApO1xuXHQgICAgICAgICAgICAgICAgbGFuZUxzdyA9IChcblx0ICAgICAgICAgICAgICAgICAgICAoKChsYW5lTHN3IDw8IDgpICB8IChsYW5lTHN3ID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICgoKGxhbmVMc3cgPDwgMjQpIHwgKGxhbmVMc3cgPj4+IDgpKSAgJiAweGZmMDBmZjAwKVxuXHQgICAgICAgICAgICAgICAgKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3F1ZWV6ZSBzdGF0ZSB0byByZXRyaWV2ZSBoYXNoXG5cdCAgICAgICAgICAgICAgICBoYXNoV29yZHMucHVzaChsYW5lTHN3KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hXb3Jkcy5wdXNoKGxhbmVNc3cpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIGZpbmFsIGNvbXB1dGVkIGhhc2hcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChoYXNoV29yZHMsIG91dHB1dExlbmd0aEJ5dGVzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgdmFyIHN0YXRlID0gY2xvbmUuX3N0YXRlID0gdGhpcy5fc3RhdGUuc2xpY2UoMCk7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgc3RhdGVbaV0gPSBzdGF0ZVtpXS5jbG9uZSgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMygnbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMyh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlNIQTMgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEzKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEzKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1NIQTMgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMyk7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTM7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKiogQHByZXNlcnZlXG5cdChjKSAyMDEyIGJ5IENcdTAwRTlkcmljIE1lc25pbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuXHRSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cblx0ICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXHQgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblx0VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXHQqL1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIENvbnN0YW50cyB0YWJsZVxuXHQgICAgdmFyIF96bCA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG5cdCAgICAgICAgNywgIDQsIDEzLCAgMSwgMTAsICA2LCAxNSwgIDMsIDEyLCAgMCwgIDksICA1LCAgMiwgMTQsIDExLCAgOCxcblx0ICAgICAgICAzLCAxMCwgMTQsICA0LCAgOSwgMTUsICA4LCAgMSwgIDIsICA3LCAgMCwgIDYsIDEzLCAxMSwgIDUsIDEyLFxuXHQgICAgICAgIDEsICA5LCAxMSwgMTAsICAwLCAgOCwgMTIsICA0LCAxMywgIDMsICA3LCAxNSwgMTQsICA1LCAgNiwgIDIsXG5cdCAgICAgICAgNCwgIDAsICA1LCAgOSwgIDcsIDEyLCAgMiwgMTAsIDE0LCAgMSwgIDMsICA4LCAxMSwgIDYsIDE1LCAxM10pO1xuXHQgICAgdmFyIF96ciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDUsIDE0LCAgNywgIDAsICA5LCAgMiwgMTEsICA0LCAxMywgIDYsIDE1LCAgOCwgIDEsIDEwLCAgMywgMTIsXG5cdCAgICAgICAgNiwgMTEsICAzLCAgNywgIDAsIDEzLCAgNSwgMTAsIDE0LCAxNSwgIDgsIDEyLCAgNCwgIDksICAxLCAgMixcblx0ICAgICAgICAxNSwgIDUsICAxLCAgMywgIDcsIDE0LCAgNiwgIDksIDExLCAgOCwgMTIsICAyLCAxMCwgIDAsICA0LCAxMyxcblx0ICAgICAgICA4LCAgNiwgIDQsICAxLCAgMywgMTEsIDE1LCAgMCwgIDUsIDEyLCAgMiwgMTMsICA5LCAgNywgMTAsIDE0LFxuXHQgICAgICAgIDEyLCAxNSwgMTAsICA0LCAgMSwgIDUsICA4LCAgNywgIDYsICAyLCAxMywgMTQsICAwLCAgMywgIDksIDExXSk7XG5cdCAgICB2YXIgX3NsID0gV29yZEFycmF5LmNyZWF0ZShbXG5cdCAgICAgICAgIDExLCAxNCwgMTUsIDEyLCAgNSwgIDgsICA3LCAgOSwgMTEsIDEzLCAxNCwgMTUsICA2LCAgNywgIDksICA4LFxuXHQgICAgICAgIDcsIDYsICAgOCwgMTMsIDExLCAgOSwgIDcsIDE1LCAgNywgMTIsIDE1LCAgOSwgMTEsICA3LCAxMywgMTIsXG5cdCAgICAgICAgMTEsIDEzLCAgNiwgIDcsIDE0LCAgOSwgMTMsIDE1LCAxNCwgIDgsIDEzLCAgNiwgIDUsIDEyLCAgNywgIDUsXG5cdCAgICAgICAgICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCAgOSwgIDgsICA5LCAxNCwgIDUsICA2LCAgOCwgIDYsICA1LCAxMixcblx0ICAgICAgICA5LCAxNSwgIDUsIDExLCAgNiwgIDgsIDEzLCAxMiwgIDUsIDEyLCAxMywgMTQsIDExLCAgOCwgIDUsICA2IF0pO1xuXHQgICAgdmFyIF9zciA9IFdvcmRBcnJheS5jcmVhdGUoW1xuXHQgICAgICAgIDgsICA5LCAgOSwgMTEsIDEzLCAxNSwgMTUsICA1LCAgNywgIDcsICA4LCAxMSwgMTQsIDE0LCAxMiwgIDYsXG5cdCAgICAgICAgOSwgMTMsIDE1LCAgNywgMTIsICA4LCAgOSwgMTEsICA3LCAgNywgMTIsICA3LCAgNiwgMTUsIDEzLCAxMSxcblx0ICAgICAgICA5LCAgNywgMTUsIDExLCAgOCwgIDYsICA2LCAxNCwgMTIsIDEzLCAgNSwgMTQsIDEzLCAxMywgIDcsICA1LFxuXHQgICAgICAgIDE1LCAgNSwgIDgsIDExLCAxNCwgMTQsICA2LCAxNCwgIDYsICA5LCAxMiwgIDksIDEyLCAgNSwgMTUsICA4LFxuXHQgICAgICAgIDgsICA1LCAxMiwgIDksIDEyLCAgNSwgMTQsICA2LCAgOCwgMTMsICA2LCAgNSwgMTUsIDEzLCAxMSwgMTEgXSk7XG5cblx0ICAgIHZhciBfaGwgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4MDAwMDAwMDAsIDB4NUE4Mjc5OTksIDB4NkVEOUVCQTEsIDB4OEYxQkJDREMsIDB4QTk1M0ZENEVdKTtcblx0ICAgIHZhciBfaHIgPSAgV29yZEFycmF5LmNyZWF0ZShbIDB4NTBBMjhCRTYsIDB4NUM0REQxMjQsIDB4NkQ3MDNFRjMsIDB4N0E2RDc2RTksIDB4MDAwMDAwMDBdKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSSVBFTUQxNjAgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSSVBFTUQxNjAgPSBDX2FsZ28uUklQRU1EMTYwID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCAgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2LCAweEMzRDJFMUYwXSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0X2kgPSBvZmZzZXQgKyBpO1xuXHQgICAgICAgICAgICAgICAgdmFyIE1fb2Zmc2V0X2kgPSBNW29mZnNldF9pXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXRfaV0gPSAoXG5cdCAgICAgICAgICAgICAgICAgICAgKCgoTV9vZmZzZXRfaSA8PCA4KSAgfCAoTV9vZmZzZXRfaSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAoKChNX29mZnNldF9pIDw8IDI0KSB8IChNX29mZnNldF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIEggID0gdGhpcy5faGFzaC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGhsID0gX2hsLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaHIgPSBfaHIud29yZHM7XG5cdCAgICAgICAgICAgIHZhciB6bCA9IF96bC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHpyID0gX3pyLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2wgPSBfc2wud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzciA9IF9zci53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYWwsIGJsLCBjbCwgZGwsIGVsO1xuXHQgICAgICAgICAgICB2YXIgYXIsIGJyLCBjciwgZHIsIGVyO1xuXG5cdCAgICAgICAgICAgIGFyID0gYWwgPSBIWzBdO1xuXHQgICAgICAgICAgICBiciA9IGJsID0gSFsxXTtcblx0ICAgICAgICAgICAgY3IgPSBjbCA9IEhbMl07XG5cdCAgICAgICAgICAgIGRyID0gZGwgPSBIWzNdO1xuXHQgICAgICAgICAgICBlciA9IGVsID0gSFs0XTtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgdmFyIHQ7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODA7IGkgKz0gMSkge1xuXHQgICAgICAgICAgICAgICAgdCA9IChhbCArICBNW29mZnNldCt6bFtpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYmwsY2wsZGwpICsgaGxbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmMihibCxjbCxkbCkgKyBobFsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJsLGNsLGRsKSArIGhsWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjQoYmwsY2wsZGwpICsgaGxbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYmwsY2wsZGwpICsgaGxbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc2xbaV0pO1xuXHQgICAgICAgICAgICAgICAgdCA9ICh0K2VsKXwwO1xuXHQgICAgICAgICAgICAgICAgYWwgPSBlbDtcblx0ICAgICAgICAgICAgICAgIGVsID0gZGw7XG5cdCAgICAgICAgICAgICAgICBkbCA9IHJvdGwoY2wsIDEwKTtcblx0ICAgICAgICAgICAgICAgIGNsID0gYmw7XG5cdCAgICAgICAgICAgICAgICBibCA9IHQ7XG5cblx0ICAgICAgICAgICAgICAgIHQgPSAoYXIgKyBNW29mZnNldCt6cltpXV0pfDA7XG5cdCAgICAgICAgICAgICAgICBpZiAoaTwxNil7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjUoYnIsY3IsZHIpICsgaHJbMF07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGk8MzIpIHtcblx0XHQgICAgICAgICAgICB0ICs9ICBmNChicixjcixkcikgKyBoclsxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaTw0OCkge1xuXHRcdCAgICAgICAgICAgIHQgKz0gIGYzKGJyLGNyLGRyKSArIGhyWzJdO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpPDY0KSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjIoYnIsY3IsZHIpICsgaHJbM107XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Ugey8vIGlmIChpPDgwKSB7XG5cdFx0ICAgICAgICAgICAgdCArPSAgZjEoYnIsY3IsZHIpICsgaHJbNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB0ID0gdHwwO1xuXHQgICAgICAgICAgICAgICAgdCA9ICByb3RsKHQsc3JbaV0pIDtcblx0ICAgICAgICAgICAgICAgIHQgPSAodCtlcil8MDtcblx0ICAgICAgICAgICAgICAgIGFyID0gZXI7XG5cdCAgICAgICAgICAgICAgICBlciA9IGRyO1xuXHQgICAgICAgICAgICAgICAgZHIgPSByb3RsKGNyLCAxMCk7XG5cdCAgICAgICAgICAgICAgICBjciA9IGJyO1xuXHQgICAgICAgICAgICAgICAgYnIgPSB0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIC8vIEludGVybWVkaWF0ZSBoYXNoIHZhbHVlXG5cdCAgICAgICAgICAgIHQgICAgPSAoSFsxXSArIGNsICsgZHIpfDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsyXSArIGRsICsgZXIpfDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFszXSArIGVsICsgYXIpfDA7XG5cdCAgICAgICAgICAgIEhbM10gPSAoSFs0XSArIGFsICsgYnIpfDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFswXSArIGJsICsgY3IpfDA7XG5cdCAgICAgICAgICAgIEhbMF0gPSAgdDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IChcblx0ICAgICAgICAgICAgICAgICgoKG5CaXRzVG90YWwgPDwgOCkgIHwgKG5CaXRzVG90YWwgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAoKChuQml0c1RvdGFsIDw8IDI0KSB8IChuQml0c1RvdGFsID4+PiA4KSkgICYgMHhmZjAwZmYwMClcblx0ICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IChkYXRhV29yZHMubGVuZ3RoICsgMSkgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoO1xuXHQgICAgICAgICAgICB2YXIgSCA9IGhhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgICAgICB2YXIgSF9pID0gSFtpXTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU3dhcFxuXHQgICAgICAgICAgICAgICAgSFtpXSA9ICgoKEhfaSA8PCA4KSAgfCAoSF9pID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKEhfaSA8PCAyNCkgfCAoSF9pID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXG5cdCAgICBmdW5jdGlvbiBmMSh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoeCkgXiAoeSkgXiAoeikpO1xuXG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGYyKHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkmKHkpKSB8ICgofngpJih6KSkpO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBmMyh4LCB5LCB6KSB7XG5cdCAgICAgICAgcmV0dXJuICgoKHgpIHwgKH4oeSkpKSBeICh6KSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGY0KHgsIHksIHopIHtcblx0ICAgICAgICByZXR1cm4gKCgoeCkgJiAoeikpIHwgKCh5KSYofih6KSkpKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZjUoeCwgeSwgeikge1xuXHQgICAgICAgIHJldHVybiAoKHgpIF4gKCh5KSB8KH4oeikpKSk7XG5cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcm90bCh4LG4pIHtcblx0ICAgICAgICByZXR1cm4gKHg8PG4pIHwgKHg+Pj4oMzItbikpO1xuXHQgICAgfVxuXG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5SSVBFTUQxNjAoJ21lc3NhZ2UnKTtcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlJJUEVNRDE2MCh3b3JkQXJyYXkpO1xuXHQgICAgICovXG5cdCAgICBDLlJJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSGVscGVyKFJJUEVNRDE2MCk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gdGhlIEhNQUMncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGhtYWMgPSBDcnlwdG9KUy5IbWFjUklQRU1EMTYwKG1lc3NhZ2UsIGtleSk7XG5cdCAgICAgKi9cblx0ICAgIEMuSG1hY1JJUEVNRDE2MCA9IEhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihSSVBFTUQxNjApO1xuXHR9KE1hdGgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SSVBFTUQxNjA7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYztcblx0ICAgIHZhciBVdGY4ID0gQ19lbmMuVXRmODtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8qKlxuXHQgICAgICogSE1BQyBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBITUFDID0gQ19hbGdvLkhNQUMgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIEhNQUMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBrZXkgVGhlIHNlY3JldCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBobWFjSGFzaGVyID0gQ3J5cHRvSlMuYWxnby5ITUFDLmNyZWF0ZShDcnlwdG9KUy5hbGdvLlNIQTI1Niwga2V5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoaGFzaGVyLCBrZXkpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgaGFzaGVyID0gdGhpcy5faGFzaGVyID0gbmV3IGhhc2hlci5pbml0KCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gV29yZEFycmF5LCBlbHNlIGFzc3VtZSBXb3JkQXJyYXkgYWxyZWFkeVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0gVXRmOC5wYXJzZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBoYXNoZXJCbG9ja1NpemUgPSBoYXNoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaGFzaGVyQmxvY2tTaXplQnl0ZXMgPSBoYXNoZXJCbG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEFsbG93IGFyYml0cmFyeSBsZW5ndGgga2V5c1xuXHQgICAgICAgICAgICBpZiAoa2V5LnNpZ0J5dGVzID4gaGFzaGVyQmxvY2tTaXplQnl0ZXMpIHtcblx0ICAgICAgICAgICAgICAgIGtleSA9IGhhc2hlci5maW5hbGl6ZShrZXkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAga2V5LmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ2xvbmUga2V5IGZvciBpbm5lciBhbmQgb3V0ZXIgcGFkc1xuXHQgICAgICAgICAgICB2YXIgb0tleSA9IHRoaXMuX29LZXkgPSBrZXkuY2xvbmUoKTtcblx0ICAgICAgICAgICAgdmFyIGlLZXkgPSB0aGlzLl9pS2V5ID0ga2V5LmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBvS2V5V29yZHMgPSBvS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgaUtleVdvcmRzID0gaUtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBYT1Iga2V5cyB3aXRoIHBhZCBjb25zdGFudHNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXNoZXJCbG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgb0tleVdvcmRzW2ldIF49IDB4NWM1YzVjNWM7XG5cdCAgICAgICAgICAgICAgICBpS2V5V29yZHNbaV0gXj0gMHgzNjM2MzYzNjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBvS2V5LnNpZ0J5dGVzID0gaUtleS5zaWdCeXRlcyA9IGhhc2hlckJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIEhNQUMgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGFzaGVyID0gdGhpcy5faGFzaGVyO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0XG5cdCAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXHQgICAgICAgICAgICBoYXNoZXIudXBkYXRlKHRoaXMuX2lLZXkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgSE1BQyB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtITUFDfSBUaGlzIEhNQUMgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhtYWNIYXNoZXIudXBkYXRlKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiAobWVzc2FnZVVwZGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLl9oYXNoZXIudXBkYXRlKG1lc3NhZ2VVcGRhdGUpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBITUFDIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgSE1BQy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhtYWMgPSBobWFjSGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBobWFjID0gaG1hY0hhc2hlci5maW5hbGl6ZSgnbWVzc2FnZScpO1xuXHQgICAgICAgICAqICAgICB2YXIgaG1hYyA9IGhtYWNIYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IHRoaXMuX2hhc2hlcjtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIEhNQUNcblx0ICAgICAgICAgICAgdmFyIGlubmVySGFzaCA9IGhhc2hlci5maW5hbGl6ZShtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICAgIHZhciBobWFjID0gaGFzaGVyLmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQoaW5uZXJIYXNoKSk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGhtYWM7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cdH0oKSk7XG5cblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vaG1hY1wiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGExXCIsIFwiLi9obWFjXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBTSEExID0gQ19hbGdvLlNIQTE7XG5cdCAgICB2YXIgSE1BQyA9IENfYWxnby5ITUFDO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFBhc3N3b3JkLUJhc2VkIEtleSBEZXJpdmF0aW9uIEZ1bmN0aW9uIDIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgUEJLREYyID0gQ19hbGdvLlBCS0RGMiA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0ga2V5U2l6ZSBUaGUga2V5IHNpemUgaW4gd29yZHMgdG8gZ2VuZXJhdGUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UuIERlZmF1bHQ6IFNIQTFcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8gcGVyZm9ybS4gRGVmYXVsdDogMVxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBrZXlTaXplOiAxMjgvMzIsXG5cdCAgICAgICAgICAgIGhhc2hlcjogU0hBMSxcblx0ICAgICAgICAgICAgaXRlcmF0aW9uczogMVxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgZGVyaXZhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIga2RmID0gQ3J5cHRvSlMuYWxnby5QQktERjIuY3JlYXRlKHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uUEJLREYyLmNyZWF0ZSh7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKGNmZykge1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb21wdXRlcyB0aGUgUGFzc3dvcmQtQmFzZWQgS2V5IERlcml2YXRpb24gRnVuY3Rpb24gMi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGtleSA9IGtkZi5jb21wdXRlKHBhc3N3b3JkLCBzYWx0KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb21wdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNmZyA9IHRoaXMuY2ZnO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgSE1BQ1xuXHQgICAgICAgICAgICB2YXIgaG1hYyA9IEhNQUMuY3JlYXRlKGNmZy5oYXNoZXIsIHBhc3N3b3JkKTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZEtleSA9IFdvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrSW5kZXggPSBXb3JkQXJyYXkuY3JlYXRlKFsweDAwMDAwMDAxXSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tJbmRleFdvcmRzID0gYmxvY2tJbmRleC53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpemUgPSBjZmcua2V5U2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBjZmcuaXRlcmF0aW9ucztcblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBrZXlcblx0ICAgICAgICAgICAgd2hpbGUgKGRlcml2ZWRLZXlXb3Jkcy5sZW5ndGggPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBobWFjLnVwZGF0ZShzYWx0KS5maW5hbGl6ZShibG9ja0luZGV4KTtcblx0ICAgICAgICAgICAgICAgIGhtYWMucmVzZXQoKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgYmxvY2tXb3JkcyA9IGJsb2NrLndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrV29yZHNMZW5ndGggPSBibG9ja1dvcmRzLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0aW9uc1xuXHQgICAgICAgICAgICAgICAgdmFyIGludGVybWVkaWF0ZSA9IGJsb2NrO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUgPSBobWFjLmZpbmFsaXplKGludGVybWVkaWF0ZSk7XG5cdCAgICAgICAgICAgICAgICAgICAgaG1hYy5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJtZWRpYXRlV29yZHMgPSBpbnRlcm1lZGlhdGUud29yZHM7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBYT1IgaW50ZXJtZWRpYXRlIHdpdGggYmxvY2tcblx0ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJsb2NrV29yZHNMZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1dvcmRzW2pdIF49IGludGVybWVkaWF0ZVdvcmRzW2pdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgYmxvY2tJbmRleFdvcmRzWzBdKys7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgZGVyaXZlZEtleS5zaWdCeXRlcyA9IGtleVNpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIHJldHVybiBkZXJpdmVkS2V5O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIENvbXB1dGVzIHRoZSBQYXNzd29yZC1CYXNlZCBLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbiAyLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IEEgc2FsdC5cblx0ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBjb21wdXRhdGlvbi5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBkZXJpdmVkIGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAc3RhdGljXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgKiAgICAgdmFyIGtleSA9IENyeXB0b0pTLlBCS0RGMihwYXNzd29yZCwgc2FsdCwgeyBrZXlTaXplOiA4IH0pO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5QQktERjIocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCwgaXRlcmF0aW9uczogMTAwMCB9KTtcblx0ICAgICAqL1xuXHQgICAgQy5QQktERjIgPSBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQsIGNmZykge1xuXHQgICAgICAgIHJldHVybiBQQktERjIuY3JlYXRlKGNmZykuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICB9O1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlBCS0RGMjtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vaG1hY1wiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9zaGExXCIsIFwiLi9obWFjXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBNRDUgPSBDX2FsZ28uTUQ1O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRoaXMga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaXMgbWVhbnQgdG8gY29uZm9ybSB3aXRoIEVWUF9CeXRlc1RvS2V5LlxuXHQgICAgICogd3d3Lm9wZW5zc2wub3JnL2RvY3MvY3J5cHRvL0VWUF9CeXRlc1RvS2V5Lmh0bWxcblx0ICAgICAqL1xuXHQgICAgdmFyIEV2cEtERiA9IENfYWxnby5FdnBLREYgPSBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGtleVNpemUgVGhlIGtleSBzaXplIGluIHdvcmRzIHRvIGdlbmVyYXRlLiBEZWZhdWx0OiA0ICgxMjggYml0cylcblx0ICAgICAgICAgKiBAcHJvcGVydHkge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoIGFsZ29yaXRobSB0byB1c2UuIERlZmF1bHQ6IE1ENVxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGVyYXRpb25zIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBwZXJmb3JtLiBEZWZhdWx0OiAxXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtleVNpemU6IDEyOC8zMixcblx0ICAgICAgICAgICAgaGFzaGVyOiBNRDUsXG5cdCAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDFcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIGRlcml2YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGtkZiA9IENyeXB0b0pTLmFsZ28uRXZwS0RGLmNyZWF0ZSh7IGtleVNpemU6IDggfSk7XG5cdCAgICAgICAgICogICAgIHZhciBrZGYgPSBDcnlwdG9KUy5hbGdvLkV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiA4LCBpdGVyYXRpb25zOiAxMDAwIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVyaXZlcyBhIGtleSBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHNhbHQgQSBzYWx0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBrZXkgPSBrZGYuY29tcHV0ZShwYXNzd29yZCwgc2FsdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29tcHV0ZTogZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0KSB7XG5cdCAgICAgICAgICAgIHZhciBibG9jaztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgY2ZnID0gdGhpcy5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdCBoYXNoZXJcblx0ICAgICAgICAgICAgdmFyIGhhc2hlciA9IGNmZy5oYXNoZXIuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIGRlcml2ZWRLZXkgPSBXb3JkQXJyYXkuY3JlYXRlKCk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5V29yZHMgPSBkZXJpdmVkS2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGNmZy5rZXlTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXRlcmF0aW9ucyA9IGNmZy5pdGVyYXRpb25zO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleVxuXHQgICAgICAgICAgICB3aGlsZSAoZGVyaXZlZEtleVdvcmRzLmxlbmd0aCA8IGtleVNpemUpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChibG9jaykge1xuXHQgICAgICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoYmxvY2spO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSBoYXNoZXIudXBkYXRlKHBhc3N3b3JkKS5maW5hbGl6ZShzYWx0KTtcblx0ICAgICAgICAgICAgICAgIGhhc2hlci5yZXNldCgpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBJdGVyYXRpb25zXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gaGFzaGVyLmZpbmFsaXplKGJsb2NrKTtcblx0ICAgICAgICAgICAgICAgICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgZGVyaXZlZEtleS5jb25jYXQoYmxvY2spO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGRlcml2ZWRLZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICByZXR1cm4gZGVyaXZlZEtleTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBEZXJpdmVzIGEga2V5IGZyb20gYSBwYXNzd29yZC5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gc2FsdCBBIHNhbHQuXG5cdCAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgY29tcHV0YXRpb24uXG5cdCAgICAgKlxuXHQgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGVyaXZlZCBrZXkuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgICogICAgIHZhciBrZXkgPSBDcnlwdG9KUy5FdnBLREYocGFzc3dvcmQsIHNhbHQsIHsga2V5U2l6ZTogOCB9KTtcblx0ICAgICAqICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuRXZwS0RGKHBhc3N3b3JkLCBzYWx0LCB7IGtleVNpemU6IDgsIGl0ZXJhdGlvbnM6IDEwMDAgfSk7XG5cdCAgICAgKi9cblx0ICAgIEMuRXZwS0RGID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBjZmcpIHtcblx0ICAgICAgICByZXR1cm4gRXZwS0RGLmNyZWF0ZShjZmcpLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXHQgICAgfTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5FdnBLREY7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9ldnBrZGZcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDaXBoZXIgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0Q3J5cHRvSlMubGliLkNpcGhlciB8fCAoZnVuY3Rpb24gKHVuZGVmaW5lZCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2U7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtO1xuXHQgICAgdmFyIENfZW5jID0gQy5lbmM7XG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0Zjg7XG5cdCAgICB2YXIgQmFzZTY0ID0gQ19lbmMuQmFzZTY0O1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblx0ICAgIHZhciBFdnBLREYgPSBDX2FsZ28uRXZwS0RGO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBrZXlTaXplIFRoaXMgY2lwaGVyJ3Mga2V5IHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl2U2l6ZSBUaGlzIGNpcGhlcidzIElWIHNpemUuIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IF9FTkNfWEZPUk1fTU9ERSBBIGNvbnN0YW50IHJlcHJlc2VudGluZyBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX0RFQ19YRk9STV9NT0RFIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIGRlY3J5cHRpb24gbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENpcGhlciA9IENfbGliLkNpcGhlciA9IEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gaXYgVGhlIElWIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBCYXNlLmV4dGVuZCgpLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBlbmNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVFbmNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fRU5DX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyB0aGlzIGNpcGhlciBpbiBkZWNyeXB0aW9uIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlcn0gQSBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXIgPSBDcnlwdG9KUy5hbGdvLkFFUy5jcmVhdGVEZWNyeXB0b3Ioa2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVEZWNyeXB0b3I6IGZ1bmN0aW9uIChrZXksIGNmZykge1xuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsIGtleSwgY2ZnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIGNpcGhlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4Zm9ybU1vZGUgRWl0aGVyIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gdHJhbnNvcm1hdGlvbiBtb2RlIGNvbnN0YW50LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVyID0gQ3J5cHRvSlMuYWxnby5BRVMuY3JlYXRlKENyeXB0b0pTLmFsZ28uQUVTLl9FTkNfWEZPUk1fTU9ERSwga2V5V29yZEFycmF5LCB7IGl2OiBpdldvcmRBcnJheSB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoeGZvcm1Nb2RlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAvLyBBcHBseSBjb25maWcgZGVmYXVsdHNcblx0ICAgICAgICAgICAgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBTdG9yZSB0cmFuc2Zvcm0gbW9kZSBhbmQga2V5XG5cdCAgICAgICAgICAgIHRoaXMuX3hmb3JtTW9kZSA9IHhmb3JtTW9kZTtcblx0ICAgICAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGNpcGhlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgY2lwaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBkYXRhIHRvIGJlIGVuY3J5cHRlZCBvciBkZWNyeXB0ZWQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGFVcGRhdGUgVGhlIGRhdGEgdG8gZW5jcnlwdCBvciBkZWNyeXB0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgZGF0YSBhZnRlciBwcm9jZXNzaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLnByb2Nlc3MoJ2RhdGEnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5wcm9jZXNzKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcHJvY2VzczogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGF2YWlsYWJsZSBibG9ja3Ncblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3MoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gcHJvY2Vzcy5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBkYXRhVXBkYXRlIFRoZSBmaW5hbCBkYXRhIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGRhdGEgYWZ0ZXIgZmluYWwgcHJvY2Vzc2luZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGVuY3J5cHRlZCA9IGNpcGhlci5maW5hbGl6ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgZW5jcnlwdGVkID0gY2lwaGVyLmZpbmFsaXplKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIHZhciBlbmNyeXB0ZWQgPSBjaXBoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgZGF0YSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKGRhdGFVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChkYXRhVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtY2lwaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZERhdGEgPSB0aGlzLl9kb0ZpbmFsaXplKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkRGF0YTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBfRU5DX1hGT1JNX01PREU6IDEsXG5cblx0ICAgICAgICBfREVDX1hGT1JNX01PREU6IDIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHNob3J0Y3V0IGZ1bmN0aW9ucyB0byBhIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gb2JqZWN0IHdpdGggZW5jcnlwdCBhbmQgZGVjcnlwdCBzaG9ydGN1dCBmdW5jdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBBRVMgPSBDcnlwdG9KUy5saWIuQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5BRVMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFzc3dvcmRCYXNlZENpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6YWJsZUNpcGhlcjtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2lwaGVyKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXksIGNmZykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0Q2lwaGVyU3RyYXRlZ3koa2V5KS5lbmNyeXB0KGNpcGhlciwgbWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICAgICAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdENpcGhlclN0cmF0ZWd5KGtleSkuZGVjcnlwdChjaXBoZXIsIGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH0oKSlcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2Ugc3RyZWFtIGNpcGhlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgY2lwaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxICgzMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyID0gQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUHJvY2VzcyBwYXJ0aWFsIGJsb2Nrc1xuXHQgICAgICAgICAgICB2YXIgZmluYWxQcm9jZXNzZWRCbG9ja3MgPSB0aGlzLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGZpbmFsUHJvY2Vzc2VkQmxvY2tzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDFcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIE1vZGUgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19tb2RlID0gQy5tb2RlID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWJzdHJhY3QgYmFzZSBibG9jayBjaXBoZXIgbW9kZSB0ZW1wbGF0ZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyTW9kZSA9IENfbGliLkJsb2NrQ2lwaGVyTW9kZSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIHRoaXMgbW9kZSBmb3IgZW5jcnlwdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgQSBibG9jayBjaXBoZXIgaW5zdGFuY2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gaXYgVGhlIElWIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbW9kZSA9IENyeXB0b0pTLm1vZGUuQ0JDLmNyZWF0ZUVuY3J5cHRvcihjaXBoZXIsIGl2LndvcmRzKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjcmVhdGVFbmNyeXB0b3I6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLkVuY3J5cHRvci5jcmVhdGUoY2lwaGVyLCBpdik7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgdGhpcyBtb2RlIGZvciBkZWNyeXB0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBBIGJsb2NrIGNpcGhlciBpbnN0YW5jZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBpdiBUaGUgSVYgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBtb2RlID0gQ3J5cHRvSlMubW9kZS5DQkMuY3JlYXRlRGVjcnlwdG9yKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNyZWF0ZURlY3J5cHRvcjogZnVuY3Rpb24gKGNpcGhlciwgaXYpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXMuRGVjcnlwdG9yLmNyZWF0ZShjaXBoZXIsIGl2KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogSW5pdGlhbGl6ZXMgYSBuZXdseSBjcmVhdGVkIG1vZGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIEEgYmxvY2sgY2lwaGVyIGluc3RhbmNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGl2IFRoZSBJViB3b3Jkcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIG1vZGUgPSBDcnlwdG9KUy5tb2RlLkNCQy5FbmNyeXB0b3IuY3JlYXRlKGNpcGhlciwgaXYud29yZHMpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXIsIGl2KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2NpcGhlciA9IGNpcGhlcjtcblx0ICAgICAgICAgICAgdGhpcy5faXYgPSBpdjtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDaXBoZXIgQmxvY2sgQ2hhaW5pbmcgbW9kZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENCQyA9IENfbW9kZS5DQkMgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFic3RyYWN0IGJhc2UgQ0JDIG1vZGUuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdmFyIENCQyA9IEJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBlbmNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkVuY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFhPUiBhbmQgZW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXHQgICAgICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayh3b3Jkcywgb2Zmc2V0KTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENCQyBkZWNyeXB0b3IuXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgQ0JDLkRlY3J5cHRvciA9IENCQy5leHRlbmQoe1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogUHJvY2Vzc2VzIHRoZSBkYXRhIGJsb2NrIGF0IG9mZnNldC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgVGhlIGRhdGEgd29yZHMgdG8gb3BlcmF0ZSBvbi5cblx0ICAgICAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IHdoZXJlIHRoZSBibG9jayBzdGFydHMuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICBtb2RlLnByb2Nlc3NCbG9jayhkYXRhLndvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyO1xuXHQgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYmxvY2sgdG8gdXNlIHdpdGggbmV4dCBibG9ja1xuXHQgICAgICAgICAgICAgICAgdmFyIHRoaXNCbG9jayA9IHdvcmRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRGVjcnlwdCBhbmQgWE9SXG5cdCAgICAgICAgICAgICAgICBjaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICAgICAgeG9yQmxvY2suY2FsbCh0aGlzLCB3b3Jkcywgb2Zmc2V0LCBibG9ja1NpemUpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBUaGlzIGJsb2NrIGJlY29tZXMgdGhlIHByZXZpb3VzIGJsb2NrXG5cdCAgICAgICAgICAgICAgICB0aGlzLl9wcmV2QmxvY2sgPSB0aGlzQmxvY2s7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIGZ1bmN0aW9uIHhvckJsb2NrKHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICB2YXIgYmxvY2s7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cblx0ICAgICAgICAgICAgLy8gQ2hvb3NlIG1peGluZyBibG9ja1xuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGJsb2NrID0gaXY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgYmxvY2sgPSB0aGlzLl9wcmV2QmxvY2s7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBYT1IgYmxvY2tzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGJsb2NrW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIENCQztcblx0ICAgIH0oKSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogUGFkZGluZyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX3BhZCA9IEMucGFkID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogUEtDUyAjNS83IHBhZGRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQa2NzNyA9IENfcGFkLlBrY3M3ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFBhZHMgZGF0YSB1c2luZyB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUEtDUyAjNS83LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGRhdGEgVGhlIGRhdGEgdG8gcGFkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG11bHRpcGxlIHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIHBhZGRlZCB0by5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnBhZCh3b3JkQXJyYXksIDQpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGEuc2lnQnl0ZXMgJSBibG9ja1NpemVCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZyB3b3JkXG5cdCAgICAgICAgICAgIHZhciBwYWRkaW5nV29yZCA9IChuUGFkZGluZ0J5dGVzIDw8IDI0KSB8IChuUGFkZGluZ0J5dGVzIDw8IDE2KSB8IChuUGFkZGluZ0J5dGVzIDw8IDgpIHwgblBhZGRpbmdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDcmVhdGUgcGFkZGluZ1xuXHQgICAgICAgICAgICB2YXIgcGFkZGluZ1dvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBhZGRpbmdCeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nV29yZHMucHVzaChwYWRkaW5nV29yZCk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSBXb3JkQXJyYXkuY3JlYXRlKHBhZGRpbmdXb3JkcywgblBhZGRpbmdCeXRlcyk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIHBhZGRpbmdcblx0ICAgICAgICAgICAgZGF0YS5jb25jYXQocGFkZGluZyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFVucGFkcyBkYXRhIHRoYXQgaGFkIGJlZW4gcGFkZGVkIHVzaW5nIHRoZSBhbGdvcml0aG0gZGVmaW5lZCBpbiBQS0NTICM1LzcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gZGF0YSBUaGUgZGF0YSB0byB1bnBhZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgQ3J5cHRvSlMucGFkLlBrY3M3LnVucGFkKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGRhdGEud29yZHNbKGRhdGEuc2lnQnl0ZXMgLSAxKSA+Pj4gMl0gJiAweGZmO1xuXG5cdCAgICAgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJhc2UgYmxvY2sgY2lwaGVyIHRlbXBsYXRlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibG9ja1NpemUgVGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgdGhpcyBjaXBoZXIgb3BlcmF0ZXMgb24uIERlZmF1bHQ6IDQgKDEyOCBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlciA9IENpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7TW9kZX0gbW9kZSBUaGUgYmxvY2sgbW9kZSB0byB1c2UuIERlZmF1bHQ6IENCQ1xuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7UGFkZGluZ30gcGFkZGluZyBUaGUgcGFkZGluZyBzdHJhdGVneSB0byB1c2UuIERlZmF1bHQ6IFBrY3M3XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIG1vZGU6IENCQyxcblx0ICAgICAgICAgICAgcGFkZGluZzogUGtjczdcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBtb2RlQ3JlYXRvcjtcblxuXHQgICAgICAgICAgICAvLyBSZXNldCBjaXBoZXJcblx0ICAgICAgICAgICAgQ2lwaGVyLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gY2ZnLml2O1xuXHQgICAgICAgICAgICB2YXIgbW9kZSA9IGNmZy5tb2RlO1xuXG5cdCAgICAgICAgICAgIC8vIFJlc2V0IGJsb2NrIG1vZGVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgbW9kZUNyZWF0b3IgPSBtb2RlLmNyZWF0ZUVuY3J5cHRvcjtcblx0ICAgICAgICAgICAgfSBlbHNlIC8qIGlmICh0aGlzLl94Zm9ybU1vZGUgPT0gdGhpcy5fREVDX1hGT1JNX01PREUpICovIHtcblx0ICAgICAgICAgICAgICAgIG1vZGVDcmVhdG9yID0gbW9kZS5jcmVhdGVEZWNyeXB0b3I7XG5cdCAgICAgICAgICAgICAgICAvLyBLZWVwIGF0IGxlYXN0IG9uZSBibG9jayBpbiB0aGUgYnVmZmVyIGZvciB1bnBhZGRpbmdcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21pbkJ1ZmZlclNpemUgPSAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgJiYgdGhpcy5fbW9kZS5fX2NyZWF0b3IgPT0gbW9kZUNyZWF0b3IpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX21vZGUuaW5pdCh0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlID0gbW9kZUNyZWF0b3IuY2FsbChtb2RlLCB0aGlzLCBpdiAmJiBpdi53b3Jkcyk7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9tb2RlLl9fY3JlYXRvciA9IG1vZGVDcmVhdG9yO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fbW9kZS5wcm9jZXNzQmxvY2sod29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBmaW5hbFByb2Nlc3NlZEJsb2NrcztcblxuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuY2ZnLnBhZGRpbmc7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWxpemVcblx0ICAgICAgICAgICAgaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9FTkNfWEZPUk1fTU9ERSkge1xuXHQgICAgICAgICAgICAgICAgLy8gUGFkIGRhdGFcblx0ICAgICAgICAgICAgICAgIHBhZGRpbmcucGFkKHRoaXMuX2RhdGEsIHRoaXMuYmxvY2tTaXplKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXHQgICAgICAgICAgICB9IGVsc2UgLyogaWYgKHRoaXMuX3hmb3JtTW9kZSA9PSB0aGlzLl9ERUNfWEZPUk1fTU9ERSkgKi8ge1xuXHQgICAgICAgICAgICAgICAgLy8gUHJvY2VzcyBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIGZpbmFsUHJvY2Vzc2VkQmxvY2tzID0gdGhpcy5fcHJvY2VzcyghISdmbHVzaCcpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVbnBhZCBkYXRhXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nLnVucGFkKGZpbmFsUHJvY2Vzc2VkQmxvY2tzKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBmaW5hbFByb2Nlc3NlZEJsb2Nrcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgY29sbGVjdGlvbiBvZiBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0gY2lwaGVydGV4dCBUaGUgcmF3IGNpcGhlcnRleHQuXG5cdCAgICAgKiBAcHJvcGVydHkge1dvcmRBcnJheX0ga2V5IFRoZSBrZXkgdG8gdGhpcyBjaXBoZXJ0ZXh0LlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IGl2IFRoZSBJViB1c2VkIGluIHRoZSBjaXBoZXJpbmcgb3BlcmF0aW9uLlxuXHQgICAgICogQHByb3BlcnR5IHtXb3JkQXJyYXl9IHNhbHQgVGhlIHNhbHQgdXNlZCB3aXRoIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge0NpcGhlcn0gYWxnb3JpdGhtIFRoZSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICogQHByb3BlcnR5IHtNb2RlfSBtb2RlIFRoZSBibG9jayBtb2RlIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge1BhZGRpbmd9IHBhZGRpbmcgVGhlIHBhZGRpbmcgc2NoZW1lIHVzZWQgaW4gdGhlIGNpcGhlcmluZyBvcGVyYXRpb24uXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIuXG5cdCAgICAgKiBAcHJvcGVydHkge0Zvcm1hdH0gZm9ybWF0dGVyIFRoZSBkZWZhdWx0IGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ2lwaGVyUGFyYW1zID0gQ19saWIuQ2lwaGVyUGFyYW1zID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaXBoZXJQYXJhbXMgQW4gb2JqZWN0IHdpdGggYW55IG9mIHRoZSBwb3NzaWJsZSBjaXBoZXIgcGFyYW1ldGVycy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmxpYi5DaXBoZXJQYXJhbXMuY3JlYXRlKHtcblx0ICAgICAgICAgKiAgICAgICAgIGNpcGhlcnRleHQ6IGNpcGhlcnRleHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBrZXk6IGtleVdvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIGl2OiBpdldvcmRBcnJheSxcblx0ICAgICAgICAgKiAgICAgICAgIHNhbHQ6IHNhbHRXb3JkQXJyYXksXG5cdCAgICAgICAgICogICAgICAgICBhbGdvcml0aG06IENyeXB0b0pTLmFsZ28uQUVTLFxuXHQgICAgICAgICAqICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXG5cdCAgICAgICAgICogICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUEtDUzcsXG5cdCAgICAgICAgICogICAgICAgICBibG9ja1NpemU6IDQsXG5cdCAgICAgICAgICogICAgICAgICBmb3JtYXR0ZXI6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMXG5cdCAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgdGhpcy5taXhJbihjaXBoZXJQYXJhbXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtGb3JtYXR9IGZvcm1hdHRlciAoT3B0aW9uYWwpIFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZ2lmaWVkIGNpcGhlciBwYXJhbXMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAdGhyb3dzIEVycm9yIElmIG5laXRoZXIgdGhlIGZvcm1hdHRlciBub3IgdGhlIGRlZmF1bHQgZm9ybWF0dGVyIGlzIHNldC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IGNpcGhlclBhcmFtcyArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gY2lwaGVyUGFyYW1zLnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSBjaXBoZXJQYXJhbXMudG9TdHJpbmcoQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZm9ybWF0dGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZm9ybWF0dGVyIHx8IHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRm9ybWF0IG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfZm9ybWF0ID0gQy5mb3JtYXQgPSB7fTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBPcGVuU1NMIGZvcm1hdHRpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMRm9ybWF0dGVyID0gQ19mb3JtYXQuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIGNpcGhlciBwYXJhbXMgb2JqZWN0IHRvIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlclBhcmFtc30gY2lwaGVyUGFyYW1zIFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBvcGVuU1NMU3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wuc3RyaW5naWZ5KGNpcGhlclBhcmFtcyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAoY2lwaGVyUGFyYW1zKSB7XG5cdCAgICAgICAgICAgIHZhciB3b3JkQXJyYXk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gY2lwaGVyUGFyYW1zLmNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIHZhciBzYWx0ID0gY2lwaGVyUGFyYW1zLnNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gRm9ybWF0XG5cdCAgICAgICAgICAgIGlmIChzYWx0KSB7XG5cdCAgICAgICAgICAgICAgICB3b3JkQXJyYXkgPSBXb3JkQXJyYXkuY3JlYXRlKFsweDUzNjE2Yzc0LCAweDY1NjQ1ZjVmXSkuY29uY2F0KHNhbHQpLmNvbmNhdChjaXBoZXJ0ZXh0KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRBcnJheSA9IGNpcGhlcnRleHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gd29yZEFycmF5LnRvU3RyaW5nKEJhc2U2NCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGFuIE9wZW5TU0wtY29tcGF0aWJsZSBzdHJpbmcgdG8gYSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGVuU1NMU3RyIFRoZSBPcGVuU1NMLWNvbXBhdGlibGUgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJQYXJhbXMgPSBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTC5wYXJzZShvcGVuU1NMU3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKG9wZW5TU0xTdHIpIHtcblx0ICAgICAgICAgICAgdmFyIHNhbHQ7XG5cblx0ICAgICAgICAgICAgLy8gUGFyc2UgYmFzZTY0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gQmFzZTY0LnBhcnNlKG9wZW5TU0xTdHIpO1xuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0V29yZHMgPSBjaXBoZXJ0ZXh0LndvcmRzO1xuXG5cdCAgICAgICAgICAgIC8vIFRlc3QgZm9yIHNhbHRcblx0ICAgICAgICAgICAgaWYgKGNpcGhlcnRleHRXb3Jkc1swXSA9PSAweDUzNjE2Yzc0ICYmIGNpcGhlcnRleHRXb3Jkc1sxXSA9PSAweDY1NjQ1ZjVmKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHNhbHRcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkuY3JlYXRlKGNpcGhlcnRleHRXb3Jkcy5zbGljZSgyLCA0KSk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzYWx0IGZyb20gY2lwaGVydGV4dFxuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dFdvcmRzLnNwbGljZSgwLCA0KTtcblx0ICAgICAgICAgICAgICAgIGNpcGhlcnRleHQuc2lnQnl0ZXMgLT0gMTY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gQ2lwaGVyUGFyYW1zLmNyZWF0ZSh7IGNpcGhlcnRleHQ6IGNpcGhlcnRleHQsIHNhbHQ6IHNhbHQgfSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBIGNpcGhlciB3cmFwcGVyIHRoYXQgcmV0dXJucyBjaXBoZXJ0ZXh0IGFzIGEgc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICovXG5cdCAgICB2YXIgU2VyaWFsaXphYmxlQ2lwaGVyID0gQ19saWIuU2VyaWFsaXphYmxlQ2lwaGVyID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7Rm9ybWF0dGVyfSBmb3JtYXQgVGhlIGZvcm1hdHRpbmcgc3RyYXRlZ3kgdG8gY29udmVydCBjaXBoZXIgcGFyYW0gb2JqZWN0cyB0byBhbmQgZnJvbSBhIHN0cmluZy4gRGVmYXVsdDogT3BlblNTTFxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICBmb3JtYXQ6IE9wZW5TU0xGb3JtYXR0ZXJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEVuY3J5cHRzIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBlbmNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSBrZXkgVGhlIGtleS5cblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7Q2lwaGVyUGFyYW1zfSBBIGNpcGhlciBwYXJhbXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2lwaGVydGV4dFBhcmFtcyA9IENyeXB0b0pTLmxpYi5TZXJpYWxpemFibGVDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwga2V5KTtcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIG1lc3NhZ2UsIGtleSwgeyBpdjogaXYgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlNlcmlhbGl6YWJsZUNpcGhlci5lbmNyeXB0KENyeXB0b0pTLmFsZ28uQUVTLCBtZXNzYWdlLCBrZXksIHsgaXY6IGl2LCBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIGtleSwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBlbmNyeXB0b3IgPSBjaXBoZXIuY3JlYXRlRW5jcnlwdG9yKGtleSwgY2ZnKTtcblx0ICAgICAgICAgICAgdmFyIGNpcGhlcnRleHQgPSBlbmNyeXB0b3IuZmluYWxpemUobWVzc2FnZSk7XG5cblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGNpcGhlckNmZyA9IGVuY3J5cHRvci5jZmc7XG5cblx0ICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gc2VyaWFsaXphYmxlIGNpcGhlciBwYXJhbXNcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoe1xuXHQgICAgICAgICAgICAgICAgY2lwaGVydGV4dDogY2lwaGVydGV4dCxcblx0ICAgICAgICAgICAgICAgIGtleToga2V5LFxuXHQgICAgICAgICAgICAgICAgaXY6IGNpcGhlckNmZy5pdixcblx0ICAgICAgICAgICAgICAgIGFsZ29yaXRobTogY2lwaGVyLFxuXHQgICAgICAgICAgICAgICAgbW9kZTogY2lwaGVyQ2ZnLm1vZGUsXG5cdCAgICAgICAgICAgICAgICBwYWRkaW5nOiBjaXBoZXJDZmcucGFkZGluZyxcblx0ICAgICAgICAgICAgICAgIGJsb2NrU2l6ZTogY2lwaGVyLmJsb2NrU2l6ZSxcblx0ICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY2ZnLmZvcm1hdFxuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRGVjcnlwdHMgc2VyaWFsaXplZCBjaXBoZXJ0ZXh0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJ9IGNpcGhlciBUaGUgY2lwaGVyIGFsZ29yaXRobSB0byB1c2UuXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN8c3RyaW5nfSBjaXBoZXJ0ZXh0IFRoZSBjaXBoZXJ0ZXh0IHRvIGRlY3J5cHQuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IGtleSBUaGUga2V5LlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBwbGFpbnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICogICAgIHZhciBwbGFpbnRleHQgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsIGtleSwgeyBpdjogaXYsIGZvcm1hdDogQ3J5cHRvSlMuZm9ybWF0Lk9wZW5TU0wgfSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZGVjcnlwdDogZnVuY3Rpb24gKGNpcGhlciwgY2lwaGVydGV4dCwga2V5LCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIENpcGhlclBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdGhpcy5fcGFyc2UoY2lwaGVydGV4dCwgY2ZnLmZvcm1hdCk7XG5cblx0ICAgICAgICAgICAgLy8gRGVjcnlwdFxuXHQgICAgICAgICAgICB2YXIgcGxhaW50ZXh0ID0gY2lwaGVyLmNyZWF0ZURlY3J5cHRvcihrZXksIGNmZykuZmluYWxpemUoY2lwaGVydGV4dC5jaXBoZXJ0ZXh0KTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdG8gQ2lwaGVyUGFyYW1zLFxuXHQgICAgICAgICAqIGVsc2UgYXNzdW1lZCBDaXBoZXJQYXJhbXMgYWxyZWFkeSBhbmQgcmV0dXJucyBjaXBoZXJ0ZXh0IHVuY2hhbmdlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKiBAcGFyYW0ge0Zvcm1hdHRlcn0gZm9ybWF0IFRoZSBmb3JtYXR0aW5nIHN0cmF0ZWd5IHRvIHVzZSB0byBwYXJzZSBzZXJpYWxpemVkIGNpcGhlcnRleHQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSB1bnNlcmlhbGl6ZWQgY2lwaGVydGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlcnRleHRQYXJhbXMgPSBDcnlwdG9KUy5saWIuU2VyaWFsaXphYmxlQ2lwaGVyLl9wYXJzZShjaXBoZXJ0ZXh0U3RyaW5nT3JQYXJhbXMsIGZvcm1hdCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3BhcnNlOiBmdW5jdGlvbiAoY2lwaGVydGV4dCwgZm9ybWF0KSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgY2lwaGVydGV4dCA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5wYXJzZShjaXBoZXJ0ZXh0LCB0aGlzKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogS2V5IGRlcml2YXRpb24gZnVuY3Rpb24gbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19rZGYgPSBDLmtkZiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIE9wZW5TU0wga2V5IGRlcml2YXRpb24gZnVuY3Rpb24uXG5cdCAgICAgKi9cblx0ICAgIHZhciBPcGVuU1NMS2RmID0gQ19rZGYuT3BlblNTTCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZXJpdmVzIGEga2V5IGFuZCBJViBmcm9tIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIHRvIGRlcml2ZSBmcm9tLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrZXlTaXplIFRoZSBzaXplIGluIHdvcmRzIG9mIHRoZSBrZXkgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGl2U2l6ZSBUaGUgc2l6ZSBpbiB3b3JkcyBvZiB0aGUgSVYgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBzYWx0IChPcHRpb25hbCkgQSA2NC1iaXQgc2FsdCB0byB1c2UuIElmIG9taXR0ZWQsIGEgc2FsdCB3aWxsIGJlIGdlbmVyYXRlZCByYW5kb21seS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0NpcGhlclBhcmFtc30gQSBjaXBoZXIgcGFyYW1zIG9iamVjdCB3aXRoIHRoZSBrZXksIElWLCBhbmQgc2FsdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGRlcml2ZWRQYXJhbXMgPSBDcnlwdG9KUy5rZGYuT3BlblNTTC5leGVjdXRlKCdQYXNzd29yZCcsIDI1Ni8zMiwgMTI4LzMyLCAnc2FsdHNhbHQnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiAocGFzc3dvcmQsIGtleVNpemUsIGl2U2l6ZSwgc2FsdCkge1xuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSByYW5kb20gc2FsdFxuXHQgICAgICAgICAgICBpZiAoIXNhbHQpIHtcblx0ICAgICAgICAgICAgICAgIHNhbHQgPSBXb3JkQXJyYXkucmFuZG9tKDY0LzgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gRGVyaXZlIGtleSBhbmQgSVZcblx0ICAgICAgICAgICAgdmFyIGtleSA9IEV2cEtERi5jcmVhdGUoeyBrZXlTaXplOiBrZXlTaXplICsgaXZTaXplIH0pLmNvbXB1dGUocGFzc3dvcmQsIHNhbHQpO1xuXG5cdCAgICAgICAgICAgIC8vIFNlcGFyYXRlIGtleSBhbmQgSVZcblx0ICAgICAgICAgICAgdmFyIGl2ID0gV29yZEFycmF5LmNyZWF0ZShrZXkud29yZHMuc2xpY2Uoa2V5U2l6ZSksIGl2U2l6ZSAqIDQpO1xuXHQgICAgICAgICAgICBrZXkuc2lnQnl0ZXMgPSBrZXlTaXplICogNDtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gcGFyYW1zXG5cdCAgICAgICAgICAgIHJldHVybiBDaXBoZXJQYXJhbXMuY3JlYXRlKHsga2V5OiBrZXksIGl2OiBpdiwgc2FsdDogc2FsdCB9KTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEEgc2VyaWFsaXphYmxlIGNpcGhlciB3cmFwcGVyIHRoYXQgZGVyaXZlcyB0aGUga2V5IGZyb20gYSBwYXNzd29yZCxcblx0ICAgICAqIGFuZCByZXR1cm5zIGNpcGhlcnRleHQgYXMgYSBzZXJpYWxpemFibGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgKi9cblx0ICAgIHZhciBQYXNzd29yZEJhc2VkQ2lwaGVyID0gQ19saWIuUGFzc3dvcmRCYXNlZENpcGhlciA9IFNlcmlhbGl6YWJsZUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwcm9wZXJ0eSB7S0RGfSBrZGYgVGhlIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIHRvIHVzZSB0byBnZW5lcmF0ZSBhIGtleSBhbmQgSVYgZnJvbSBhIHBhc3N3b3JkLiBEZWZhdWx0OiBPcGVuU1NMXG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2ZnOiBTZXJpYWxpemFibGVDaXBoZXIuY2ZnLmV4dGVuZCh7XG5cdCAgICAgICAgICAgIGtkZjogT3BlblNTTEtkZlxuXHQgICAgICAgIH0pLFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRW5jcnlwdHMgYSBtZXNzYWdlIHVzaW5nIGEgcGFzc3dvcmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0NpcGhlcn0gY2lwaGVyIFRoZSBjaXBoZXIgYWxnb3JpdGhtIHRvIHVzZS5cblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZW5jcnlwdC5cblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHBhc3N3b3JkLlxuXHQgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IEEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJyk7XG5cdCAgICAgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0UGFyYW1zID0gQ3J5cHRvSlMubGliLlBhc3N3b3JkQmFzZWRDaXBoZXIuZW5jcnlwdChDcnlwdG9KUy5hbGdvLkFFUywgbWVzc2FnZSwgJ3Bhc3N3b3JkJywgeyBmb3JtYXQ6IENyeXB0b0pTLmZvcm1hdC5PcGVuU1NMIH0pO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGVuY3J5cHQ6IGZ1bmN0aW9uIChjaXBoZXIsIG1lc3NhZ2UsIHBhc3N3b3JkLCBjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIGNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUpO1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBJViB0byBjb25maWdcblx0ICAgICAgICAgICAgY2ZnLml2ID0gZGVyaXZlZFBhcmFtcy5pdjtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gU2VyaWFsaXphYmxlQ2lwaGVyLmVuY3J5cHQuY2FsbCh0aGlzLCBjaXBoZXIsIG1lc3NhZ2UsIGRlcml2ZWRQYXJhbXMua2V5LCBjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIE1peCBpbiBkZXJpdmVkIHBhcmFtc1xuXHQgICAgICAgICAgICBjaXBoZXJ0ZXh0Lm1peEluKGRlcml2ZWRQYXJhbXMpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjaXBoZXJ0ZXh0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBEZWNyeXB0cyBzZXJpYWxpemVkIGNpcGhlcnRleHQgdXNpbmcgYSBwYXNzd29yZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyfSBjaXBoZXIgVGhlIGNpcGhlciBhbGdvcml0aG0gdG8gdXNlLlxuXHQgICAgICAgICAqIEBwYXJhbSB7Q2lwaGVyUGFyYW1zfHN0cmluZ30gY2lwaGVydGV4dCBUaGUgY2lwaGVydGV4dCB0byBkZWNyeXB0LlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgcGFzc3dvcmQuXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIG9wZXJhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHBsYWludGV4dC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGZvcm1hdHRlZENpcGhlcnRleHQsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKiAgICAgdmFyIHBsYWludGV4dCA9IENyeXB0b0pTLmxpYi5QYXNzd29yZEJhc2VkQ2lwaGVyLmRlY3J5cHQoQ3J5cHRvSlMuYWxnby5BRVMsIGNpcGhlcnRleHRQYXJhbXMsICdwYXNzd29yZCcsIHsgZm9ybWF0OiBDcnlwdG9KUy5mb3JtYXQuT3BlblNTTCB9KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbiAoY2lwaGVyLCBjaXBoZXJ0ZXh0LCBwYXNzd29yZCwgY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICBjZmcgPSB0aGlzLmNmZy5leHRlbmQoY2ZnKTtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBDaXBoZXJQYXJhbXNcblx0ICAgICAgICAgICAgY2lwaGVydGV4dCA9IHRoaXMuX3BhcnNlKGNpcGhlcnRleHQsIGNmZy5mb3JtYXQpO1xuXG5cdCAgICAgICAgICAgIC8vIERlcml2ZSBrZXkgYW5kIG90aGVyIHBhcmFtc1xuXHQgICAgICAgICAgICB2YXIgZGVyaXZlZFBhcmFtcyA9IGNmZy5rZGYuZXhlY3V0ZShwYXNzd29yZCwgY2lwaGVyLmtleVNpemUsIGNpcGhlci5pdlNpemUsIGNpcGhlcnRleHQuc2FsdCk7XG5cblx0ICAgICAgICAgICAgLy8gQWRkIElWIHRvIGNvbmZpZ1xuXHQgICAgICAgICAgICBjZmcuaXYgPSBkZXJpdmVkUGFyYW1zLml2O1xuXG5cdCAgICAgICAgICAgIC8vIERlY3J5cHRcblx0ICAgICAgICAgICAgdmFyIHBsYWludGV4dCA9IFNlcmlhbGl6YWJsZUNpcGhlci5kZWNyeXB0LmNhbGwodGhpcywgY2lwaGVyLCBjaXBoZXJ0ZXh0LCBkZXJpdmVkUGFyYW1zLmtleSwgY2ZnKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gcGxhaW50ZXh0O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXHR9KCkpO1xuXG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogQ2lwaGVyIEZlZWRiYWNrIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNGQiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ0ZCID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgQ0ZCLkVuY3J5cHRvciA9IENGQi5leHRlbmQoe1xuXHQgICAgICAgIHByb2Nlc3NCbG9jazogZnVuY3Rpb24gKHdvcmRzLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBjaXBoZXIgPSB0aGlzLl9jaXBoZXI7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtQW5kRW5jcnlwdC5jYWxsKHRoaXMsIHdvcmRzLCBvZmZzZXQsIGJsb2NrU2l6ZSwgY2lwaGVyKTtcblxuXHQgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGJsb2NrIHRvIHVzZSB3aXRoIG5leHQgYmxvY2tcblx0ICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gd29yZHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBibG9ja1NpemUpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBDRkIuRGVjcnlwdG9yID0gQ0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlcjtcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IGNpcGhlci5ibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBibG9jayB0byB1c2Ugd2l0aCBuZXh0IGJsb2NrXG5cdCAgICAgICAgICAgIHZhciB0aGlzQmxvY2sgPSB3b3Jkcy5zbGljZShvZmZzZXQsIG9mZnNldCArIGJsb2NrU2l6ZSk7XG5cblx0ICAgICAgICAgICAgZ2VuZXJhdGVLZXlzdHJlYW1BbmRFbmNyeXB0LmNhbGwodGhpcywgd29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpO1xuXG5cdCAgICAgICAgICAgIC8vIFRoaXMgYmxvY2sgYmVjb21lcyB0aGUgcHJldmlvdXMgYmxvY2tcblx0ICAgICAgICAgICAgdGhpcy5fcHJldkJsb2NrID0gdGhpc0Jsb2NrO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBnZW5lcmF0ZUtleXN0cmVhbUFuZEVuY3J5cHQod29yZHMsIG9mZnNldCwgYmxvY2tTaXplLCBjaXBoZXIpIHtcblx0ICAgICAgICB2YXIga2V5c3RyZWFtO1xuXG5cdCAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICBrZXlzdHJlYW0gPSBpdi5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICAvLyBSZW1vdmUgSVYgZm9yIHN1YnNlcXVlbnQgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGtleXN0cmVhbSA9IHRoaXMuX3ByZXZCbG9jaztcblx0ICAgICAgICB9XG5cdCAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIENGQjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNGQjtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBDb3VudGVyIGJsb2NrIG1vZGUuXG5cdCAqL1xuXHRDcnlwdG9KUy5tb2RlLkNUUiA9IChmdW5jdGlvbiAoKSB7XG5cdCAgICB2YXIgQ1RSID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHQgICAgdmFyIEVuY3J5cHRvciA9IENUUi5FbmNyeXB0b3IgPSBDVFIuZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSBjb3VudGVyLnNsaWNlKDApO1xuXHQgICAgICAgICAgICBjaXBoZXIuZW5jcnlwdEJsb2NrKGtleXN0cmVhbSwgMCk7XG5cblx0ICAgICAgICAgICAgLy8gSW5jcmVtZW50IGNvdW50ZXJcblx0ICAgICAgICAgICAgY291bnRlcltibG9ja1NpemUgLSAxXSA9IChjb3VudGVyW2Jsb2NrU2l6ZSAtIDFdICsgMSkgfCAwXG5cblx0ICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tvZmZzZXQgKyBpXSBePSBrZXlzdHJlYW1baV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgQ1RSLkRlY3J5cHRvciA9IEVuY3J5cHRvcjtcblxuXHQgICAgcmV0dXJuIENUUjtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5tb2RlLkNUUjtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKiBAcHJlc2VydmVcblx0ICogQ291bnRlciBibG9jayBtb2RlIGNvbXBhdGlibGUgd2l0aCAgRHIgQnJpYW4gR2xhZG1hbiBmaWxlZW5jLmNcblx0ICogZGVyaXZlZCBmcm9tIENyeXB0b0pTLm1vZGUuQ1RSXG5cdCAqIEphbiBIcnVieSBqaHJ1Ynkud2ViQGdtYWlsLmNvbVxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBDVFJHbGFkbWFuID0gQ3J5cHRvSlMubGliLkJsb2NrQ2lwaGVyTW9kZS5leHRlbmQoKTtcblxuXHRcdGZ1bmN0aW9uIGluY1dvcmQod29yZClcblx0XHR7XG5cdFx0XHRpZiAoKCh3b3JkID4+IDI0KSAmIDB4ZmYpID09PSAweGZmKSB7IC8vb3ZlcmZsb3dcblx0XHRcdHZhciBiMSA9ICh3b3JkID4+IDE2KSYweGZmO1xuXHRcdFx0dmFyIGIyID0gKHdvcmQgPj4gOCkmMHhmZjtcblx0XHRcdHZhciBiMyA9IHdvcmQgJiAweGZmO1xuXG5cdFx0XHRpZiAoYjEgPT09IDB4ZmYpIC8vIG92ZXJmbG93IGIxXG5cdFx0XHR7XG5cdFx0XHRiMSA9IDA7XG5cdFx0XHRpZiAoYjIgPT09IDB4ZmYpXG5cdFx0XHR7XG5cdFx0XHRcdGIyID0gMDtcblx0XHRcdFx0aWYgKGIzID09PSAweGZmKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YjMgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdCsrYjM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0KytiMjtcblx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdCsrYjE7XG5cdFx0XHR9XG5cblx0XHRcdHdvcmQgPSAwO1xuXHRcdFx0d29yZCArPSAoYjEgPDwgMTYpO1xuXHRcdFx0d29yZCArPSAoYjIgPDwgOCk7XG5cdFx0XHR3b3JkICs9IGIzO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0d29yZCArPSAoMHgwMSA8PCAyNCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gd29yZDtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBpbmNDb3VudGVyKGNvdW50ZXIpXG5cdFx0e1xuXHRcdFx0aWYgKChjb3VudGVyWzBdID0gaW5jV29yZChjb3VudGVyWzBdKSkgPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGVuY3JfZGF0YSBpbiBmaWxlZW5jLmMgZnJvbSAgRHIgQnJpYW4gR2xhZG1hbidzIGNvdW50cyBvbmx5IHdpdGggRFdPUkQgaiA8IDhcblx0XHRcdFx0Y291bnRlclsxXSA9IGluY1dvcmQoY291bnRlclsxXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY291bnRlcjtcblx0XHR9XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBDVFJHbGFkbWFuLkVuY3J5cHRvciA9IENUUkdsYWRtYW4uZXh0ZW5kKHtcblx0ICAgICAgICBwcm9jZXNzQmxvY2s6IGZ1bmN0aW9uICh3b3Jkcywgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fY2lwaGVyXG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemUgPSBjaXBoZXIuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgaXYgPSB0aGlzLl9pdjtcblx0ICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbVxuXHQgICAgICAgICAgICBpZiAoaXYpIHtcblx0ICAgICAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLl9jb3VudGVyID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cblx0XHRcdFx0aW5jQ291bnRlcihjb3VudGVyKTtcblxuXHRcdFx0XHR2YXIga2V5c3RyZWFtID0gY291bnRlci5zbGljZSgwKTtcblx0ICAgICAgICAgICAgY2lwaGVyLmVuY3J5cHRCbG9jayhrZXlzdHJlYW0sIDApO1xuXG5cdCAgICAgICAgICAgIC8vIEVuY3J5cHRcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbb2Zmc2V0ICsgaV0gXj0ga2V5c3RyZWFtW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIENUUkdsYWRtYW4uRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gQ1RSR2xhZG1hbjtcblx0fSgpKTtcblxuXG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMubW9kZS5DVFJHbGFkbWFuO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIE91dHB1dCBGZWVkYmFjayBibG9jayBtb2RlLlxuXHQgKi9cblx0Q3J5cHRvSlMubW9kZS5PRkIgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgdmFyIE9GQiA9IENyeXB0b0pTLmxpYi5CbG9ja0NpcGhlck1vZGUuZXh0ZW5kKCk7XG5cblx0ICAgIHZhciBFbmNyeXB0b3IgPSBPRkIuRW5jcnlwdG9yID0gT0ZCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIGNpcGhlciA9IHRoaXMuX2NpcGhlclxuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gY2lwaGVyLmJsb2NrU2l6ZTtcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5faXY7XG5cdCAgICAgICAgICAgIHZhciBrZXlzdHJlYW0gPSB0aGlzLl9rZXlzdHJlYW07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUga2V5c3RyZWFtXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAga2V5c3RyZWFtID0gdGhpcy5fa2V5c3RyZWFtID0gaXYuc2xpY2UoMCk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBJViBmb3Igc3Vic2VxdWVudCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIHRoaXMuX2l2ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNpcGhlci5lbmNyeXB0QmxvY2soa2V5c3RyZWFtLCAwKTtcblxuXHQgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tTaXplOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW29mZnNldCArIGldIF49IGtleXN0cmVhbVtpXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBPRkIuRGVjcnlwdG9yID0gRW5jcnlwdG9yO1xuXG5cdCAgICByZXR1cm4gT0ZCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuT0ZCO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEVsZWN0cm9uaWMgQ29kZWJvb2sgYmxvY2sgbW9kZS5cblx0ICovXG5cdENyeXB0b0pTLm1vZGUuRUNCID0gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBFQ0IgPSBDcnlwdG9KUy5saWIuQmxvY2tDaXBoZXJNb2RlLmV4dGVuZCgpO1xuXG5cdCAgICBFQ0IuRW5jcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICBFQ0IuRGVjcnlwdG9yID0gRUNCLmV4dGVuZCh7XG5cdCAgICAgICAgcHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAod29yZHMsIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHdvcmRzLCBvZmZzZXQpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gRUNCO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLm1vZGUuRUNCO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEFOU0kgWC45MjMgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5BbnNpWDkyMyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAvLyBDb3VudCBwYWRkaW5nIGJ5dGVzXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBibG9ja1NpemVCeXRlcyAtIGRhdGFTaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gQ29tcHV0ZSBsYXN0IGJ5dGUgcG9zaXRpb25cblx0ICAgICAgICB2YXIgbGFzdEJ5dGVQb3MgPSBkYXRhU2lnQnl0ZXMgKyBuUGFkZGluZ0J5dGVzIC0gMTtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLndvcmRzW2xhc3RCeXRlUG9zID4+PiAyXSB8PSBuUGFkZGluZ0J5dGVzIDw8ICgyNCAtIChsYXN0Qnl0ZVBvcyAlIDQpICogOCk7XG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyArPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gR2V0IG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGZyb20gbGFzdCBieXRlXG5cdCAgICAgICAgdmFyIG5QYWRkaW5nQnl0ZXMgPSBkYXRhLndvcmRzWyhkYXRhLnNpZ0J5dGVzIC0gMSkgPj4+IDJdICYgMHhmZjtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBwYWRkaW5nXG5cdCAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuUGFkZGluZ0J5dGVzO1xuXHQgICAgfVxuXHR9O1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLnBhZC5BbnNpeDkyMztcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdC8qKlxuXHQgKiBJU08gMTAxMjYgcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc28xMDEyNiA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIENvdW50IHBhZGRpbmcgYnl0ZXNcblx0ICAgICAgICB2YXIgblBhZGRpbmdCeXRlcyA9IGJsb2NrU2l6ZUJ5dGVzIC0gZGF0YS5zaWdCeXRlcyAlIGJsb2NrU2l6ZUJ5dGVzO1xuXG5cdCAgICAgICAgLy8gUGFkXG5cdCAgICAgICAgZGF0YS5jb25jYXQoQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oblBhZGRpbmdCeXRlcyAtIDEpKS5cblx0ICAgICAgICAgICAgIGNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbblBhZGRpbmdCeXRlcyA8PCAyNF0sIDEpKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIEdldCBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBmcm9tIGxhc3QgYnl0ZVxuXHQgICAgICAgIHZhciBuUGFkZGluZ0J5dGVzID0gZGF0YS53b3Jkc1soZGF0YS5zaWdCeXRlcyAtIDEpID4+PiAyXSAmIDB4ZmY7XG5cblx0ICAgICAgICAvLyBSZW1vdmUgcGFkZGluZ1xuXHQgICAgICAgIGRhdGEuc2lnQnl0ZXMgLT0gblBhZGRpbmdCeXRlcztcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuSXNvMTAxMjY7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQvKipcblx0ICogSVNPL0lFQyA5Nzk3LTEgUGFkZGluZyBNZXRob2QgMi5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5Jc285Nzk3MSA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIEFkZCAweDgwIGJ5dGVcblx0ICAgICAgICBkYXRhLmNvbmNhdChDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHg4MDAwMDAwMF0sIDEpKTtcblxuXHQgICAgICAgIC8vIFplcm8gcGFkIHRoZSByZXN0XG5cdCAgICAgICAgQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nLnBhZChkYXRhLCBibG9ja1NpemUpO1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgLy8gUmVtb3ZlIHplcm8gcGFkZGluZ1xuXHQgICAgICAgIENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZy51bnBhZChkYXRhKTtcblxuXHQgICAgICAgIC8vIFJlbW92ZSBvbmUgbW9yZSBieXRlIC0tIHRoZSAweDgwIGJ5dGVcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzLS07XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLklzbzk3OTcxO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIFplcm8gcGFkZGluZyBzdHJhdGVneS5cblx0ICovXG5cdENyeXB0b0pTLnBhZC5aZXJvUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKGRhdGEsIGJsb2NrU2l6ZSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGJsb2NrU2l6ZUJ5dGVzID0gYmxvY2tTaXplICogNDtcblxuXHQgICAgICAgIC8vIFBhZFxuXHQgICAgICAgIGRhdGEuY2xhbXAoKTtcblx0ICAgICAgICBkYXRhLnNpZ0J5dGVzICs9IGJsb2NrU2l6ZUJ5dGVzIC0gKChkYXRhLnNpZ0J5dGVzICUgYmxvY2tTaXplQnl0ZXMpIHx8IGJsb2NrU2l6ZUJ5dGVzKTtcblx0ICAgIH0sXG5cblx0ICAgIHVucGFkOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAvLyBVbnBhZFxuXHQgICAgICAgIHZhciBpID0gZGF0YS5zaWdCeXRlcyAtIDE7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IGRhdGEuc2lnQnl0ZXMgLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgICAgICBpZiAoKChkYXRhV29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmKSkge1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGkgKyAxO1xuXHQgICAgICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cdH07XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMucGFkLlplcm9QYWRkaW5nO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0LyoqXG5cdCAqIEEgbm9vcCBwYWRkaW5nIHN0cmF0ZWd5LlxuXHQgKi9cblx0Q3J5cHRvSlMucGFkLk5vUGFkZGluZyA9IHtcblx0ICAgIHBhZDogZnVuY3Rpb24gKCkge1xuXHQgICAgfSxcblxuXHQgICAgdW5wYWQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgIH1cblx0fTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5wYWQuTm9QYWRkaW5nO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIENpcGhlclBhcmFtcyA9IENfbGliLkNpcGhlclBhcmFtcztcblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jO1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleDtcblx0ICAgIHZhciBDX2Zvcm1hdCA9IEMuZm9ybWF0O1xuXG5cdCAgICB2YXIgSGV4Rm9ybWF0dGVyID0gQ19mb3JtYXQuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIHRoZSBjaXBoZXJ0ZXh0IG9mIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QgdG8gYSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtDaXBoZXJQYXJhbXN9IGNpcGhlclBhcmFtcyBUaGUgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBoZXhhZGVjaW1hbGx5IGVuY29kZWQgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgaGV4U3RyaW5nID0gQ3J5cHRvSlMuZm9ybWF0LkhleC5zdHJpbmdpZnkoY2lwaGVyUGFyYW1zKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChjaXBoZXJQYXJhbXMpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGNpcGhlclBhcmFtcy5jaXBoZXJ0ZXh0LnRvU3RyaW5nKEhleCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4YWRlY2ltYWxseSBlbmNvZGVkIGNpcGhlcnRleHQgc3RyaW5nIHRvIGEgY2lwaGVyIHBhcmFtcyBvYmplY3QuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgVGhlIGhleGFkZWNpbWFsbHkgZW5jb2RlZCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtDaXBoZXJQYXJhbXN9IFRoZSBjaXBoZXIgcGFyYW1zIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGNpcGhlclBhcmFtcyA9IENyeXB0b0pTLmZvcm1hdC5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGlucHV0KSB7XG5cdCAgICAgICAgICAgIHZhciBjaXBoZXJ0ZXh0ID0gSGV4LnBhcnNlKGlucHV0KTtcblx0ICAgICAgICAgICAgcmV0dXJuIENpcGhlclBhcmFtcy5jcmVhdGUoeyBjaXBoZXJ0ZXh0OiBjaXBoZXJ0ZXh0IH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH07XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuZm9ybWF0LkhleDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIEJsb2NrQ2lwaGVyID0gQ19saWIuQmxvY2tDaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBMb29rdXAgdGFibGVzXG5cdCAgICB2YXIgU0JPWCA9IFtdO1xuXHQgICAgdmFyIElOVl9TQk9YID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8wID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8xID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgU1VCX01JWF8zID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMCA9IFtdO1xuXHQgICAgdmFyIElOVl9TVUJfTUlYXzEgPSBbXTtcblx0ICAgIHZhciBJTlZfU1VCX01JWF8yID0gW107XG5cdCAgICB2YXIgSU5WX1NVQl9NSVhfMyA9IFtdO1xuXG5cdCAgICAvLyBDb21wdXRlIGxvb2t1cCB0YWJsZXNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gQ29tcHV0ZSBkb3VibGUgdGFibGVcblx0ICAgICAgICB2YXIgZCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHtcblx0ICAgICAgICAgICAgICAgIGRbaV0gPSBpIDw8IDE7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBkW2ldID0gKGkgPDwgMSkgXiAweDExYjtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFdhbGsgR0YoMl44KVxuXHQgICAgICAgIHZhciB4ID0gMDtcblx0ICAgICAgICB2YXIgeGkgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBzYm94XG5cdCAgICAgICAgICAgIHZhciBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpO1xuXHQgICAgICAgICAgICBzeCA9IChzeCA+Pj4gOCkgXiAoc3ggJiAweGZmKSBeIDB4NjM7XG5cdCAgICAgICAgICAgIFNCT1hbeF0gPSBzeDtcblx0ICAgICAgICAgICAgSU5WX1NCT1hbc3hdID0geDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIG11bHRpcGxpY2F0aW9uXG5cdCAgICAgICAgICAgIHZhciB4MiA9IGRbeF07XG5cdCAgICAgICAgICAgIHZhciB4NCA9IGRbeDJdO1xuXHQgICAgICAgICAgICB2YXIgeDggPSBkW3g0XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIHN1YiBieXRlcywgbWl4IGNvbHVtbnMgdGFibGVzXG5cdCAgICAgICAgICAgIHZhciB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgU1VCX01JWF8wW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzFbeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzJbeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBTVUJfTUlYXzNbeF0gPSB0O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IHN1YiBieXRlcywgaW52IG1peCBjb2x1bW5zIHRhYmxlc1xuXHQgICAgICAgICAgICB2YXIgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMFtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOCk7XG5cdCAgICAgICAgICAgIElOVl9TVUJfTUlYXzFbc3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KTtcblx0ICAgICAgICAgICAgSU5WX1NVQl9NSVhfMltzeF0gPSAodCA8PCA4KSAgfCAodCA+Pj4gMjQpO1xuXHQgICAgICAgICAgICBJTlZfU1VCX01JWF8zW3N4XSA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBuZXh0IGNvdW50ZXJcblx0ICAgICAgICAgICAgaWYgKCF4KSB7XG5cdCAgICAgICAgICAgICAgICB4ID0geGkgPSAxO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgeCA9IHgyIF4gZFtkW2RbeDggXiB4Ml1dXTtcblx0ICAgICAgICAgICAgICAgIHhpIF49IGRbZFt4aV1dO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUHJlY29tcHV0ZWQgUmNvbiBsb29rdXBcblx0ICAgIHZhciBSQ09OID0gWzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzZdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgQUVTID0gQ19hbGdvLkFFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHQ7XG5cblx0ICAgICAgICAgICAgLy8gU2tpcCByZXNldCBvZiBuUm91bmRzIGhhcyBiZWVuIHNldCBiZWZvcmUgYW5kIGtleSBkaWQgbm90IGNoYW5nZVxuXHQgICAgICAgICAgICBpZiAodGhpcy5fblJvdW5kcyAmJiB0aGlzLl9rZXlQcmlvclJlc2V0ID09PSB0aGlzLl9rZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5UHJpb3JSZXNldCA9IHRoaXMuX2tleTtcblx0ICAgICAgICAgICAgdmFyIGtleVdvcmRzID0ga2V5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIga2V5U2l6ZSA9IGtleS5zaWdCeXRlcyAvIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0ZSBudW1iZXIgb2Ygcm91bmRzXG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2O1xuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgbnVtYmVyIG9mIGtleSBzY2hlZHVsZSByb3dzXG5cdCAgICAgICAgICAgIHZhciBrc1Jvd3MgPSAoblJvdW5kcyArIDEpICogNDtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRlIGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIga2V5U2NoZWR1bGUgPSB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoa3NSb3cgPCBrZXlTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAga2V5U2NoZWR1bGVba3NSb3ddID0ga2V5V29yZHNba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB0ID0ga2V5U2NoZWR1bGVba3NSb3cgLSAxXTtcblxuXHQgICAgICAgICAgICAgICAgICAgIGlmICghKGtzUm93ICUga2V5U2l6ZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm90IHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KTtcblxuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWIgd29yZFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKFNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbdCAmIDB4ZmZdO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1peCBSY29uXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHQgXj0gUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0O1xuXHQgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3ViIHdvcmRcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdCA9IChTQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3QgJiAweGZmXTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgICAgICBrZXlTY2hlZHVsZVtrc1Jvd10gPSBrZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdDtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52IGtleSBzY2hlZHVsZVxuXHQgICAgICAgICAgICB2YXIgaW52S2V5U2NoZWR1bGUgPSB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpbnZLc1JvdyA9IDA7IGludktzUm93IDwga3NSb3dzOyBpbnZLc1JvdysrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIga3NSb3cgPSBrc1Jvd3MgLSBpbnZLc1JvdztcblxuXHQgICAgICAgICAgICAgICAgaWYgKGludktzUm93ICUgNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0ID0ga2V5U2NoZWR1bGVba3NSb3ddO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2tzUm93IC0gNF07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIGlmIChpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCkge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IHQ7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIGludktleVNjaGVkdWxlW2ludktzUm93XSA9IElOVl9TVUJfTUlYXzBbU0JPWFt0ID4+PiAyNF1dIF4gSU5WX1NVQl9NSVhfMVtTQk9YWyh0ID4+PiAxNikgJiAweGZmXV0gXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVl9TVUJfTUlYXzJbU0JPWFsodCA+Pj4gOCkgJiAweGZmXV0gXiBJTlZfU1VCX01JWF8zW1NCT1hbdCAmIDB4ZmZdXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5fa2V5U2NoZWR1bGUsIFNVQl9NSVhfMCwgU1VCX01JWF8xLCBTVUJfTUlYXzIsIFNVQl9NSVhfMywgU0JPWCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTd2FwIDJuZCBhbmQgNHRoIHJvd3Ncblx0ICAgICAgICAgICAgdmFyIHQgPSBNW29mZnNldCArIDFdO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDFdID0gTVtvZmZzZXQgKyAzXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAzXSA9IHQ7XG5cblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52S2V5U2NoZWR1bGUsIElOVl9TVUJfTUlYXzAsIElOVl9TVUJfTUlYXzEsIElOVl9TVUJfTUlYXzIsIElOVl9TVUJfTUlYXzMsIElOVl9TQk9YKTtcblxuXHQgICAgICAgICAgICAvLyBJbnYgc3dhcCAybmQgYW5kIDR0aCByb3dzXG5cdCAgICAgICAgICAgIHZhciB0ID0gTVtvZmZzZXQgKyAxXTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IE1bb2Zmc2V0ICsgM107XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgM10gPSB0O1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBfZG9DcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0LCBrZXlTY2hlZHVsZSwgU1VCX01JWF8wLCBTVUJfTUlYXzEsIFNVQl9NSVhfMiwgU1VCX01JWF8zLCBTQk9YKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBuUm91bmRzID0gdGhpcy5fblJvdW5kcztcblxuXHQgICAgICAgICAgICAvLyBHZXQgaW5wdXQsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHMwID0gTVtvZmZzZXRdICAgICBeIGtleVNjaGVkdWxlWzBdO1xuXHQgICAgICAgICAgICB2YXIgczEgPSBNW29mZnNldCArIDFdIF4ga2V5U2NoZWR1bGVbMV07XG5cdCAgICAgICAgICAgIHZhciBzMiA9IE1bb2Zmc2V0ICsgMl0gXiBrZXlTY2hlZHVsZVsyXTtcblx0ICAgICAgICAgICAgdmFyIHMzID0gTVtvZmZzZXQgKyAzXSBeIGtleVNjaGVkdWxlWzNdO1xuXG5cdCAgICAgICAgICAgIC8vIEtleSBzY2hlZHVsZSByb3cgY291bnRlclxuXHQgICAgICAgICAgICB2YXIga3NSb3cgPSA0O1xuXG5cdCAgICAgICAgICAgIC8vIFJvdW5kc1xuXHQgICAgICAgICAgICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hpZnQgcm93cywgc3ViIGJ5dGVzLCBtaXggY29sdW1ucywgYWRkIHJvdW5kIGtleVxuXHQgICAgICAgICAgICAgICAgdmFyIHQwID0gU1VCX01JWF8wW3MwID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczMgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQxID0gU1VCX01JWF8wW3MxID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczAgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gU1VCX01JWF8wW3MyID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczEgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQzID0gU1VCX01JWF8wW3MzID4+PiAyNF0gXiBTVUJfTUlYXzFbKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhfMlsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYXzNbczIgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc3RhdGVcblx0ICAgICAgICAgICAgICAgIHMwID0gdDA7XG5cdCAgICAgICAgICAgICAgICBzMSA9IHQxO1xuXHQgICAgICAgICAgICAgICAgczIgPSB0Mjtcblx0ICAgICAgICAgICAgICAgIHMzID0gdDM7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBTaGlmdCByb3dzLCBzdWIgYnl0ZXMsIGFkZCByb3VuZCBrZXlcblx0ICAgICAgICAgICAgdmFyIHQwID0gKChTQk9YW3MwID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMxID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczIgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MzICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cdCAgICAgICAgICAgIHZhciB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdO1xuXHQgICAgICAgICAgICB2YXIgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXTtcblx0ICAgICAgICAgICAgdmFyIHQzID0gKChTQk9YW3MzID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMwID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczEgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MyICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK107XG5cblx0ICAgICAgICAgICAgLy8gU2V0IG91dHB1dFxuXHQgICAgICAgICAgICBNW29mZnNldF0gICAgID0gdDA7XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0ICsgMV0gPSB0MTtcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAyXSA9IHQyO1xuXHQgICAgICAgICAgICBNW29mZnNldCArIDNdID0gdDM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLkFFUyA9IEJsb2NrQ2lwaGVyLl9jcmVhdGVIZWxwZXIoQUVTKTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5BRVM7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBXb3JkQXJyYXkgPSBDX2xpYi5Xb3JkQXJyYXk7XG5cdCAgICB2YXIgQmxvY2tDaXBoZXIgPSBDX2xpYi5CbG9ja0NpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFBlcm11dGVkIENob2ljZSAxIGNvbnN0YW50c1xuXHQgICAgdmFyIFBDMSA9IFtcblx0ICAgICAgICA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAgMSxcblx0ICAgICAgICA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMixcblx0ICAgICAgICA1OSwgNTEsIDQzLCAzNSwgMjcsIDE5LCAxMSwgMyxcblx0ICAgICAgICA2MCwgNTIsIDQ0LCAzNiwgNjMsIDU1LCA0NywgMzksXG5cdCAgICAgICAgMzEsIDIzLCAxNSwgNywgIDYyLCA1NCwgNDYsIDM4LFxuXHQgICAgICAgIDMwLCAyMiwgMTQsIDYsICA2MSwgNTMsIDQ1LCAzNyxcblx0ICAgICAgICAyOSwgMjEsIDEzLCA1LCAgMjgsIDIwLCAxMiwgNFxuXHQgICAgXTtcblxuXHQgICAgLy8gUGVybXV0ZWQgQ2hvaWNlIDIgY29uc3RhbnRzXG5cdCAgICB2YXIgUEMyID0gW1xuXHQgICAgICAgIDE0LCAxNywgMTEsIDI0LCAxLCAgNSxcblx0ICAgICAgICAzLCAgMjgsIDE1LCA2LCAgMjEsIDEwLFxuXHQgICAgICAgIDIzLCAxOSwgMTIsIDQsICAyNiwgOCxcblx0ICAgICAgICAxNiwgNywgIDI3LCAyMCwgMTMsIDIsXG5cdCAgICAgICAgNDEsIDUyLCAzMSwgMzcsIDQ3LCA1NSxcblx0ICAgICAgICAzMCwgNDAsIDUxLCA0NSwgMzMsIDQ4LFxuXHQgICAgICAgIDQ0LCA0OSwgMzksIDU2LCAzNCwgNTMsXG5cdCAgICAgICAgNDYsIDQyLCA1MCwgMzYsIDI5LCAzMlxuXHQgICAgXTtcblxuXHQgICAgLy8gQ3VtdWxhdGl2ZSBiaXQgc2hpZnQgY29uc3RhbnRzXG5cdCAgICB2YXIgQklUX1NISUZUUyA9IFsxLCAgMiwgIDQsICA2LCAgOCwgIDEwLCAxMiwgMTQsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOF07XG5cblx0ICAgIC8vIFNCT1hlcyBhbmQgcm91bmQgcGVybXV0YXRpb24gY29uc3RhbnRzXG5cdCAgICB2YXIgU0JPWF9QID0gW1xuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDAwMDogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHgzMDAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAwOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMDogMHg4MDgyMDIsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDA6IDB4ODAwMjAyLFxuXHQgICAgICAgICAgICAweDcwMDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMDogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDA6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGEwMDAwMDAwOiAweDgyMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDA6IDB4ODA4MDAwLFxuXHQgICAgICAgICAgICAweGMwMDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDA6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHg4MDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDAwMDA6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDI4MDAwMDAwOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4MzgwMDAwMDA6IDB4ODAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMDogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDA6IDB4MjAwLFxuXHQgICAgICAgICAgICAweDY4MDAwMDAwOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg3ODAwMDAwMDogMHgyLFxuXHQgICAgICAgICAgICAweDg4MDAwMDAwOiAweDgwMDIwMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMDogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGE4MDAwMDAwOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDAwMDogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDA6IDB4ODAwMDAyLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDAwOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZTgwMDAwMDA6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAwOiAweDgwMDAwMCxcblx0ICAgICAgICAgICAgMHgxOiAweDgwMDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDE6IDB4Mixcblx0ICAgICAgICAgICAgMHgyMDAwMDAwMTogMHg4MDgyMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDAwMDAxOiAweDgwODAwMixcblx0ICAgICAgICAgICAgMHg1MDAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweDYwMDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDE6IDB4ODA4MjAyLFxuXHQgICAgICAgICAgICAweDkwMDAwMDAxOiAweDgwODAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwMTogMHg4MDAwMDIsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwMDE6IDB4ODIwMixcblx0ICAgICAgICAgICAgMHhjMDAwMDAwMTogMHgyMDIsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwMDE6IDB4ODAwMjAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDAxOiAweDgwMDIsXG5cdCAgICAgICAgICAgIDB4ZjAwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxOiAweDgwODIwMixcblx0ICAgICAgICAgICAgMHgxODAwMDAwMTogMHg4MDgwMDAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDE6IDB4ODAwMDAwLFxuXHQgICAgICAgICAgICAweDM4MDAwMDAxOiAweDIwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDAwMTogMHg4MDAwLFxuXHQgICAgICAgICAgICAweDU4MDAwMDAxOiAweDgwMDAwMixcblx0ICAgICAgICAgICAgMHg2ODAwMDAwMTogMHgyLFxuXHQgICAgICAgICAgICAweDc4MDAwMDAxOiAweDgyMDIsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDE6IDB4ODAwMixcblx0ICAgICAgICAgICAgMHg5ODAwMDAwMTogMHg4MDAyMDIsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDE6IDB4MjAyLFxuXHQgICAgICAgICAgICAweGI4MDAwMDAxOiAweDgwODIwMCxcblx0ICAgICAgICAgICAgMHhjODAwMDAwMTogMHg4MDAyMDAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDAwMDE6IDB4MCxcblx0ICAgICAgICAgICAgMHhlODAwMDAwMTogMHg4MjAwLFxuXHQgICAgICAgICAgICAweGY4MDAwMDAxOiAweDgwODAwMlxuXHQgICAgICAgIH0sXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICAweDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweDIwMDAwMDA6IDB4ODAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwMDogMHg0MDA4MDAxMCxcblx0ICAgICAgICAgICAgMHg0MDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDUwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDAwMDogMHg0MDAwNDAwMCxcblx0ICAgICAgICAgICAgMHg3MDAwMDAwOiAweDEwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA6IDB4ODQwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDAwMDogMHg0MDAwNDAxMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGIwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHhkMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweGYwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MjgwMDAwMDogMHgxMCxcblx0ICAgICAgICAgICAgMHgzODAwMDAwOiAweDQwMDA0MDEwLFxuXHQgICAgICAgICAgICAweDQ4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4NTgwMDAwMDogMHg0MDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg2ODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDc4MDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwMDogMHg4MDAxMCxcblx0ICAgICAgICAgICAgMHg5ODAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4YTgwMDAwMDogMHg0MDAwLFxuXHQgICAgICAgICAgICAweGI4MDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwMDogMHg0MDAwMDAxMCxcblx0ICAgICAgICAgICAgMHhkODAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweGU4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MTEwMDAwMDA6IDB4NDAwODAwMTAsXG5cdCAgICAgICAgICAgIDB4MTIwMDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQwMDAwMDA6IDB4NDAwODAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwMDA6IDB4ODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDA6IDB4NDAwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDE5MDAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDAwOiAweDgwMDEwLFxuXHQgICAgICAgICAgICAweDFiMDAwMDAwOiAweDQwMDAwMDEwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDAwOiAweDg0MDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDAwOiAweDQwMDA0MDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDAwOiAweDQwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmMDAwMDAwOiAweDQwMDg0MDEwLFxuXHQgICAgICAgICAgICAweDEwODAwMDAwOiAweDg0MDEwLFxuXHQgICAgICAgICAgICAweDExODAwMDAwOiAweDgwMDAwLFxuXHQgICAgICAgICAgICAweDEyODAwMDAwOiAweDQwMDgwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwMDAwOiAweDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwMDA6IDB4NDAwMDQwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDA6IDB4NDAwODQwMTAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwMDA6IDB4MTAsXG5cdCAgICAgICAgICAgIDB4MTc4MDAwMDA6IDB4NDAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDAwMDA6IDB4NDAwODQwMDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwMDA6IDB4NDAwMDAwMTAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwMDA6IDB4NDAwMDQwMTAsXG5cdCAgICAgICAgICAgIDB4MWI4MDAwMDA6IDB4ODAwMTAsXG5cdCAgICAgICAgICAgIDB4MWM4MDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDAwMDogMHg0MDEwLFxuXHQgICAgICAgICAgICAweDFlODAwMDAwOiAweDQwMDgwMDEwLFxuXHQgICAgICAgICAgICAweDFmODAwMDAwOiAweDg0MDAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDAwOiAweDQwMDAxMDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDQwMDAwMDogMHgxMDAwNCxcblx0ICAgICAgICAgICAgMHg1MDAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg2MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHg3MDAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHg5MDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4YjAwMDAwOiAweDQwMTAwMDQsXG5cdCAgICAgICAgICAgIDB4YzAwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4ZDAwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweGUwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweGYwMDAwMDogMHgxMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgyODAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgzODAwMDA6IDB4NDAwMDEwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHg1ODAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDc4MDAwMDogMHgxMDQsXG5cdCAgICAgICAgICAgIDB4ODgwMDAwOiAweDQsXG5cdCAgICAgICAgICAgIDB4OTgwMDAwOiAweDEwMCxcblx0ICAgICAgICAgICAgMHhhODAwMDA6IDB4NDAxMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4YzgwMDAwOiAweDEwMTAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwMDogMHg0MDAwMTA0LFxuXHQgICAgICAgICAgICAweGU4MDAwMDogMHg0MDEwMTA0LFxuXHQgICAgICAgICAgICAweGY4MDAwMDogMHg0MDAwMDAwLFxuXHQgICAgICAgICAgICAweDEwMDAwMDA6IDB4NDAxMDEwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDAwOiAweDEwMDA0LFxuXHQgICAgICAgICAgICAweDEyMDAwMDA6IDB4MTAwMDAsXG5cdCAgICAgICAgICAgIDB4MTMwMDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE0MDAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE1MDAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxNjAwMDAwOiAweDQwMDAwMDQsXG5cdCAgICAgICAgICAgIDB4MTcwMDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE4MDAwMDA6IDB4NDAwMDEwNCxcblx0ICAgICAgICAgICAgMHgxOTAwMDAwOiAweDQwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDAwMDogMHg0LFxuXHQgICAgICAgICAgICAweDFiMDAwMDA6IDB4MTAxMDAsXG5cdCAgICAgICAgICAgIDB4MWMwMDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFkMDAwMDA6IDB4MTA0LFxuXHQgICAgICAgICAgICAweDFlMDAwMDA6IDB4MTAxMDQsXG5cdCAgICAgICAgICAgIDB4MWYwMDAwMDogMHg0MDEwMDA0LFxuXHQgICAgICAgICAgICAweDEwODAwMDA6IDB4NDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMTgwMDAwOiAweDEwNCxcblx0ICAgICAgICAgICAgMHgxMjgwMDAwOiAweDQwMTAxMDAsXG5cdCAgICAgICAgICAgIDB4MTM4MDAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDE0ODAwMDA6IDB4MTAwMDQsXG5cdCAgICAgICAgICAgIDB4MTU4MDAwMDogMHg0MDAwMTAwLFxuXHQgICAgICAgICAgICAweDE2ODAwMDA6IDB4MTAwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDA6IDB4NDAxMDAwNCxcblx0ICAgICAgICAgICAgMHgxODgwMDAwOiAweDEwMDAwLFxuXHQgICAgICAgICAgICAweDE5ODAwMDA6IDB4NDAxMDEwNCxcblx0ICAgICAgICAgICAgMHgxYTgwMDAwOiAweDEwMTA0LFxuXHQgICAgICAgICAgICAweDFiODAwMDA6IDB4NDAwMDAwNCxcblx0ICAgICAgICAgICAgMHgxYzgwMDAwOiAweDQwMDAxMDQsXG5cdCAgICAgICAgICAgIDB4MWQ4MDAwMDogMHg0MDEwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwMDA6IDB4NCxcblx0ICAgICAgICAgICAgMHgxZjgwMDAwOiAweDEwMTAwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDQwMTAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgyMDAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MzAwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4NDAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg1MDAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NjAwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4NzAwMDA6IDB4NDAwMDQwLFxuXHQgICAgICAgICAgICAweDgwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDkwMDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHhiMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHhjMDAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhkMDAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGUwMDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4ZjAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgyODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgzODAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4NTgwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4NjgwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHg3ODAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHg4ODAwMDogMHgxMDAwLFxuXHQgICAgICAgICAgICAweDk4MDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweGE4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHhiODAwMDogMHgxMDQwLFxuXHQgICAgICAgICAgICAweGM4MDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweGQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHhlODAwMDogMHg0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTAwMDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMTAwMDA6IDB4NDAxMDAwLFxuXHQgICAgICAgICAgICAweDEyMDAwMDogMHg4MDAwMDA0MCxcblx0ICAgICAgICAgICAgMHgxMzAwMDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxNTAwMDA6IDB4ODA0MDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTYwMDAwOiAweDgwNDAxMDAwLFxuXHQgICAgICAgICAgICAweDE3MDAwMDogMHg4MDAwMTA0MCxcblx0ICAgICAgICAgICAgMHgxODAwMDA6IDB4ODA0MDEwNDAsXG5cdCAgICAgICAgICAgIDB4MTkwMDAwOiAweDgwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFhMDAwMDogMHg4MDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDA6IDB4NDAxMDQwLFxuXHQgICAgICAgICAgICAweDFjMDAwMDogMHg4MDAwMTAwMCxcblx0ICAgICAgICAgICAgMHgxZDAwMDA6IDB4NDAwMDAwLFxuXHQgICAgICAgICAgICAweDFlMDAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxZjAwMDA6IDB4MTAwMCxcblx0ICAgICAgICAgICAgMHgxMDgwMDA6IDB4ODA0MDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTE4MDAwOiAweDgwNDAxMDQwLFxuXHQgICAgICAgICAgICAweDEyODAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDEzODAwMDogMHg0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MTQ4MDAwOiAweDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxNTgwMDA6IDB4ODAwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTY4MDAwOiAweDgwMDAxMDQwLFxuXHQgICAgICAgICAgICAweDE3ODAwMDogMHg0MCxcblx0ICAgICAgICAgICAgMHgxODgwMDA6IDB4ODAwMDAwNDAsXG5cdCAgICAgICAgICAgIDB4MTk4MDAwOiAweDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWE4MDAwOiAweDgwMDAxMDAwLFxuXHQgICAgICAgICAgICAweDFiODAwMDogMHg4MDQwMDA0MCxcblx0ICAgICAgICAgICAgMHgxYzgwMDA6IDB4MTA0MCxcblx0ICAgICAgICAgICAgMHgxZDgwMDA6IDB4ODA0MDEwMDAsXG5cdCAgICAgICAgICAgIDB4MWU4MDAwOiAweDQwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZjgwMDA6IDB4NDAxMDQwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MjAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgzMDAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDQwMDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NTAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDYwMDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4NzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHg4MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHhhMDAwOiAweDIwMDAwMDgwLFxuXHQgICAgICAgICAgICAweGIwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YzAwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHhkMDAwOiAweDAsXG5cdCAgICAgICAgICAgIDB4ZTAwMDogMHgxMDQwMDgwLFxuXHQgICAgICAgICAgICAweGYwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTgwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgyODAwOiAweDgwLFxuXHQgICAgICAgICAgICAweDM4MDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg0ODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDU4MDA6IDB4MjAwNDAwODAsXG5cdCAgICAgICAgICAgIDB4NjgwMDogMHgyMTA0MDAwMCxcblx0ICAgICAgICAgICAgMHg3ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDg4MDA6IDB4MjAwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4OTgwMDogMHgwLFxuXHQgICAgICAgICAgICAweGE4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4YjgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweGM4MDA6IDB4MjAwMDAwODAsXG5cdCAgICAgICAgICAgIDB4ZDgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHhlODAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ZjgwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxMDAwMDogMHg0MDAwMCxcblx0ICAgICAgICAgICAgMHgxMTAwMDogMHg4MCxcblx0ICAgICAgICAgICAgMHgxMjAwMDogMHgyMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzAwMDogMHgyMTAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxNDAwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDE1MDAwOiAweDIxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDE2MDAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE3MDAwOiAweDEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTgwMDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTkwMDA6IDB4MjEwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MWEwMDA6IDB4MTA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYjAwMDogMHgyMDA0MDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwMDogMHg0MDA4MCxcblx0ICAgICAgICAgICAgMHgxZDAwMDogMHgyMDAwMDA4MCxcblx0ICAgICAgICAgICAgMHgxZTAwMDogMHgwLFxuXHQgICAgICAgICAgICAweDFmMDAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTA4MDA6IDB4MjEwMDAwODAsXG5cdCAgICAgICAgICAgIDB4MTE4MDA6IDB4MTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwMDogMHgxMDQwMDAwLFxuXHQgICAgICAgICAgICAweDEzODAwOiAweDIwMDQwMDgwLFxuXHQgICAgICAgICAgICAweDE0ODAwOiAweDIwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDE1ODAwOiAweDEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MTY4MDA6IDB4ODAsXG5cdCAgICAgICAgICAgIDB4MTc4MDA6IDB4MjEwNDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg4MDA6IDB4NDAwODAsXG5cdCAgICAgICAgICAgIDB4MTk4MDA6IDB4MjEwNDAwODAsXG5cdCAgICAgICAgICAgIDB4MWE4MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYjgwMDogMHgyMTAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzgwMDogMHgxMDAwMDgwLFxuXHQgICAgICAgICAgICAweDFkODAwOiAweDQwMDAwLFxuXHQgICAgICAgICAgICAweDFlODAwOiAweDIwMDQwMDAwLFxuXHQgICAgICAgICAgICAweDFmODAwOiAweDIwMDAwMDgwXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHgxMDA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHgyMDA6IDB4MTAyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MzAwOiAweDEwMjAyMDA4LFxuXHQgICAgICAgICAgICAweDQwMDogMHgxMDAwMjAwMCxcblx0ICAgICAgICAgICAgMHg1MDA6IDB4MjAwMDAwLFxuXHQgICAgICAgICAgICAweDYwMDogMHgyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4NzAwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDogMHgwLFxuXHQgICAgICAgICAgICAweDkwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHhhMDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGIwMDogMHg4LFxuXHQgICAgICAgICAgICAweGMwMDogMHgxMDIwMDAwOCxcblx0ICAgICAgICAgICAgMHhkMDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweGUwMDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweGYwMDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHg4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MjgwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MzgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHg0ODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDU4MDogMHgxMDAwMDAwOCxcblx0ICAgICAgICAgICAgMHg2ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4NzgwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4ODgwOiAweDIwMDAwOCxcblx0ICAgICAgICAgICAgMHg5ODA6IDB4MjAwMCxcblx0ICAgICAgICAgICAgMHhhODA6IDB4MTAwMDIwMDgsXG5cdCAgICAgICAgICAgIDB4YjgwOiAweDEwMjAwMDA4LFxuXHQgICAgICAgICAgICAweGM4MDogMHgwLFxuXHQgICAgICAgICAgICAweGQ4MDogMHgxMDIwMjAwMCxcblx0ICAgICAgICAgICAgMHhlODA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweGY4MDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDAwOiAweDEwMDAyMDAwLFxuXHQgICAgICAgICAgICAweDExMDA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MTIwMDogMHgxMDIwMjAwOCxcblx0ICAgICAgICAgICAgMHgxMzAwOiAweDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTQwMDogMHgyMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTUwMDogMHgxMDAwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjAwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE3MDA6IDB4MjAyMDAwLFxuXHQgICAgICAgICAgICAweDE4MDA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDE5MDA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxYTAwOiAweDgsXG5cdCAgICAgICAgICAgIDB4MWIwMDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxYzAwOiAweDIwMDAsXG5cdCAgICAgICAgICAgIDB4MWQwMDogMHgxMDAwMjAwOCxcblx0ICAgICAgICAgICAgMHgxZTAwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDFmMDA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDEwODA6IDB4OCxcblx0ICAgICAgICAgICAgMHgxMTgwOiAweDIwMjAwMCxcblx0ICAgICAgICAgICAgMHgxMjgwOiAweDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMzgwOiAweDEwMDAwMDA4LFxuXHQgICAgICAgICAgICAweDE0ODA6IDB4MTAwMDIwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4MDogMHgyMDA4LFxuXHQgICAgICAgICAgICAweDE2ODA6IDB4MTAyMDIwMDgsXG5cdCAgICAgICAgICAgIDB4MTc4MDogMHgxMDIwMDAwMCxcblx0ICAgICAgICAgICAgMHgxODgwOiAweDEwMjAyMDAwLFxuXHQgICAgICAgICAgICAweDE5ODA6IDB4MTAyMDAwMDgsXG5cdCAgICAgICAgICAgIDB4MWE4MDogMHgyMDAwLFxuXHQgICAgICAgICAgICAweDFiODA6IDB4MjAyMDA4LFxuXHQgICAgICAgICAgICAweDFjODA6IDB4MjAwMDA4LFxuXHQgICAgICAgICAgICAweDFkODA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZTgwOiAweDEwMDAwMDAwLFxuXHQgICAgICAgICAgICAweDFmODA6IDB4MTAwMDIwMDhcblx0ICAgICAgICB9LFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgMHgwOiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxMDogMHgyMDAwNDAxLFxuXHQgICAgICAgICAgICAweDIwOiAweDQwMCxcblx0ICAgICAgICAgICAgMHgzMDogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4NDA6IDB4MjEwMDQwMSxcblx0ICAgICAgICAgICAgMHg1MDogMHgwLFxuXHQgICAgICAgICAgICAweDYwOiAweDEsXG5cdCAgICAgICAgICAgIDB4NzA6IDB4MjEwMDAwMSxcblx0ICAgICAgICAgICAgMHg4MDogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweDkwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHhhMDogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweGIwOiAweDIxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4YzA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHhkMDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4ZTA6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweGYwOiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODogMHgyMTAwMDAxLFxuXHQgICAgICAgICAgICAweDE4OiAweDAsXG5cdCAgICAgICAgICAgIDB4Mjg6IDB4MjAwMDQwMSxcblx0ICAgICAgICAgICAgMHgzODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDQ4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHg1ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDY4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Nzg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDg4OiAweDEwMDQwMSxcblx0ICAgICAgICAgICAgMHg5ODogMHgyMDAwNDAwLFxuXHQgICAgICAgICAgICAweGE4OiAweDIxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4Yjg6IDB4MTAwMDAxLFxuXHQgICAgICAgICAgICAweGM4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHhkODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweGU4OiAweDEsXG5cdCAgICAgICAgICAgIDB4Zjg6IDB4MTAwNDAwLFxuXHQgICAgICAgICAgICAweDEwMDogMHgyMDAwMDAwLFxuXHQgICAgICAgICAgICAweDExMDogMHgxMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTIwOiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTMwOiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTQwOiAweDEwMDAwMSxcblx0ICAgICAgICAgICAgMHgxNTA6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNjA6IDB4MjEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxNzA6IDB4MTAwNDAxLFxuXHQgICAgICAgICAgICAweDE4MDogMHg0MDEsXG5cdCAgICAgICAgICAgIDB4MTkwOiAweDIxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWEwOiAweDEwMDQwMCxcblx0ICAgICAgICAgICAgMHgxYjA6IDB4MSxcblx0ICAgICAgICAgICAgMHgxYzA6IDB4MCxcblx0ICAgICAgICAgICAgMHgxZDA6IDB4MjEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxZTA6IDB4MjAwMDAwMSxcblx0ICAgICAgICAgICAgMHgxZjA6IDB4NDAwLFxuXHQgICAgICAgICAgICAweDEwODogMHgxMDA0MDAsXG5cdCAgICAgICAgICAgIDB4MTE4OiAweDIwMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MTI4OiAweDIxMDAwMDEsXG5cdCAgICAgICAgICAgIDB4MTM4OiAweDEsXG5cdCAgICAgICAgICAgIDB4MTQ4OiAweDIwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4MTU4OiAweDEwMDAwMCxcblx0ICAgICAgICAgICAgMHgxNjg6IDB4NDAxLFxuXHQgICAgICAgICAgICAweDE3ODogMHgyMTAwNDAwLFxuXHQgICAgICAgICAgICAweDE4ODogMHgyMDAwMDAxLFxuXHQgICAgICAgICAgICAweDE5ODogMHgyMTAwMDAwLFxuXHQgICAgICAgICAgICAweDFhODogMHgwLFxuXHQgICAgICAgICAgICAweDFiODogMHgyMTAwNDAxLFxuXHQgICAgICAgICAgICAweDFjODogMHgxMDA0MDEsXG5cdCAgICAgICAgICAgIDB4MWQ4OiAweDQwMCxcblx0ICAgICAgICAgICAgMHgxZTg6IDB4MjAwMDQwMCxcblx0ICAgICAgICAgICAgMHgxZjg6IDB4MTAwMDAxXG5cdCAgICAgICAgfSxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIDB4MDogMHg4MDAwODIwLFxuXHQgICAgICAgICAgICAweDE6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MjogMHg4MDAwMDAwLFxuXHQgICAgICAgICAgICAweDM6IDB4MjAsXG5cdCAgICAgICAgICAgIDB4NDogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg1OiAweDgwMjA4MjAsXG5cdCAgICAgICAgICAgIDB4NjogMHg4MDIwODAwLFxuXHQgICAgICAgICAgICAweDc6IDB4ODAwLFxuXHQgICAgICAgICAgICAweDg6IDB4ODAyMDAwMCxcblx0ICAgICAgICAgICAgMHg5OiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4YTogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHhiOiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4YzogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4ZDogMHgwLFxuXHQgICAgICAgICAgICAweGU6IDB4ODAwMDAyMCxcblx0ICAgICAgICAgICAgMHhmOiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAwOiAweDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwMTogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDAyOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDM6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwNDogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA1OiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA2OiAweDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA3OiAweDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDA4OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMDk6IDB4ODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBhOiAweDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBiOiAweDgwMjA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGM6IDB4MCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAwZDogMHg4MDIwMDIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDBlOiAweDgwMDA4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMGY6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTA6IDB4MjA4MjAsXG5cdCAgICAgICAgICAgIDB4MTE6IDB4ODAyMDgwMCxcblx0ICAgICAgICAgICAgMHgxMjogMHgyMCxcblx0ICAgICAgICAgICAgMHgxMzogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4MTQ6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHgxNTogMHg4MDAwMDIwLFxuXHQgICAgICAgICAgICAweDE2OiAweDgwMjAwMjAsXG5cdCAgICAgICAgICAgIDB4MTc6IDB4MjAwMDAsXG5cdCAgICAgICAgICAgIDB4MTg6IDB4MCxcblx0ICAgICAgICAgICAgMHgxOTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHgxYTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDFiOiAweDgwMDA4MjAsXG5cdCAgICAgICAgICAgIDB4MWM6IDB4ODAyMDgyMCxcblx0ICAgICAgICAgICAgMHgxZDogMHgyMDgwMCxcblx0ICAgICAgICAgICAgMHgxZTogMHg4MjAsXG5cdCAgICAgICAgICAgIDB4MWY6IDB4ODAwMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMDogMHgyMDAwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMTogMHg4MDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTI6IDB4ODAyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxMzogMHgyMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNDogMHgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxNTogMHg4MDIwMDAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE2OiAweDgwMDAwMDAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMTc6IDB4ODAwMDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxODogMHg4MDIwODIwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDE5OiAweDgwMDAwMjAsXG5cdCAgICAgICAgICAgIDB4ODAwMDAwMWE6IDB4ODAwMDgwMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxYjogMHgwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFjOiAweDIwODAwLFxuXHQgICAgICAgICAgICAweDgwMDAwMDFkOiAweDgyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZTogMHgyMDAyMCxcblx0ICAgICAgICAgICAgMHg4MDAwMDAxZjogMHg4MDIwODAwXG5cdCAgICAgICAgfVxuXHQgICAgXTtcblxuXHQgICAgLy8gTWFza3MgdGhhdCBzZWxlY3QgdGhlIFNCT1ggaW5wdXRcblx0ICAgIHZhciBTQk9YX01BU0sgPSBbXG5cdCAgICAgICAgMHhmODAwMDAwMSwgMHgxZjgwMDAwMCwgMHgwMWY4MDAwMCwgMHgwMDFmODAwMCxcblx0ICAgICAgICAweDAwMDFmODAwLCAweDAwMDAxZjgwLCAweDAwMDAwMWY4LCAweDgwMDAwMDFmXG5cdCAgICBdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIERFUyBibG9jayBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgREVTID0gQ19hbGdvLkRFUyA9IEJsb2NrQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBTZWxlY3QgNTYgYml0cyBhY2NvcmRpbmcgdG8gUEMxXG5cdCAgICAgICAgICAgIHZhciBrZXlCaXRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGtleUJpdFBvcyA9IFBDMVtpXSAtIDE7XG5cdCAgICAgICAgICAgICAgICBrZXlCaXRzW2ldID0gKGtleVdvcmRzW2tleUJpdFBvcyA+Pj4gNV0gPj4+ICgzMSAtIGtleUJpdFBvcyAlIDMyKSkgJiAxO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQXNzZW1ibGUgMTYgc3Via2V5c1xuXHQgICAgICAgICAgICB2YXIgc3ViS2V5cyA9IHRoaXMuX3N1YktleXMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgblN1YktleSA9IDA7IG5TdWJLZXkgPCAxNjsgblN1YktleSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgc3Via2V5XG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tuU3ViS2V5XSA9IFtdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICAgICAgdmFyIGJpdFNoaWZ0ID0gQklUX1NISUZUU1tuU3ViS2V5XTtcblxuXHQgICAgICAgICAgICAgICAgLy8gU2VsZWN0IDQ4IGJpdHMgYWNjb3JkaW5nIHRvIFBDMlxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IGZyb20gdGhlIGxlZnQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbKGkgLyA2KSB8IDBdIHw9IGtleUJpdHNbKChQQzJbaV0gLSAxKSArIGJpdFNoaWZ0KSAlIDI4XSA8PCAoMzEgLSBpICUgNik7XG5cblx0ICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgZnJvbSB0aGUgcmlnaHQgMjgga2V5IGJpdHNcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbNCArICgoaSAvIDYpIHwgMCldIHw9IGtleUJpdHNbMjggKyAoKChQQzJbaSArIDI0XSAtIDEpICsgYml0U2hpZnQpICUgMjgpXSA8PCAoMzEgLSBpICUgNik7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVhY2ggc3Via2V5IGlzIGFwcGxpZWQgdG8gYW4gZXhwYW5kZWQgMzItYml0IGlucHV0LFxuXHQgICAgICAgICAgICAgICAgLy8gdGhlIHN1YmtleSBjYW4gYmUgYnJva2VuIGludG8gOCB2YWx1ZXMgc2NhbGVkIHRvIDMyLWJpdHMsXG5cdCAgICAgICAgICAgICAgICAvLyB3aGljaCBhbGxvd3MgdGhlIGtleSB0byBiZSB1c2VkIHdpdGhvdXQgZXhwYW5zaW9uXG5cdCAgICAgICAgICAgICAgICBzdWJLZXlbMF0gPSAoc3ViS2V5WzBdIDw8IDEpIHwgKHN1YktleVswXSA+Pj4gMzEpO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA3OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJLZXlbaV0gPSBzdWJLZXlbaV0gPj4+ICgoaSAtIDEpICogNCArIDMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgc3ViS2V5WzddID0gKHN1YktleVs3XSA8PCA1KSB8IChzdWJLZXlbN10gPj4+IDI3KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIENvbXB1dGUgaW52ZXJzZSBzdWJrZXlzXG5cdCAgICAgICAgICAgIHZhciBpbnZTdWJLZXlzID0gdGhpcy5faW52U3ViS2V5cyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGludlN1YktleXNbaV0gPSBzdWJLZXlzWzE1IC0gaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2RvQ3J5cHRCbG9jayhNLCBvZmZzZXQsIHRoaXMuX3N1YktleXMpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZG9DcnlwdEJsb2NrKE0sIG9mZnNldCwgdGhpcy5faW52U3ViS2V5cyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0NyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQsIHN1YktleXMpIHtcblx0ICAgICAgICAgICAgLy8gR2V0IGlucHV0XG5cdCAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IE1bb2Zmc2V0XTtcblx0ICAgICAgICAgICAgdGhpcy5fckJsb2NrID0gTVtvZmZzZXQgKyAxXTtcblxuXHQgICAgICAgICAgICAvLyBJbml0aWFsIHBlcm11dGF0aW9uXG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCA0LCAgMHgwZjBmMGYwZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxNiwgMHgwMDAwZmZmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCAyLCAgMHgzMzMzMzMzMyk7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlUkwuY2FsbCh0aGlzLCA4LCAgMHgwMGZmMDBmZik7XG5cdCAgICAgICAgICAgIGV4Y2hhbmdlTFIuY2FsbCh0aGlzLCAxLCAgMHg1NTU1NTU1NSk7XG5cblx0ICAgICAgICAgICAgLy8gUm91bmRzXG5cdCAgICAgICAgICAgIGZvciAodmFyIHJvdW5kID0gMDsgcm91bmQgPCAxNjsgcm91bmQrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc3ViS2V5ID0gc3ViS2V5c1tyb3VuZF07XG5cdCAgICAgICAgICAgICAgICB2YXIgbEJsb2NrID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICAgICAgdmFyIHJCbG9jayA9IHRoaXMuX3JCbG9jaztcblxuXHQgICAgICAgICAgICAgICAgLy8gRmVpc3RlbCBmdW5jdGlvblxuXHQgICAgICAgICAgICAgICAgdmFyIGYgPSAwO1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICBmIHw9IFNCT1hfUFtpXVsoKHJCbG9jayBeIHN1YktleVtpXSkgJiBTQk9YX01BU0tbaV0pID4+PiAwXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHRoaXMuX2xCbG9jayA9IHJCbG9jaztcblx0ICAgICAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IGxCbG9jayBeIGY7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBVbmRvIHN3YXAgZnJvbSBsYXN0IHJvdW5kXG5cdCAgICAgICAgICAgIHZhciB0ID0gdGhpcy5fbEJsb2NrO1xuXHQgICAgICAgICAgICB0aGlzLl9sQmxvY2sgPSB0aGlzLl9yQmxvY2s7XG5cdCAgICAgICAgICAgIHRoaXMuX3JCbG9jayA9IHQ7XG5cblx0ICAgICAgICAgICAgLy8gRmluYWwgcGVybXV0YXRpb25cblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDEsICAweDU1NTU1NTU1KTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDgsICAweDAwZmYwMGZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VSTC5jYWxsKHRoaXMsIDIsICAweDMzMzMzMzMzKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDE2LCAweDAwMDBmZmZmKTtcblx0ICAgICAgICAgICAgZXhjaGFuZ2VMUi5jYWxsKHRoaXMsIDQsICAweDBmMGYwZjBmKTtcblxuXHQgICAgICAgICAgICAvLyBTZXQgb3V0cHV0XG5cdCAgICAgICAgICAgIE1bb2Zmc2V0XSA9IHRoaXMuX2xCbG9jaztcblx0ICAgICAgICAgICAgTVtvZmZzZXQgKyAxXSA9IHRoaXMuX3JCbG9jaztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogNjQvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyLFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIC8vIFN3YXAgYml0cyBhY3Jvc3MgdGhlIGxlZnQgYW5kIHJpZ2h0IHdvcmRzXG5cdCAgICBmdW5jdGlvbiBleGNoYW5nZUxSKG9mZnNldCwgbWFzaykge1xuXHQgICAgICAgIHZhciB0ID0gKCh0aGlzLl9sQmxvY2sgPj4+IG9mZnNldCkgXiB0aGlzLl9yQmxvY2spICYgbWFzaztcblx0ICAgICAgICB0aGlzLl9yQmxvY2sgXj0gdDtcblx0ICAgICAgICB0aGlzLl9sQmxvY2sgXj0gdCA8PCBvZmZzZXQ7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4Y2hhbmdlUkwob2Zmc2V0LCBtYXNrKSB7XG5cdCAgICAgICAgdmFyIHQgPSAoKHRoaXMuX3JCbG9jayA+Pj4gb2Zmc2V0KSBeIHRoaXMuX2xCbG9jaykgJiBtYXNrO1xuXHQgICAgICAgIHRoaXMuX2xCbG9jayBePSB0O1xuXHQgICAgICAgIHRoaXMuX3JCbG9jayBePSB0IDw8IG9mZnNldDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5ERVMuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5ERVMuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuREVTID0gQmxvY2tDaXBoZXIuX2NyZWF0ZUhlbHBlcihERVMpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFRyaXBsZS1ERVMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFRyaXBsZURFUyA9IENfYWxnby5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5fa2V5O1xuXHQgICAgICAgICAgICB2YXIga2V5V29yZHMgPSBrZXkud29yZHM7XG5cdCAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUga2V5IGxlbmd0aCBpcyB2YWxpZCAoNjQsIDEyOCBvciA+PSAxOTIgYml0KVxuXHQgICAgICAgICAgICBpZiAoa2V5V29yZHMubGVuZ3RoICE9PSAyICYmIGtleVdvcmRzLmxlbmd0aCAhPT0gNCAmJiBrZXlXb3Jkcy5sZW5ndGggPCA2KSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IGxlbmd0aCAtIDNERVMgcmVxdWlyZXMgdGhlIGtleSBsZW5ndGggdG8gYmUgNjQsIDEyOCwgMTkyIG9yID4xOTIuJyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGtleSBhY2NvcmRpbmcgdG8gdGhlIGtleWluZyBvcHRpb25zIGRlZmluZWQgaW4gM0RFUyBzdGFuZGFyZFxuXHQgICAgICAgICAgICB2YXIga2V5MSA9IGtleVdvcmRzLnNsaWNlKDAsIDIpO1xuXHQgICAgICAgICAgICB2YXIga2V5MiA9IGtleVdvcmRzLmxlbmd0aCA8IDQgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDIsIDQpO1xuXHQgICAgICAgICAgICB2YXIga2V5MyA9IGtleVdvcmRzLmxlbmd0aCA8IDYgPyBrZXlXb3Jkcy5zbGljZSgwLCAyKSA6IGtleVdvcmRzLnNsaWNlKDQsIDYpO1xuXG5cdCAgICAgICAgICAgIC8vIENyZWF0ZSBERVMgaW5zdGFuY2VzXG5cdCAgICAgICAgICAgIHRoaXMuX2RlczEgPSBERVMuY3JlYXRlRW5jcnlwdG9yKFdvcmRBcnJheS5jcmVhdGUoa2V5MSkpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyID0gREVTLmNyZWF0ZUVuY3J5cHRvcihXb3JkQXJyYXkuY3JlYXRlKGtleTIpKTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMyA9IERFUy5jcmVhdGVFbmNyeXB0b3IoV29yZEFycmF5LmNyZWF0ZShrZXkzKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGVuY3J5cHRCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMxLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMyLmRlY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgICAgICB0aGlzLl9kZXMzLmVuY3J5cHRCbG9jayhNLCBvZmZzZXQpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBkZWNyeXB0QmxvY2s6IGZ1bmN0aW9uIChNLCBvZmZzZXQpIHtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMy5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMi5lbmNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgdGhpcy5fZGVzMS5kZWNyeXB0QmxvY2soTSwgb2Zmc2V0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAga2V5U2l6ZTogMTkyLzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMixcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogNjQvMzJcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9ucyB0byB0aGUgY2lwaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgY2lwaGVydGV4dCA9IENyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlRyaXBsZURFUy5kZWNyeXB0KGNpcGhlcnRleHQsIGtleSwgY2ZnKTtcblx0ICAgICAqL1xuXHQgICAgQy5UcmlwbGVERVMgPSBCbG9ja0NpcGhlci5fY3JlYXRlSGVscGVyKFRyaXBsZURFUyk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuVHJpcGxlREVTO1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi9lbmMtYmFzZTY0XCIpLCByZXF1aXJlKFwiLi9tZDVcIiksIHJlcXVpcmUoXCIuL2V2cGtkZlwiKSwgcmVxdWlyZShcIi4vY2lwaGVyLWNvcmVcIikpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtcIi4vY29yZVwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vbWQ1XCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgU3RyZWFtQ2lwaGVyID0gQ19saWIuU3RyZWFtQ2lwaGVyO1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbztcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzQgPSBDX2FsZ28uUkM0ID0gU3RyZWFtQ2lwaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLl9rZXk7XG5cdCAgICAgICAgICAgIHZhciBrZXlXb3JkcyA9IGtleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGtleVNpZ0J5dGVzID0ga2V5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIEluaXQgc2JveFxuXHQgICAgICAgICAgICB2YXIgUyA9IHRoaXMuX1MgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgU1tpXSA9IGk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBLZXkgc2V0dXBcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrZXlCeXRlSW5kZXggPSBpICUga2V5U2lnQnl0ZXM7XG5cdCAgICAgICAgICAgICAgICB2YXIga2V5Qnl0ZSA9IChrZXlXb3Jkc1trZXlCeXRlSW5kZXggPj4+IDJdID4+PiAoMjQgLSAoa2V5Qnl0ZUluZGV4ICUgNCkgKiA4KSkgJiAweGZmO1xuXG5cdCAgICAgICAgICAgICAgICBqID0gKGogKyBTW2ldICsga2V5Qnl0ZSkgJSAyNTY7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFN3YXBcblx0ICAgICAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgICAgIFNbaV0gPSBTW2pdO1xuXHQgICAgICAgICAgICAgICAgU1tqXSA9IHQ7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudGVyc1xuXHQgICAgICAgICAgICB0aGlzLl9pID0gdGhpcy5faiA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICBNW29mZnNldF0gXj0gZ2VuZXJhdGVLZXlzdHJlYW1Xb3JkLmNhbGwodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGtleVNpemU6IDI1Ni8zMixcblxuXHQgICAgICAgIGl2U2l6ZTogMFxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIGdlbmVyYXRlS2V5c3RyZWFtV29yZCgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgUyA9IHRoaXMuX1M7XG5cdCAgICAgICAgdmFyIGkgPSB0aGlzLl9pO1xuXHQgICAgICAgIHZhciBqID0gdGhpcy5fajtcblxuXHQgICAgICAgIC8vIEdlbmVyYXRlIGtleXN0cmVhbSB3b3JkXG5cdCAgICAgICAgdmFyIGtleXN0cmVhbVdvcmQgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgbisrKSB7XG5cdCAgICAgICAgICAgIGkgPSAoaSArIDEpICUgMjU2O1xuXHQgICAgICAgICAgICBqID0gKGogKyBTW2ldKSAlIDI1NjtcblxuXHQgICAgICAgICAgICAvLyBTd2FwXG5cdCAgICAgICAgICAgIHZhciB0ID0gU1tpXTtcblx0ICAgICAgICAgICAgU1tpXSA9IFNbal07XG5cdCAgICAgICAgICAgIFNbal0gPSB0O1xuXG5cdCAgICAgICAgICAgIGtleXN0cmVhbVdvcmQgfD0gU1soU1tpXSArIFNbal0pICUgMjU2XSA8PCAoMjQgLSBuICogOCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gVXBkYXRlIGNvdW50ZXJzXG5cdCAgICAgICAgdGhpcy5faSA9IGk7XG5cdCAgICAgICAgdGhpcy5faiA9IGo7XG5cblx0ICAgICAgICByZXR1cm4ga2V5c3RyZWFtV29yZDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SQzQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SQzQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUkM0KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBNb2RpZmllZCBSQzQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBSQzREcm9wID0gQ19hbGdvLlJDNERyb3AgPSBSQzQuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcHJvcGVydHkge251bWJlcn0gZHJvcCBUaGUgbnVtYmVyIG9mIGtleXN0cmVhbSB3b3JkcyB0byBkcm9wLiBEZWZhdWx0IDE5MlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogUkM0LmNmZy5leHRlbmQoe1xuXHQgICAgICAgICAgICBkcm9wOiAxOTJcblx0ICAgICAgICB9KSxcblxuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIFJDNC5fZG9SZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIERyb3Bcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2ZnLmRyb3A7IGkgPiAwOyBpLS0pIHtcblx0ICAgICAgICAgICAgICAgIGdlbmVyYXRlS2V5c3RyZWFtV29yZC5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUkM0RHJvcC5lbmNyeXB0KG1lc3NhZ2UsIGtleSwgY2ZnKTtcblx0ICAgICAqICAgICB2YXIgcGxhaW50ZXh0ICA9IENyeXB0b0pTLlJDNERyb3AuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUkM0RHJvcCA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJDNERyb3ApO1xuXHR9KCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlJDNDtcblxufSkpOyIsICI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5LCB1bmRlZikge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSwgcmVxdWlyZShcIi4vZW5jLWJhc2U2NFwiKSwgcmVxdWlyZShcIi4vbWQ1XCIpLCByZXF1aXJlKFwiLi9ldnBrZGZcIiksIHJlcXVpcmUoXCIuL2NpcGhlci1jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL2VuYy1iYXNlNjRcIiwgXCIuL21kNVwiLCBcIi4vZXZwa2RmXCIsIFwiLi9jaXBoZXItY29yZVwiXSwgZmFjdG9yeSk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0Ly8gR2xvYmFsIChicm93c2VyKVxuXHRcdGZhY3Rvcnkocm9vdC5DcnlwdG9KUyk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKENyeXB0b0pTKSB7XG5cblx0KGZ1bmN0aW9uICgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFN0cmVhbUNpcGhlciA9IENfbGliLlN0cmVhbUNpcGhlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdHNcblx0ICAgIHZhciBTICA9IFtdO1xuXHQgICAgdmFyIENfID0gW107XG5cdCAgICB2YXIgRyAgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBSYWJiaXQgc3RyZWFtIGNpcGhlciBhbGdvcml0aG1cblx0ICAgICAqL1xuXHQgICAgdmFyIFJhYmJpdCA9IENfYWxnby5SYWJiaXQgPSBTdHJlYW1DaXBoZXIuZXh0ZW5kKHtcblx0ICAgICAgICBfZG9SZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIEsgPSB0aGlzLl9rZXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBpdiA9IHRoaXMuY2ZnLml2O1xuXG5cdCAgICAgICAgICAgIC8vIFN3YXAgZW5kaWFuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBLW2ldID0gKCgoS1tpXSA8PCA4KSAgfCAoS1tpXSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHxcblx0ICAgICAgICAgICAgICAgICAgICAgICAoKChLW2ldIDw8IDI0KSB8IChLW2ldID4+PiA4KSkgICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBHZW5lcmF0ZSBpbml0aWFsIHN0YXRlIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1ggPSBbXG5cdCAgICAgICAgICAgICAgICBLWzBdLCAoS1szXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1sxXSwgKEtbMF0gPDwgMTYpIHwgKEtbM10gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMl0sIChLWzFdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzNdLCAoS1syXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpXG5cdCAgICAgICAgICAgIF07XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICB2YXIgQyA9IHRoaXMuX0MgPSBbXG5cdCAgICAgICAgICAgICAgICAoS1syXSA8PCAxNikgfCAoS1syXSA+Pj4gMTYpLCAoS1swXSAmIDB4ZmZmZjAwMDApIHwgKEtbMV0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzNdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksIChLWzFdICYgMHhmZmZmMDAwMCkgfCAoS1syXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMF0gPDwgMTYpIHwgKEtbMF0gPj4+IDE2KSwgKEtbMl0gJiAweGZmZmYwMDAwKSB8IChLWzNdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1sxXSA8PCAxNikgfCAoS1sxXSA+Pj4gMTYpLCAoS1szXSAmIDB4ZmZmZjAwMDApIHwgKEtbMF0gJiAweDAwMDBmZmZmKVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIENhcnJ5IGJpdFxuXHQgICAgICAgICAgICB0aGlzLl9iID0gMDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW0gZm91ciB0aW1lc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvdW50ZXJzXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBDW2ldIF49IFhbKGkgKyA0KSAmIDddO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSVYgc2V0dXBcblx0ICAgICAgICAgICAgaWYgKGl2KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgICAgIHZhciBJViA9IGl2LndvcmRzO1xuXHQgICAgICAgICAgICAgICAgdmFyIElWXzAgPSBJVlswXTtcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8xID0gSVZbMV07XG5cblx0ICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIgc3VidmVjdG9yc1xuXHQgICAgICAgICAgICAgICAgdmFyIGkwID0gKCgoSVZfMCA8PCA4KSB8IChJVl8wID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfCAoKChJVl8wIDw8IDI0KSB8IChJVl8wID4+PiA4KSkgJiAweGZmMDBmZjAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMiA9ICgoKElWXzEgPDwgOCkgfCAoSVZfMSA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMSA8PCAyNCkgfCAoSVZfMSA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTEgPSAoaTAgPj4+IDE2KSB8IChpMiAmIDB4ZmZmZjAwMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkzID0gKGkyIDw8IDE2KSAgfCAoaTAgJiAweDAwMDBmZmZmKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gTW9kaWZ5IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgICAgICAgICBDWzBdIF49IGkwO1xuXHQgICAgICAgICAgICAgICAgQ1sxXSBePSBpMTtcblx0ICAgICAgICAgICAgICAgIENbMl0gXj0gaTI7XG5cdCAgICAgICAgICAgICAgICBDWzNdIF49IGkzO1xuXHQgICAgICAgICAgICAgICAgQ1s0XSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbNV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzZdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1s3XSBePSBpMztcblxuXHQgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblxuXHQgICAgICAgICAgICAvLyBJdGVyYXRlIHRoZSBzeXN0ZW1cblx0ICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgZm91ciBrZXlzdHJlYW0gd29yZHNcblx0ICAgICAgICAgICAgU1swXSA9IFhbMF0gXiAoWFs1XSA+Pj4gMTYpIF4gKFhbM10gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzFdID0gWFsyXSBeIChYWzddID4+PiAxNikgXiAoWFs1XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbMl0gPSBYWzRdIF4gKFhbMV0gPj4+IDE2KSBeIChYWzddIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1szXSA9IFhbNl0gXiAoWFszXSA+Pj4gMTYpIF4gKFhbMV0gPDwgMTYpO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTd2FwIGVuZGlhblxuXHQgICAgICAgICAgICAgICAgU1tpXSA9ICgoKFNbaV0gPDwgOCkgIHwgKFNbaV0gPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8XG5cdCAgICAgICAgICAgICAgICAgICAgICAgKCgoU1tpXSA8PCAyNCkgfCAoU1tpXSA+Pj4gOCkpICAmIDB4ZmYwMGZmMDApO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBFbmNyeXB0XG5cdCAgICAgICAgICAgICAgICBNW29mZnNldCArIGldIF49IFNbaV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiAxMjgvMzIsXG5cblx0ICAgICAgICBpdlNpemU6IDY0LzMyXG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gbmV4dFN0YXRlKCkge1xuXHQgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgIHZhciBYID0gdGhpcy5fWDtcblx0ICAgICAgICB2YXIgQyA9IHRoaXMuX0M7XG5cblx0ICAgICAgICAvLyBTYXZlIG9sZCBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIENfW2ldID0gQ1tpXTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IGNvdW50ZXIgdmFsdWVzXG5cdCAgICAgICAgQ1swXSA9IChDWzBdICsgMHg0ZDM0ZDM0ZCArIHRoaXMuX2IpIHwgMDtcblx0ICAgICAgICBDWzFdID0gKENbMV0gKyAweGQzNGQzNGQzICsgKChDWzBdID4+PiAwKSA8IChDX1swXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzJdID0gKENbMl0gKyAweDM0ZDM0ZDM0ICsgKChDWzFdID4+PiAwKSA8IChDX1sxXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzNdID0gKENbM10gKyAweDRkMzRkMzRkICsgKChDWzJdID4+PiAwKSA8IChDX1syXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzRdID0gKENbNF0gKyAweGQzNGQzNGQzICsgKChDWzNdID4+PiAwKSA8IChDX1szXSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzVdID0gKENbNV0gKyAweDM0ZDM0ZDM0ICsgKChDWzRdID4+PiAwKSA8IChDX1s0XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzZdID0gKENbNl0gKyAweDRkMzRkMzRkICsgKChDWzVdID4+PiAwKSA8IChDX1s1XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICBDWzddID0gKENbN10gKyAweGQzNGQzNGQzICsgKChDWzZdID4+PiAwKSA8IChDX1s2XSA+Pj4gMCkgPyAxIDogMCkpIHwgMDtcblx0ICAgICAgICB0aGlzLl9iID0gKENbN10gPj4+IDApIDwgKENfWzddID4+PiAwKSA/IDEgOiAwO1xuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBnLXZhbHVlc1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBneCA9IFhbaV0gKyBDW2ldO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnN0cnVjdCBoaWdoIGFuZCBsb3cgYXJndW1lbnQgZm9yIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnYSA9IGd4ICYgMHhmZmZmO1xuXHQgICAgICAgICAgICB2YXIgZ2IgPSBneCA+Pj4gMTY7XG5cblx0ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhpZ2ggYW5kIGxvdyByZXN1bHQgb2Ygc3F1YXJpbmdcblx0ICAgICAgICAgICAgdmFyIGdoID0gKCgoKGdhICogZ2EpID4+PiAxNykgKyBnYSAqIGdiKSA+Pj4gMTUpICsgZ2IgKiBnYjtcblx0ICAgICAgICAgICAgdmFyIGdsID0gKCgoZ3ggJiAweGZmZmYwMDAwKSAqIGd4KSB8IDApICsgKCgoZ3ggJiAweDAwMDBmZmZmKSAqIGd4KSB8IDApO1xuXG5cdCAgICAgICAgICAgIC8vIEhpZ2ggWE9SIGxvd1xuXHQgICAgICAgICAgICBHW2ldID0gZ2ggXiBnbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXRlIHZhbHVlc1xuXHQgICAgICAgIFhbMF0gPSAoR1swXSArICgoR1s3XSA8PCAxNikgfCAoR1s3XSA+Pj4gMTYpKSArICgoR1s2XSA8PCAxNikgfCAoR1s2XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbMV0gPSAoR1sxXSArICgoR1swXSA8PCA4KSAgfCAoR1swXSA+Pj4gMjQpKSArIEdbN10pIHwgMDtcblx0ICAgICAgICBYWzJdID0gKEdbMl0gKyAoKEdbMV0gPDwgMTYpIHwgKEdbMV0gPj4+IDE2KSkgKyAoKEdbMF0gPDwgMTYpIHwgKEdbMF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzNdID0gKEdbM10gKyAoKEdbMl0gPDwgOCkgIHwgKEdbMl0gPj4+IDI0KSkgKyBHWzFdKSB8IDA7XG5cdCAgICAgICAgWFs0XSA9IChHWzRdICsgKChHWzNdIDw8IDE2KSB8IChHWzNdID4+PiAxNikpICsgKChHWzJdIDw8IDE2KSB8IChHWzJdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFs1XSA9IChHWzVdICsgKChHWzRdIDw8IDgpICB8IChHWzRdID4+PiAyNCkpICsgR1szXSkgfCAwO1xuXHQgICAgICAgIFhbNl0gPSAoR1s2XSArICgoR1s1XSA8PCAxNikgfCAoR1s1XSA+Pj4gMTYpKSArICgoR1s0XSA8PCAxNikgfCAoR1s0XSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbN10gPSAoR1s3XSArICgoR1s2XSA8PCA4KSAgfCAoR1s2XSA+Pj4gMjQpKSArIEdbNV0pIHwgMDtcblx0ICAgIH1cblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbnMgdG8gdGhlIGNpcGhlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQGV4YW1wbGVcblx0ICAgICAqXG5cdCAgICAgKiAgICAgdmFyIGNpcGhlcnRleHQgPSBDcnlwdG9KUy5SYWJiaXQuZW5jcnlwdChtZXNzYWdlLCBrZXksIGNmZyk7XG5cdCAgICAgKiAgICAgdmFyIHBsYWludGV4dCAgPSBDcnlwdG9KUy5SYWJiaXQuZGVjcnlwdChjaXBoZXJ0ZXh0LCBrZXksIGNmZyk7XG5cdCAgICAgKi9cblx0ICAgIEMuUmFiYml0ID0gU3RyZWFtQ2lwaGVyLl9jcmVhdGVIZWxwZXIoUmFiYml0KTtcblx0fSgpKTtcblxuXG5cdHJldHVybiBDcnlwdG9KUy5SYWJiaXQ7XG5cbn0pKTsiLCAiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSwgdW5kZWYpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCIuL2NvcmVcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCIsIFwiLi9lbmMtYmFzZTY0XCIsIFwiLi9tZDVcIiwgXCIuL2V2cGtkZlwiLCBcIi4vY2lwaGVyLWNvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoKSB7XG5cdCAgICAvLyBTaG9ydGN1dHNcblx0ICAgIHZhciBDID0gQ3J5cHRvSlM7XG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYjtcblx0ICAgIHZhciBTdHJlYW1DaXBoZXIgPSBDX2xpYi5TdHJlYW1DaXBoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBSZXVzYWJsZSBvYmplY3RzXG5cdCAgICB2YXIgUyAgPSBbXTtcblx0ICAgIHZhciBDXyA9IFtdO1xuXHQgICAgdmFyIEcgID0gW107XG5cblx0ICAgIC8qKlxuXHQgICAgICogUmFiYml0IHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtLlxuXHQgICAgICpcblx0ICAgICAqIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiB0aGF0IG5lZ2xlY3RlZCB0byBjb252ZXJ0IHRoZSBrZXkgdG8gbGl0dGxlLWVuZGlhbi5cblx0ICAgICAqIFRoaXMgZXJyb3IgZG9lc24ndCBhZmZlY3QgdGhlIGNpcGhlcidzIHNlY3VyaXR5LFxuXHQgICAgICogYnV0IGl0IGRvZXMgYWZmZWN0IGl0cyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zLlxuXHQgICAgICovXG5cdCAgICB2YXIgUmFiYml0TGVnYWN5ID0gQ19hbGdvLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgSyA9IHRoaXMuX2tleS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIGl2ID0gdGhpcy5jZmcuaXY7XG5cblx0ICAgICAgICAgICAgLy8gR2VuZXJhdGUgaW5pdGlhbCBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIFggPSB0aGlzLl9YID0gW1xuXHQgICAgICAgICAgICAgICAgS1swXSwgKEtbM10gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSxcblx0ICAgICAgICAgICAgICAgIEtbMV0sIChLWzBdIDw8IDE2KSB8IChLWzNdID4+PiAxNiksXG5cdCAgICAgICAgICAgICAgICBLWzJdLCAoS1sxXSA8PCAxNikgfCAoS1swXSA+Pj4gMTYpLFxuXHQgICAgICAgICAgICAgICAgS1szXSwgKEtbMl0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KVxuXHQgICAgICAgICAgICBdO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGluaXRpYWwgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICAgICAgdmFyIEMgPSB0aGlzLl9DID0gW1xuXHQgICAgICAgICAgICAgICAgKEtbMl0gPDwgMTYpIHwgKEtbMl0gPj4+IDE2KSwgKEtbMF0gJiAweGZmZmYwMDAwKSB8IChLWzFdICYgMHgwMDAwZmZmZiksXG5cdCAgICAgICAgICAgICAgICAoS1szXSA8PCAxNikgfCAoS1szXSA+Pj4gMTYpLCAoS1sxXSAmIDB4ZmZmZjAwMDApIHwgKEtbMl0gJiAweDAwMDBmZmZmKSxcblx0ICAgICAgICAgICAgICAgIChLWzBdIDw8IDE2KSB8IChLWzBdID4+PiAxNiksIChLWzJdICYgMHhmZmZmMDAwMCkgfCAoS1szXSAmIDB4MDAwMGZmZmYpLFxuXHQgICAgICAgICAgICAgICAgKEtbMV0gPDwgMTYpIHwgKEtbMV0gPj4+IDE2KSwgKEtbM10gJiAweGZmZmYwMDAwKSB8IChLWzBdICYgMHgwMDAwZmZmZilcblx0ICAgICAgICAgICAgXTtcblxuXHQgICAgICAgICAgICAvLyBDYXJyeSBiaXRcblx0ICAgICAgICAgICAgdGhpcy5fYiA9IDA7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtIGZvdXIgdGltZXNcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gTW9kaWZ5IHRoZSBjb3VudGVyc1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgQ1tpXSBePSBYWyhpICsgNCkgJiA3XTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIElWIHNldHVwXG5cdCAgICAgICAgICAgIGlmIChpdikge1xuXHQgICAgICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgICAgICB2YXIgSVYgPSBpdi53b3Jkcztcblx0ICAgICAgICAgICAgICAgIHZhciBJVl8wID0gSVZbMF07XG5cdCAgICAgICAgICAgICAgICB2YXIgSVZfMSA9IElWWzFdO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBmb3VyIHN1YnZlY3RvcnNcblx0ICAgICAgICAgICAgICAgIHZhciBpMCA9ICgoKElWXzAgPDwgOCkgfCAoSVZfMCA+Pj4gMjQpKSAmIDB4MDBmZjAwZmYpIHwgKCgoSVZfMCA8PCAyNCkgfCAoSVZfMCA+Pj4gOCkpICYgMHhmZjAwZmYwMCk7XG5cdCAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKChJVl8xIDw8IDgpIHwgKElWXzEgPj4+IDI0KSkgJiAweDAwZmYwMGZmKSB8ICgoKElWXzEgPDwgMjQpIHwgKElWXzEgPj4+IDgpKSAmIDB4ZmYwMGZmMDApO1xuXHQgICAgICAgICAgICAgICAgdmFyIGkxID0gKGkwID4+PiAxNikgfCAoaTIgJiAweGZmZmYwMDAwKTtcblx0ICAgICAgICAgICAgICAgIHZhciBpMyA9IChpMiA8PCAxNikgIHwgKGkwICYgMHgwMDAwZmZmZik7XG5cblx0ICAgICAgICAgICAgICAgIC8vIE1vZGlmeSBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgICAgICAgICAgQ1swXSBePSBpMDtcblx0ICAgICAgICAgICAgICAgIENbMV0gXj0gaTE7XG5cdCAgICAgICAgICAgICAgICBDWzJdIF49IGkyO1xuXHQgICAgICAgICAgICAgICAgQ1szXSBePSBpMztcblx0ICAgICAgICAgICAgICAgIENbNF0gXj0gaTA7XG5cdCAgICAgICAgICAgICAgICBDWzVdIF49IGkxO1xuXHQgICAgICAgICAgICAgICAgQ1s2XSBePSBpMjtcblx0ICAgICAgICAgICAgICAgIENbN10gXj0gaTM7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN5c3RlbSBmb3VyIHRpbWVzXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cblx0ICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aGUgc3lzdGVtXG5cdCAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIEdlbmVyYXRlIGZvdXIga2V5c3RyZWFtIHdvcmRzXG5cdCAgICAgICAgICAgIFNbMF0gPSBYWzBdIF4gKFhbNV0gPj4+IDE2KSBeIChYWzNdIDw8IDE2KTtcblx0ICAgICAgICAgICAgU1sxXSA9IFhbMl0gXiAoWFs3XSA+Pj4gMTYpIF4gKFhbNV0gPDwgMTYpO1xuXHQgICAgICAgICAgICBTWzJdID0gWFs0XSBeIChYWzFdID4+PiAxNikgXiAoWFs3XSA8PCAxNik7XG5cdCAgICAgICAgICAgIFNbM10gPSBYWzZdIF4gKFhbM10gPj4+IDE2KSBeIChYWzFdIDw8IDE2KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3dhcCBlbmRpYW5cblx0ICAgICAgICAgICAgICAgIFNbaV0gPSAoKChTW2ldIDw8IDgpICB8IChTW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfFxuXHQgICAgICAgICAgICAgICAgICAgICAgICgoKFNbaV0gPDwgMjQpIHwgKFNbaV0gPj4+IDgpKSAgJiAweGZmMDBmZjAwKTtcblxuXHQgICAgICAgICAgICAgICAgLy8gRW5jcnlwdFxuXHQgICAgICAgICAgICAgICAgTVtvZmZzZXQgKyBpXSBePSBTW2ldO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIGJsb2NrU2l6ZTogMTI4LzMyLFxuXG5cdCAgICAgICAgaXZTaXplOiA2NC8zMlxuXHQgICAgfSk7XG5cblx0ICAgIGZ1bmN0aW9uIG5leHRTdGF0ZSgpIHtcblx0ICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICB2YXIgWCA9IHRoaXMuX1g7XG5cdCAgICAgICAgdmFyIEMgPSB0aGlzLl9DO1xuXG5cdCAgICAgICAgLy8gU2F2ZSBvbGQgY291bnRlciB2YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICBDX1tpXSA9IENbaV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBjb3VudGVyIHZhbHVlc1xuXHQgICAgICAgIENbMF0gPSAoQ1swXSArIDB4NGQzNGQzNGQgKyB0aGlzLl9iKSB8IDA7XG5cdCAgICAgICAgQ1sxXSA9IChDWzFdICsgMHhkMzRkMzRkMyArICgoQ1swXSA+Pj4gMCkgPCAoQ19bMF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1syXSA9IChDWzJdICsgMHgzNGQzNGQzNCArICgoQ1sxXSA+Pj4gMCkgPCAoQ19bMV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1szXSA9IChDWzNdICsgMHg0ZDM0ZDM0ZCArICgoQ1syXSA+Pj4gMCkgPCAoQ19bMl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s0XSA9IChDWzRdICsgMHhkMzRkMzRkMyArICgoQ1szXSA+Pj4gMCkgPCAoQ19bM10gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s1XSA9IChDWzVdICsgMHgzNGQzNGQzNCArICgoQ1s0XSA+Pj4gMCkgPCAoQ19bNF0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s2XSA9IChDWzZdICsgMHg0ZDM0ZDM0ZCArICgoQ1s1XSA+Pj4gMCkgPCAoQ19bNV0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgQ1s3XSA9IChDWzddICsgMHhkMzRkMzRkMyArICgoQ1s2XSA+Pj4gMCkgPCAoQ19bNl0gPj4+IDApID8gMSA6IDApKSB8IDA7XG5cdCAgICAgICAgdGhpcy5fYiA9IChDWzddID4+PiAwKSA8IChDX1s3XSA+Pj4gMCkgPyAxIDogMDtcblxuXHQgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZy12YWx1ZXNcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xuXHQgICAgICAgICAgICB2YXIgZ3ggPSBYW2ldICsgQ1tpXTtcblxuXHQgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgaGlnaCBhbmQgbG93IGFyZ3VtZW50IGZvciBzcXVhcmluZ1xuXHQgICAgICAgICAgICB2YXIgZ2EgPSBneCAmIDB4ZmZmZjtcblx0ICAgICAgICAgICAgdmFyIGdiID0gZ3ggPj4+IDE2O1xuXG5cdCAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBoaWdoIGFuZCBsb3cgcmVzdWx0IG9mIHNxdWFyaW5nXG5cdCAgICAgICAgICAgIHZhciBnaCA9ICgoKChnYSAqIGdhKSA+Pj4gMTcpICsgZ2EgKiBnYikgPj4+IDE1KSArIGdiICogZ2I7XG5cdCAgICAgICAgICAgIHZhciBnbCA9ICgoKGd4ICYgMHhmZmZmMDAwMCkgKiBneCkgfCAwKSArICgoKGd4ICYgMHgwMDAwZmZmZikgKiBneCkgfCAwKTtcblxuXHQgICAgICAgICAgICAvLyBIaWdoIFhPUiBsb3dcblx0ICAgICAgICAgICAgR1tpXSA9IGdoIF4gZ2w7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGF0ZSB2YWx1ZXNcblx0ICAgICAgICBYWzBdID0gKEdbMF0gKyAoKEdbN10gPDwgMTYpIHwgKEdbN10gPj4+IDE2KSkgKyAoKEdbNl0gPDwgMTYpIHwgKEdbNl0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzFdID0gKEdbMV0gKyAoKEdbMF0gPDwgOCkgIHwgKEdbMF0gPj4+IDI0KSkgKyBHWzddKSB8IDA7XG5cdCAgICAgICAgWFsyXSA9IChHWzJdICsgKChHWzFdIDw8IDE2KSB8IChHWzFdID4+PiAxNikpICsgKChHWzBdIDw8IDE2KSB8IChHWzBdID4+PiAxNikpKSB8IDA7XG5cdCAgICAgICAgWFszXSA9IChHWzNdICsgKChHWzJdIDw8IDgpICB8IChHWzJdID4+PiAyNCkpICsgR1sxXSkgfCAwO1xuXHQgICAgICAgIFhbNF0gPSAoR1s0XSArICgoR1szXSA8PCAxNikgfCAoR1szXSA+Pj4gMTYpKSArICgoR1syXSA8PCAxNikgfCAoR1syXSA+Pj4gMTYpKSkgfCAwO1xuXHQgICAgICAgIFhbNV0gPSAoR1s1XSArICgoR1s0XSA8PCA4KSAgfCAoR1s0XSA+Pj4gMjQpKSArIEdbM10pIHwgMDtcblx0ICAgICAgICBYWzZdID0gKEdbNl0gKyAoKEdbNV0gPDwgMTYpIHwgKEdbNV0gPj4+IDE2KSkgKyAoKEdbNF0gPDwgMTYpIHwgKEdbNF0gPj4+IDE2KSkpIHwgMDtcblx0ICAgICAgICBYWzddID0gKEdbN10gKyAoKEdbNl0gPDwgOCkgIHwgKEdbNl0gPj4+IDI0KSkgKyBHWzVdKSB8IDA7XG5cdCAgICB9XG5cblx0ICAgIC8qKlxuXHQgICAgICogU2hvcnRjdXQgZnVuY3Rpb25zIHRvIHRoZSBjaXBoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBjaXBoZXJ0ZXh0ID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmVuY3J5cHQobWVzc2FnZSwga2V5LCBjZmcpO1xuXHQgICAgICogICAgIHZhciBwbGFpbnRleHQgID0gQ3J5cHRvSlMuUmFiYml0TGVnYWN5LmRlY3J5cHQoY2lwaGVydGV4dCwga2V5LCBjZmcpO1xuXHQgICAgICovXG5cdCAgICBDLlJhYmJpdExlZ2FjeSA9IFN0cmVhbUNpcGhlci5fY3JlYXRlSGVscGVyKFJhYmJpdExlZ2FjeSk7XG5cdH0oKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuUmFiYml0TGVnYWN5O1xuXG59KSk7IiwgIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnksIHVuZGVmKSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpLCByZXF1aXJlKFwiLi94NjQtY29yZVwiKSwgcmVxdWlyZShcIi4vbGliLXR5cGVkYXJyYXlzXCIpLCByZXF1aXJlKFwiLi9lbmMtdXRmMTZcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjRcIiksIHJlcXVpcmUoXCIuL2VuYy1iYXNlNjR1cmxcIiksIHJlcXVpcmUoXCIuL21kNVwiKSwgcmVxdWlyZShcIi4vc2hhMVwiKSwgcmVxdWlyZShcIi4vc2hhMjU2XCIpLCByZXF1aXJlKFwiLi9zaGEyMjRcIiksIHJlcXVpcmUoXCIuL3NoYTUxMlwiKSwgcmVxdWlyZShcIi4vc2hhMzg0XCIpLCByZXF1aXJlKFwiLi9zaGEzXCIpLCByZXF1aXJlKFwiLi9yaXBlbWQxNjBcIiksIHJlcXVpcmUoXCIuL2htYWNcIiksIHJlcXVpcmUoXCIuL3Bia2RmMlwiKSwgcmVxdWlyZShcIi4vZXZwa2RmXCIpLCByZXF1aXJlKFwiLi9jaXBoZXItY29yZVwiKSwgcmVxdWlyZShcIi4vbW9kZS1jZmJcIiksIHJlcXVpcmUoXCIuL21vZGUtY3RyXCIpLCByZXF1aXJlKFwiLi9tb2RlLWN0ci1nbGFkbWFuXCIpLCByZXF1aXJlKFwiLi9tb2RlLW9mYlwiKSwgcmVxdWlyZShcIi4vbW9kZS1lY2JcIiksIHJlcXVpcmUoXCIuL3BhZC1hbnNpeDkyM1wiKSwgcmVxdWlyZShcIi4vcGFkLWlzbzEwMTI2XCIpLCByZXF1aXJlKFwiLi9wYWQtaXNvOTc5NzFcIiksIHJlcXVpcmUoXCIuL3BhZC16ZXJvcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vcGFkLW5vcGFkZGluZ1wiKSwgcmVxdWlyZShcIi4vZm9ybWF0LWhleFwiKSwgcmVxdWlyZShcIi4vYWVzXCIpLCByZXF1aXJlKFwiLi90cmlwbGVkZXNcIiksIHJlcXVpcmUoXCIuL3JjNFwiKSwgcmVxdWlyZShcIi4vcmFiYml0XCIpLCByZXF1aXJlKFwiLi9yYWJiaXQtbGVnYWN5XCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIiwgXCIuL3g2NC1jb3JlXCIsIFwiLi9saWItdHlwZWRhcnJheXNcIiwgXCIuL2VuYy11dGYxNlwiLCBcIi4vZW5jLWJhc2U2NFwiLCBcIi4vZW5jLWJhc2U2NHVybFwiLCBcIi4vbWQ1XCIsIFwiLi9zaGExXCIsIFwiLi9zaGEyNTZcIiwgXCIuL3NoYTIyNFwiLCBcIi4vc2hhNTEyXCIsIFwiLi9zaGEzODRcIiwgXCIuL3NoYTNcIiwgXCIuL3JpcGVtZDE2MFwiLCBcIi4vaG1hY1wiLCBcIi4vcGJrZGYyXCIsIFwiLi9ldnBrZGZcIiwgXCIuL2NpcGhlci1jb3JlXCIsIFwiLi9tb2RlLWNmYlwiLCBcIi4vbW9kZS1jdHJcIiwgXCIuL21vZGUtY3RyLWdsYWRtYW5cIiwgXCIuL21vZGUtb2ZiXCIsIFwiLi9tb2RlLWVjYlwiLCBcIi4vcGFkLWFuc2l4OTIzXCIsIFwiLi9wYWQtaXNvMTAxMjZcIiwgXCIuL3BhZC1pc285Nzk3MVwiLCBcIi4vcGFkLXplcm9wYWRkaW5nXCIsIFwiLi9wYWQtbm9wYWRkaW5nXCIsIFwiLi9mb3JtYXQtaGV4XCIsIFwiLi9hZXNcIiwgXCIuL3RyaXBsZWRlc1wiLCBcIi4vcmM0XCIsIFwiLi9yYWJiaXRcIiwgXCIuL3JhYmJpdC1sZWdhY3lcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCAiY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG5zdHlsZS50ZXh0Q29udGVudCA9IGBcclxuICAubW9kYWwtY2hlY2tib3gtY29udGFpbmVyIHtcclxuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC5tb2RhbC1jaGVja2JveC1jb250YWluZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcclxuICAgIG1hcmdpbi1yaWdodDogNXB4O1xyXG4gIH1cclxuYDtcclxuXHJcbmRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlKTtcclxuaW1wb3J0IHtBcHAsIE1hcmtkb3duVmlldywgTm90aWNlLCBQbHVnaW4sIFRGaWxlLCBWYXVsdH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQge2RlZmF1bHRTZXR0aW5ncywgSVNldHRpbmdzLCBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5nc30gZnJvbSAnLi9zZXR0aW5ncyc7XHJcbmltcG9ydCBmb3JtYXQgZnJvbSAnZGF0ZS1mbnMvZm9ybWF0JztcclxuaW1wb3J0IHtcclxuXHRhdmF0YXJJbml0Q29udGVudCxcclxuXHRwb2ludHNNYWp1cml0eSxcclxuXHRwb2ludHNOb3RlTWFqdXJpdHksXHJcblx0cG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UsXHJcblx0cG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlLFxyXG5cdGVsZW1lbnRzLFxyXG5cdGJvb3N0ZXJSZWNpcGVzLFxyXG5cdHN0cmVha2Jvb3N0ZXJEZWNyZWFzZSxcclxuXHRzdHJlYWtib29zdGVySW5jcmVhc2VEYWlseSxcclxuXHRzdHJlYWtib29zdGVySW5jcmVhc2VXZWVrbHksXHJcblx0Y2hhbmNlVG9FYXJuSW5ncmVkaWVudCxcclxuXHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd259IGZyb20gJy4vY29uc3RhbnRzJ1xyXG5pbXBvcnQge1xyXG5cdGNvdW50X2lubGlua3MsXHJcblx0Y291bnRDaGFyYWN0ZXJzSW5BY3RpdmVGaWxlLFxyXG5cdGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyxcclxuXHRnZXRGaWxlQ291bnRNYXAsXHJcblx0Z2V0RmlsZU1hcCxcclxuXHRnZXROdW1iZXJPZk91dGxpbmtzLFxyXG5cdHJhdGVEaXJlY3Rpb24sXHJcblx0cmF0ZUlubGlua3MsXHJcblx0cmF0ZUxlbmd0aEZpbGVuYW1lLFxyXG5cdHJhdGVMZXZlbE9mTWF0dXJpdHksXHJcblx0cmF0ZU5vdGVMZW5ndGgsXHJcblx0cmF0ZU91dGxpbmtzLFxyXG5cdHJhdGVQcm9ncmVzc2l2ZVN1bW1hcml6YXRpb25cclxufSBmcm9tICcuL21hanVyaXR5Y2FsY3VsYXRpb24nXHJcbmltcG9ydCB7QmFkZ2UsIGNoZWNrSWZSZWNlaXZlQUJhZGdlLCBnZXRCYWRnZUZvckluaXRMZXZlbCwgZ2V0QmFkZ2VGb3JMZXZlbH0gZnJvbSAnLi9iYWRnZXMnXHJcbmltcG9ydCB7Z2V0TGV2ZWxGb3JQb2ludHMsIHN0YXR1c1BvaW50c0ZvckxldmVsfSBmcm9tICcuL2xldmVscydcclxuaW1wb3J0IHR5cGUge01vbWVudH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZSwgZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UgLCBnZXRSYW5kb21NZXNzYWdlUG9pbnRzIH0gZnJvbSAnLi9yYW5kb21Ob3RpZmljYXRpb25UZXh0J1xyXG5pbXBvcnQgeyBNb2RhbEluZm9ybWF0aW9uYm94IH0gZnJvbSAnTW9kYWxJbmZvcm1hdGlvbmJveCc7XHJcbmltcG9ydCB7IE1vZGFsQm9vc3RlciB9IGZyb20gJ01vZGFsQm9vc3Rlcic7XHJcbmltcG9ydCB7IGVuY3J5cHRWYWx1ZSwgZW5jcnlwdFN0cmluZywgZGVjcnlwdFN0cmluZywgZW5jcnlwdE51bWJlciwgZGVjcnlwdE51bWJlciwgZW5jcnlwdEJvb2xlYW4sIGRlY3J5cHRCb29sZWFuIH0gZnJvbSAnZW5jcnlwdGlvbic7XHJcblxyXG5sZXQgcG9pbnRzVG9SZWNlaXZlZDogbnVtYmVyID0gMDsgIFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBnYW1pZmljYXRpb24gZXh0ZW5kcyBQbHVnaW4ge1xyXG5cdC8vcHVibGljIHNldHRpbmdzOiBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIHRpbWVySW50ZXJ2YWw6IG51bWJlcjtcclxuXHRwcml2YXRlIHRpbWVySWQ6IG51bWJlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBzdGF0dXNCYXJJdGVtID0gdGhpcy5hZGRTdGF0dXNCYXJJdGVtKCk7XHJcblx0cHJpdmF0ZSBzdGF0dXNiYXJHYW1pZmljYXRpb24gPSB0aGlzLnN0YXR1c0Jhckl0ZW0uY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KTtcclxuXHRwdWJsaWMgc2V0dGluZ3M6IElTZXR0aW5ncztcclxuXHJcblxyXG5cdGdldFNldHRpbmdTdHJpbmcoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkZWNyeXB0ZWRWYWx1ZSA9IHRoaXMuc2V0dGluZ3Nba2V5XSAhPT0gdW5kZWZpbmVkID8gdGhpcy5zZXR0aW5nc1trZXldLnRvU3RyaW5nKCkgOiAnJ1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgU3RyaW5nOiBkZWNyeXB0ZWQgJHtrZXl9IGlzICR7ZGVjcnlwdFN0cmluZyhkZWNyeXB0ZWRWYWx1ZSl9YClcclxuXHRcdHJldHVybiBkZWNyeXB0U3RyaW5nKGRlY3J5cHRlZFZhbHVlKTtcclxuICAgIH1cclxuXHJcblx0Z2V0U2V0dGluZ051bWJlcihrZXk6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZGVjcnlwdGVkVmFsdWUgPSB0aGlzLnNldHRpbmdzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXMuc2V0dGluZ3Nba2V5XS50b1N0cmluZygpIDogJydcclxuXHRcdC8vY29uc29sZS5sb2coYE51bWJlcjogZGVjcnlwdGVkICR7a2V5fSBpcyAke2RlY3J5cHROdW1iZXIoZGVjcnlwdGVkVmFsdWUpfWApXHJcblx0XHRyZXR1cm4gZGVjcnlwdE51bWJlcihkZWNyeXB0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cdGdldFNldHRpbmdCb29sZWFuKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGVjcnlwdGVkVmFsdWUgPSB0aGlzLnNldHRpbmdzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXMuc2V0dGluZ3Nba2V5XS50b1N0cmluZygpIDogJydcclxuXHRcdC8vY29uc29sZS5sb2coYEJvb2xlYW46IGRlY3J5cHRlZCAke2tleX0gaXMgJHtkZWNyeXB0Qm9vbGVhbihkZWNyeXB0ZWRWYWx1ZSl9YClcclxuXHRcdHJldHVybiBkZWNyeXB0Qm9vbGVhbihkZWNyeXB0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHRzZXRTZXR0aW5nU3RyaW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gU2V0IGEgc3BlY2lmaWMgc2V0dGluZ1xyXG5cdFx0Y29uc3QgdmFsdWVFbmNyeXB0ZWQgPSBlbmNyeXB0U3RyaW5nKHZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3Nba2V5XSA9IHZhbHVlRW5jcnlwdGVkO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgU3RyaW5nOiBuZXcgdmFsdWUgZm9yICR7a2V5fSBpcyAke3ZhbHVlRW5jcnlwdGVkfWApXHJcbiAgICAgICAgLy90aGlzLnNldHRpbmdzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdH1cclxuXHJcblxyXG5cdHNldFNldHRpbmdOdW1iZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICAvLyBTZXQgYSBzcGVjaWZpYyBzZXR0aW5nXHJcblx0XHQvL2NvbnNvbGUubG9nKGBuZXcgdmFsdWUgZm9yICR7a2V5fSBpcyAke3ZhbHVlfWApXHJcblx0XHRjb25zdCB2YWx1ZUVuY3J5cHRlZCA9IGVuY3J5cHROdW1iZXIodmFsdWUpXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgbmV3IHZhbHVlIGZvciAke2tleX0gaXMgJHt2YWx1ZX0gXHUyMUQyICR7dmFsdWVFbmNyeXB0ZWR9YClcclxuXHRcdHRoaXMuc2V0dGluZ3Nba2V5XSA9IHZhbHVlRW5jcnlwdGVkO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYE51bWJlcjogbmV3IHZhbHVlIGZvciAke2tleX0gaXMgJHt2YWx1ZUVuY3J5cHRlZH1gKVxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG5cdFx0XHJcblx0c2V0U2V0dGluZ0Jvb2xlYW4oa2V5OiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgLy8gU2V0IGEgc3BlY2lmaWMgc2V0dGluZ1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgbmV3IHZhbHVlIGZvciAke2tleX0gaXMgJHt2YWx1ZX1gKVxyXG5cdFx0Y29uc3QgdmFsdWVFbmNyeXB0ZWQgPSBlbmNyeXB0Qm9vbGVhbih2YWx1ZSlcclxuICAgICAgICB0aGlzLnNldHRpbmdzW2tleV0gPSB2YWx1ZUVuY3J5cHRlZDtcclxuXHRcdC8vY29uc29sZS5sb2coYEJvb2xlYW46IG5ldyB2YWx1ZSBmb3IgJHtrZXl9IGlzICR7dmFsdWVFbmNyeXB0ZWR9YClcclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdH1cclxuXHJcblxyXG5cdFxyXG5cclxuXHRcclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnb2JzaWRpYW4tcGttLWdhbWlmaWNhdGlvbiBsb2FkZWQhJyk7XHJcblx0XHQvL3RoaXMuc2V0dGluZ3MgPSBkZWZhdWx0U2V0dGluZ3M7XHJcblxyXG5cdCBcclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgR2FtaWZpY2F0aW9uUGx1Z2luU2V0dGluZ3ModGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblxyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHQvLyB0YWtlIGNhcmUgdG8gcmVzZXQgd2hlbiBvcGVuZWQgb24gYSBuZXcgZGF5LCBkb24ndCB3YWl0IGZvciB0cmlnZ2VyXHJcblx0XHRzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0Ly8gQ29kZSB0aGF0IHlvdSB3YW50IHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGRlbGF5XHJcblx0XHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMucmVzZXREYWlseUdvYWxzKClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIodGhpcy5zdGF0dXNiYXJHYW1pZmljYXRpb24pXHJcblx0XHR9LCB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2RlbGF5TG9hZFRpbWUnKSoxMDAwKTsgLy8gMjAwMCBtaWxsaXNlY29uZHMgPSAyIHNlY29uZHNcclxuXHJcblxyXG5cdFx0Ly8gdG8gc2V0IHRpbWVyIGZvciByZXNldCBkYWlseSBhbmQgd2Vla2x5IGdvYWxzXHJcblx0XHR0aGlzLnRpbWVySW50ZXJ2YWwgPSAzMCAqIDYwICogMTAwMDsgLy8gbWludXRlcyB4IHNlY29uZHMgeCBtaWxsaXNlY29uZHNcclxuXHRcdHRoaXMudGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnJlc2V0RGFpbHlHb2Fscy5iaW5kKHRoaXMpLCB0aGlzLnRpbWVySW50ZXJ2YWwpO1xyXG5cclxuXHRcdFxyXG5cclxuXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignZGVidWcnKSl7XHJcblx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihcImFjY2Vzc2liaWxpdHlcIiwgXCJjcmFmdGluZ1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG5cdFx0XHRcdC8vdGhpcy5hY3F1aXJlSW5ncmVkaWVudHMoKTtcclxuXHRcdFx0XHQvL3RoaXMucmVzZXREYWlseUdvYWxzKCk7XHJcblx0XHRcdFx0Ly90aGlzLnNldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnLCB3aW5kb3cubW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQuTU0uWVlZWScpKVxyXG5cdFx0XHRcdC8vdGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0XHQvL3RoaXMuc2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0XHQvL3RoaXMuc2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0XHQvL2F3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0bmV3IE1vZGFsQm9vc3Rlcih0aGlzLmFwcCwgYCBgLCB0aGlzKS5vcGVuKCk7XHJcblx0XHRcdFx0Ly90aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZih0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2NvdW50ZXJNYWp1cml0eUNhbGNJbml0aWFsJykgPj0gNTApe1xyXG5cdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oXCJ0ZXN0LXR1YmUtMlwiLCBcIkJvb3N0ZXJzXCIsIGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHQvL2NvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbCA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdFx0bmV3IE1vZGFsQm9vc3Rlcih0aGlzLmFwcCwgYCBgLCB0aGlzKS5vcGVuKCk7XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2Jvb3N0ZXJzJyxcclxuXHRcdFx0XHRuYW1lOiAnb3BlbiBib290ZXIgcGFsbGV0ZScsXHJcblx0XHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRcdG5ldyBNb2RhbEJvb3N0ZXIodGhpcy5hcHAsIGAgYCwgdGhpcykub3BlbigpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkUmliYm9uSWNvbihcInNwcm91dFwiLCBcIkNhbGN1bGF0ZSBOb3RlIE1hdHVyaXR5XCIsIGFzeW5jICgpID0+IHtcclxuXHRcdFx0Ly9jb25zdCBmaWxlOiBURmlsZSB8IG51bGwgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmNhbGN1bGF0ZU5vdGVNYWp1cml0eSgpO1xyXG5cdFx0fSk7XHJcblxyXG5cclxuXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignZW5hYmxlSW5pdENvbW1hbmQnKSl7XHJcblx0XHRcdC8vIGNvbW1hbmQgSW5pdGlhbGl6ZSBnYW1pZmljYXRpb24gcmF0aW5nc1xyXG5cdFx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRcdGlkOiAnaW5pdC1yYXRlLWdhbWlmaWNhdGlvbicsXHJcblx0XHRcdFx0bmFtZTogJ0luaXRpYWxpemUgZ2FtaWZpY2F0aW9uIHJhdGluZ3MnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVHYW1lKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignZW5hYmxlSW5pdENvbW1hbmQnKSl7XHJcblx0XHRcdC8vIGNvbW1hbmQgY3JlYXRlIGF2YXRhciBwcm9maWxlIHBhZ2VcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ2NyZWF0ZS1hdmF0YXItcGFnZScsXHJcblx0XHRcdFx0bmFtZTogJ2NyZWF0ZSBwcm9maWxlIHBhZ2UnLFxyXG5cdFx0XHRcdGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7IHZhdWx0IH0gPSB0aGlzLmFwcDtcclxuXHRcdFx0XHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSlcclxuXHRcdFx0XHRcdC8vY29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0XHRcdFx0Ly9hd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgY2hhcnRTdHJpbmcpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdlbmFibGVJbml0Q29tbWFuZCcpKSB7XHJcblx0XHRcdC8vIGNvbW1hbmQ6IHJlc2V0IGdhbWVcclxuXHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRpZDogJ3Jlc2V0LWdhbWUnLFxyXG5cdFx0XHRcdG5hbWU6ICdyZXNldCB0aGUgZ2FtZScsXHJcblx0XHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc2V0R2FtZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdFxyXG5cdFx0Ly8gY29tbWFuZDogcmF0ZSBub3RlIG1hdHVyaXR5XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ3JhdGUtbm90ZS1tYXR1cml0eScsXHJcblx0XHRcdG5hbWU6ICdSYXRlIG5vdGUgbWFqdXJpdHknLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuY2FsY3VsYXRlTm90ZU1hanVyaXR5KCk7XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHJcblxyXG5cdFx0Ly8gY29tbWFuZDogY2hhbmdlIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3ltYm9sc1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6ICdjaGFuZ2UtcHJvZ3Jlc3NpdmUtZm9ybWF0dGluZycsXHJcblx0XHRcdG5hbWU6ICd0b2dnbGUgcHJvZ3Jlc3NpdmUgc3VtbWFyaXphdGlvbiBmb3JtYXR0aW5nJyxcclxuXHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRhd2FpdCByZXBsYWNlRm9ybWF0U3RyaW5ncyh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3Byb2dyZXNzaXZlU3VtTGF5ZXIyJyksIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygncHJvZ3Jlc3NpdmVTdW1MYXllcjMnKSk7XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHJcblx0fVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHJlc2V0R2FtZSgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUtleXNGcm9tRnJvbnRtYXR0ZXIoKTtcclxuICAgICAgICB0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJywgMSlcclxuICAgICAgICB0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0YXR1c1BvaW50cycsIDApXHJcbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nTnVtYmVyKCd4cEZvck5leHRMZXZlbCcsIDEwMDApXHJcbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYmFkZ2VCb29zdGVyU3RhdGUnLCBmYWxzZSlcclxuICAgICAgICB0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicsIDEpXHJcbiAgICAgICAgLy9hd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cygwLCcnKVxyXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG4gICAgICAgIG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgR2FtZSBpcyBub3cgcmVzZXRlZC4gUGxlYXNlIGRlbGV0ZSB0aGUgUHJvZmlsZSBQYWdlOiBcIiR7dGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpfS5tZFwiIG1hbnVhbGx5LmApLm9wZW4oKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplR2FtZShzdGF0dXNiYXJHYW1pZmljYXRpb246IEhUTUxTcGFuRWxlbWVudCkge1xyXG5cdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCdnYW1pZmljYXRpb25TdGFydERhdGUnLCBmb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQnKSk7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cclxuXHRcdGNvbnN0IHt2YXVsdH0gPSB0aGlzLmFwcDtcclxuXHRcdGF3YWl0IGNyZWF0ZUF2YXRhckZpbGUodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSlcclxuXHRcdC8vY29uc3QgY2hhcnRTdHJpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUNoYXJ0KHZhdWx0KVxyXG5cdFx0Ly9hd2FpdCByZXBsYWNlQ2hhcnRDb250ZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgY2hhcnRTdHJpbmcpXHJcblx0XHRhd2FpdCB0aGlzLm9wZW5BdmF0YXJGaWxlKClcclxuXHRcdGNvbnN0IGZpbGVDb3VudE1hcDogVEZpbGVbXSA9IGF3YWl0IGdldEZpbGVNYXAodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygndGFnc0V4Y2x1ZGUnKSwgdGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdmb2xkZXJFeGNsdWRlJykpO1xyXG5cdFx0Y29uc29sZS5sb2coYGZpbGVDb3VudE1hcCBsb2FkZWQuIE51bWJlciBvZiBmaWxlczogJHtmaWxlQ291bnRNYXAubGVuZ3RofWApO1xyXG5cclxuXHRcdGxldCBwb2ludHNSZWNlaXZlZCA9IDA7IC8vIHRvIGhhdmUgb25lIG1lc3NhZ2UgYXQgdGhlIGVuZCBob3cgbWFueSBwb2ludHMgcmVjZWl2ZWRcclxuXHJcblx0XHRmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVDb3VudE1hcCkge1xyXG5cdFx0XHRjb25zdCBmaWxlID0gZmlsZU5hbWVcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnRzID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cdFx0XHRpZiAoYWN0aXZlVmlldyAmJiBhY3RpdmVWaWV3LmZpbGUgJiYgYWN0aXZlVmlldy5maWxlLnBhdGggPT09IGZpbGUucGF0aCkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGUucGF0aH0gaXMgY3VycmVudGx5IG9wZW4uIFNraXBwaW5nLmApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGVOYW1lLmJhc2VuYW1lOiAke2ZpbGVOYW1lLmJhc2VuYW1lfWApXHJcblx0XHRcdGNvbnN0IGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZS5iYXNlbmFtZSk7XHJcblx0XHRcdGNvbnN0IHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjaGFyQ291bnQsXHJcblx0XHRcdFx0aGlnaGxpZ2h0ZWRDb3VudCxcclxuXHRcdFx0XHRib2xkQ291bnRcclxuXHRcdFx0fSA9IGNvdW50TGF5ZXIyQW5kTGF5ZXIzQ2hhcmFjdGVycyhmaWxlQ29udGVudHMsIGZpbGVOYW1lLmJhc2VuYW1lLCB0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3Byb2dyZXNzaXZlU3VtTGF5ZXIyJyksIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygncHJvZ3Jlc3NpdmVTdW1MYXllcjMnKSk7XHJcblx0XHRcdGNvbnN0IHJhdGVQcm9ncmVzc2l2ZVN1bTogbnVtYmVyID0gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCk7XHJcblx0XHRcdGNvbnN0IGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUpO1xyXG5cdFx0XHRjb25zdCBpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRjb25zdCBpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgZmlsZUNvdW50TWFwLnNpemUpO1xyXG5cdFx0XHRjb25zdCByYXRlT3V0ID0gcmF0ZU91dGxpbmtzKGdldE51bWJlck9mT3V0bGlua3MoZmlsZSkpO1xyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cclxuXHJcblx0XHRcdGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZS5iYXNlbmFtZX0gaW4gcGF0aCAke2ZpbGVOYW1lLnBhdGh9YCk7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXSwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTm90ZU1hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcImZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J11cIiwgbm90ZU1hanVyaXR5KSwnZnJvbU5vdGVNYWp1cml0eScpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSksJ2Zyb21Ob3RlTWFqdXJpdHlGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpID49IDEgJiYgJ3RpdGxlLWNsYXNzJyBpbiBmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddLCBmaWxlTmFtZVJhdGUpLCdmcm9tVGl0bGVDbGFzcycpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ3RpdGxlLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGZpbGVOYW1lUmF0ZSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgZmlsZU5hbWVSYXRlKSwnZnJvbVRpdGxlQ2xhc3NGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpXHJcblx0XHRcdFx0XHRcdHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSwnZnJvbU5vdGVMZW5ndGhDbGFzcycpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbGVuZ3RoLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aCksJ2Zyb21Ob3RlTGVuZ3RoQ2xhc3NGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnaW5saW5rLWNsYXNzJ10sIGlubGlua0NsYXNzKSwnZnJvbUlubGlua0NsYXNzJylcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnaW5saW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBpbmxpbmtDbGFzcyksJ2Zyb21JbmxpbmtDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dCkgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpLCdmcm9tT3V0bGlua0NsYXNzJylcclxuXHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoISgnb3V0bGluay1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpKSB7XHJcblx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlT3V0KSwnZnJvbU91dGxpbmtDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKSA+PSAxKSB7XHJcblx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0dGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pLCdmcm9tUHJvZ3Jlc3NpdmVUdW1tYXJpemF0aW9uTWF0dXJpdHknKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghKCdwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5JyBpbiBmcm9udG1hdHRlcikpIHtcclxuXHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknXSwgcmF0ZVByb2dyZXNzaXZlU3VtKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlUHJvZ3Jlc3NpdmVTdW0pLCdmcm9tUHJvZ3Jlc3NpdmVUdW1tYXJpemF0aW9uTWF0dXJpdHlGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMud3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlciwgZmlsZU5hbWVSYXRlLCByYXRlRmlsZUxlbmd0aCwgaW5saW5rQ2xhc3MsIHJhdGVPdXQsIHJhdGVQcm9ncmVzc2l2ZVN1bSwgbm90ZU1hanVyaXR5KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGlmIChlPy5uYW1lID09PSAnWUFNTFBhcnNlRXJyb3InKSB7XHJcblx0XHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBgVXBkYXRlIG1hanVyaXR5cyBmYWlsZWQgTWFsZm9ybWVkIGZyb250YW10dGVyIG9uIHRoaXMgZmlsZSA6ICR7ZmlsZS5wYXRofSAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIHRoaXMuZ2V0U2V0dGluZ051bWJlcigndGltZVNob3dOb3RpY2UnKSAqIDEwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50c1JlY2VpdmVkID4gMCkge1xyXG5cdFx0XHRuZXcgTm90aWNlKGAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMgcmVjZWl2ZWRgLHRoaXMuZ2V0U2V0dGluZ051bWJlcigndGltZVNob3dOb3RpY2UnKSAqIDEwMDApXHJcblx0XHRcdGNvbnNvbGUubG9nKGAke3BvaW50c1JlY2VpdmVkfSBQb2ludHMgcmVjZWl2ZWRgKVxyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvLyBJbnNpZGUgeW91ciBmdW5jdGlvbiB3aGVyZSB5b3Ugd2FudCB0byBpbnRyb2R1Y2UgYSBkZWxheVxyXG5cdFx0c2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcblx0XHRcdC8vIENvZGUgdGhhdCB5b3Ugd2FudCB0byBleGVjdXRlIGFmdGVyIHRoZSBkZWxheVxyXG5cdFx0XHRjb25zdCBpbml0QmFkZ2U6IEJhZGdlID0gZ2V0QmFkZ2VGb3JJbml0TGV2ZWwodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpKTtcclxuXHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2luaXRCYWRnZS5uYW1lfVwiIGJhZGdlLiAke2luaXRCYWRnZS5kZXNjcmlwdGlvbn1gLHRoaXMuZ2V0U2V0dGluZ051bWJlcigndGltZVNob3dOb3RpY2UnKSAqIDEwMDAgKiAxLjIpXHJcblx0XHRcdGNvbnNvbGUubG9nKGBZb3UgZWFybmVkICR7aW5pdEJhZGdlLm5hbWV9IC0gJHtpbml0QmFkZ2UuZGVzY3JpcHRpb259YClcclxuXHRcdFx0YXdhaXQgdGhpcy5naXZlSW5pdEJhZGdlSW5Qcm9maWxlKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgaW5pdEJhZGdlKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmJvb3N0ZXJGb3JJbml0KClcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVTdGF0dXNCYXIoc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0fSwgMjAwMCk7IC8vIDIwMDAgbWlsbGlzZWNvbmRzID0gMiBzZWNvbmRzXHJcblxyXG5cdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGBGaW5hbGxpemVkIGdhbWlmaWNhdGlvbiBpbml0aWFsaXN0YXRpb24hXFxuQ29uZ3JhdHVsYXRpb24sIHlvdSBlYXJuZWQgJHtwb2ludHNSZWNlaXZlZH0gUG9pbnRzIVxcblxcbkNoZWNrIHRoZSBQcm9maWxlIFBhZ2U6IFwiJHt0aGlzLmdldFNldHRpbmdTdHJpbmcoJ2F2YXRhclBhZ2VOYW1lJyl9Lm1kXCJcXG5cXG5Zb3UgcmVjZWl2ZWQgYW4gaW5pdGlhbGlzYXRpb24gQm9vc3RlciBha3RpdiBmb3IgeW91ciBmaXJzdCBsZXZlbCB1cHMuIEdhbWUgb24hYCkub3BlbigpO1xyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgd3JpdGVGcm9udG1hdHRlcihmcm9udG1hdHRlcjogYW55LCBmaWxlTmFtZVJhdGU6IG51bWJlciwgcmF0ZUZpbGVMZW5ndGg6IG51bWJlciwgaW5saW5rQ2xhc3M6IG51bWJlciwgcmF0ZU91dDogbnVtYmVyLCByYXRlUHJvZ3Jlc3NpdmVTdW06IG51bWJlciwgbm90ZU1hanVyaXR5OiBudW1iZXIpIHtcclxuXHRcdGZyb250bWF0dGVyWyd0aXRsZS1jbGFzcyddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0ZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSA9IHJhdGVEaXJlY3Rpb24oZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcylcclxuXHRcdGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10gPSByYXRlRGlyZWN0aW9uKGZyb250bWF0dGVyWydvdXRsaW5rLWNsYXNzJ10sIHJhdGVPdXQpXHJcblx0XHRmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddID0gcmF0ZURpcmVjdGlvbihmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddLCBub3RlTWFqdXJpdHkpXHJcblx0fVxyXG5cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnb2JzaWRpYW4tcGttLWdhbWlmaWNhdGlvbiB1bmxvYWRlZCEnKTtcclxuXHJcblx0XHQvLyBDbGVhciB0aGUgdGltZXIgd2hlbiB0aGUgcGx1Z2luIGlzIHVubG9hZGVkXHJcblx0XHRpZiAodGhpcy50aW1lcklkICE9PSBudWxsKSB7XHJcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkKTtcclxuXHRcdFx0dGhpcy50aW1lcklkID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBjYWxjdWxhdGVOb3RlTWFqdXJpdHkoKXtcclxuXHRcdGNvbnN0IGZpbGU6IFRGaWxlIHwgbnVsbD0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHRcdGlmIChmaWxlID09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcignZ290IG5vIGZpbGUsIHByb3BhYmx5IG5vbmUgaXMgYWN0aXZlJylcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZGV0ZWN0SWZOb3RlSXNGaXJzdFRpbWVSYXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIGdldCBmaWxlIGNvbnRlbnQgbGVuZ3RoXHJcblx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdGNvbnN0IGZpbGVDb250ZW50cyA9IGFjdGl2ZVZpZXc/LmVkaXRvci5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBhY3RpdmVWaWV3Py5maWxlLmJhc2VuYW1lO1xyXG5cdFx0XHJcblxyXG5cdFx0bGV0IHJhdGVGaWxlTGVuZ3RoID0gMDtcclxuXHRcdGxldCBmaWxlTGVuZ3RoID0gMDtcclxuXHRcdGxldCByYXRlUHJvZ3Jlc3NpdmVTdW0gPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlQ29udGVudHMgIT09IHVuZGVmaW5lZCAmJiBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGZpbGVMZW5ndGggPSBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoZmlsZUNvbnRlbnRzLCBmaWxlTmFtZSk7XHJcblx0XHRcdHJhdGVGaWxlTGVuZ3RoID0gcmF0ZU5vdGVMZW5ndGgoZmlsZUxlbmd0aCk7XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiBmaWxlQ29udGVudHMgYW5kIGZpbGVOYW1lIGFyZSBub3QgbnVsbFxyXG5cdFx0XHRpZiAoZmlsZUNvbnRlbnRzICE9PSBudWxsICYmIGZpbGVOYW1lICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgeyBjaGFyQ291bnQsIGhpZ2hsaWdodGVkQ291bnQsIGJvbGRDb3VudCB9ID0gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGZpbGVDb250ZW50cywgZmlsZU5hbWUsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygncHJvZ3Jlc3NpdmVTdW1MYXllcjInKSwgdGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdwcm9ncmVzc2l2ZVN1bUxheWVyMycpKTtcclxuXHRcdFx0XHRyYXRlUHJvZ3Jlc3NpdmVTdW0gPSByYXRlUHJvZ3Jlc3NpdmVTdW1tYXJpemF0aW9uKGNoYXJDb3VudCwgaGlnaGxpZ2h0ZWRDb3VudCwgYm9sZENvdW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBmaWxlTmFtZVJhdGUgPSAwO1xyXG5cdFx0bGV0IGlubGlua051bWJlciA9IDA7XHJcblx0XHRsZXQgaW5saW5rQ2xhc3MgPSAwO1xyXG5cdFx0bGV0IHJhdGVPdXQgPSAwO1xyXG5cclxuXHRcdGlmIChmaWxlICE9PSBudWxsKSB7XHJcblx0XHRcdGZpbGVOYW1lUmF0ZSA9IHJhdGVMZW5ndGhGaWxlbmFtZShmaWxlLm5hbWUgPz8gJycpO1xyXG5cdFx0XHRpbmxpbmtOdW1iZXIgPSBjb3VudF9pbmxpbmtzKGZpbGUpO1xyXG5cdFx0XHRpbmxpbmtDbGFzcyA9IHJhdGVJbmxpbmtzKGlubGlua051bWJlcikvLywgbnVtQWxsRmlsZXMpXHJcblx0XHRcdHJhdGVPdXQgPSByYXRlT3V0bGlua3MoZ2V0TnVtYmVyT2ZPdXRsaW5rcyhmaWxlKSk7XHJcblxyXG5cdFx0XHRjb25zdCBub3RlTWFqdXJpdHkgPSByYXRlTGV2ZWxPZk1hdHVyaXR5KHJhdGVGaWxlTGVuZ3RoLCBmaWxlTmFtZVJhdGUsIGlubGlua0NsYXNzLCByYXRlT3V0LCByYXRlUHJvZ3Jlc3NpdmVTdW0pO1xyXG5cdFx0XHRcclxuXHRcdFx0XHJcblx0XHRcdFxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2NvdW50ZXJNYWp1cml0eUNhbGMnLHRoaXMuZ2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsYycpICsgMSlcclxuXHRcdFx0XHJcblx0XHRcdFxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChmcm9udG1hdHRlcikge1xyXG5cdFx0XHRcdFx0XHRsZXQgcG9pbnRzUmVjZWl2ZWQgPSAwOyAvLyB0byBoYXZlIG9uZSBtZXNzYWdlIGF0IHRoZSBlbmQgaG93IG1hbnkgcG9pbnRzIHJlY2VpdmVkXHJcblx0XHRcdFx0XHRcdGlmIChyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSkgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYG5vdGUtbWF0dXJpdHkgPj0xYClcclxuXHRcdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c05vdGVNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10sIG5vdGVNYWp1cml0eSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNOb3RlTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiZnJvbnRtYXR0ZXJbJ25vdGUtbWF0dXJpdHknXVwiLCBub3RlTWFqdXJpdHkpLCdmcm9tTm90ZU1hanVyaXR5JylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEoJ25vdGUtbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNOb3RlTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgbm90ZU1hanVyaXR5KVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c05vdGVNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIG5vdGVNYWp1cml0eSksJ2Zyb21Ob3RlTWFqdXJpdHlGaXJzdFRpbWUnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpO1xyXG5cdFx0XHRcdFx0XHRcdGRldGVjdElmTm90ZUlzRmlyc3RUaW1lUmF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsY0luaXRpYWwnLHRoaXMuZ2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsY0luaXRpYWwnKSArIDEpXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hY3F1aXJlSW5ncmVkaWVudHMoY2hhbmNlVG9FYXJuSW5ncmVkaWVudCwxLDMpO1xyXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMuZ2V0U2V0dGluZ051bWJlcignY291bnRlck1hanVyaXR5Q2FsY0luaXRpYWwnKSA9PSA1MCl7XHJcblx0XHRcdFx0XHRcdFx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgYFx1RDgzRFx1REU4MCBJbnRyb2R1Y2luZyBCb29zdGVycyEgXHVEODNEXHVERTgwTGV2ZWwgdXAgZmFzdGVyLCB5b3UgZW5hYmxlZCB0aGUgbmV4dCBzdGFnZSEgQ3JhZnQgQm9vc3RlcnMgZm9yIGFuIGFjY2VsZXJhdGVkIGtub3dsZWRnZSBqb3VybmV5LiBDbGljayB0aGUgXCJ0ZXN0LXR1YmVcIiBvbiB0aGUgcmlnaHQgb3IgdHlwZSAnT3BlbiBCb29zdGVyIFBhbGV0dGUnIHRvIGdldCBzdGFydGVkISB5b3UgZ290IG9uZSBib29zdGVyIGFzIGEgZ2lmdCwgc28gdHJ5IGl0IG91dCFcdUQ4M0NcdURGMUZcdUQ4M0RcdURDREFcdUQ4M0RcdUREMERgKS5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSA+PSAxICYmICd0aXRsZS1jbGFzcycgaW4gZnJvbnRtYXR0ZXIpe1xyXG5cdFx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXSwgZmlsZU5hbWVSYXRlKSwnZnJvbVRpdGxlQ2xhc3MnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgndGl0bGUtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBmaWxlTmFtZVJhdGUpLCdmcm9tVGl0bGVDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ25vdGUtbGVuZ3RoLWNsYXNzJ10sIHJhdGVGaWxlTGVuZ3RoKVxyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG5ld0xldmVsID0gdGhpcy5naXZlU3RhdHVzUG9pbnRzKHBvaW50c01hanVyaXR5ICogcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnbm90ZS1sZW5ndGgtY2xhc3MnXSwgcmF0ZUZpbGVMZW5ndGgpLCdmcm9tTm90ZUxlbmd0aENsYXNzJylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoISgnbm90ZS1sZW5ndGgtY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCByYXRlRmlsZUxlbmd0aClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVGaWxlTGVuZ3RoKSwnZnJvbU5vdGVMZW5ndGhDbGFzc0ZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddLCBpbmxpbmtDbGFzcykgPj0gMSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydpbmxpbmstY2xhc3MnXSwgaW5saW5rQ2xhc3MpLCdmcm9tSW5saW5rQ2xhc3MnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdpbmxpbmstY2xhc3MnIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKFwiMFwiLCBpbmxpbmtDbGFzcylcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIGlubGlua0NsYXNzKSwnZnJvbUlubGlua0NsYXNzRmlyc3RUaW1lJylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsnb3V0bGluay1jbGFzcyddLCByYXRlT3V0KSA+PSAxKXtcclxuXHRcdFx0XHRcdFx0XHQvL3BvaW50c1JlY2VpdmVkICs9IHBvaW50c01hanVyaXR5KnJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXSwgcmF0ZU91dCksJ2Zyb21PdXRsaW5rQ2xhc3MnKVxyXG5cdFx0XHRcdFx0XHRcdHBvaW50c1JlY2VpdmVkICs9IHBvaW50c1RvUmVjZWl2ZWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kZWNpc2lvbklmQmFkZ2UobmV3TGV2ZWwpXHJcblx0XHRcdFx0XHRcdH1lbHNlIGlmICghKCdvdXRsaW5rLWNsYXNzJyBpbiBmcm9udG1hdHRlcikpe1xyXG5cdFx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhcIjBcIiwgcmF0ZU91dClcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVPdXQpLCdmcm9tT3V0bGlua0NsYXNzRmlyc3RUaW1lJylcclxuXHRcdFx0XHRcdFx0XHRwb2ludHNSZWNlaXZlZCArPSBwb2ludHNUb1JlY2VpdmVkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGVjaXNpb25JZkJhZGdlKG5ld0xldmVsKVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAocmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pID49IDEpe1xyXG5cdFx0XHRcdFx0XHRcdC8vcG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzTWFqdXJpdHkqcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhmcm9udG1hdHRlclsncHJvZ3Jlc3NpdmUtc3VtbWFyaXphdGlvbi1tYXR1cml0eSddLCByYXRlUHJvZ3Jlc3NpdmVTdW0pXHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3TGV2ZWwgPSB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzTWFqdXJpdHkgKiByYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSksJ2Zyb21Qcm9ncmVzc2l2ZVR1bW1hcml6YXRpb25NYXR1cml0eScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fWVsc2UgaWYgKCEoJ3Byb2dyZXNzaXZlLXN1bW1hcml6YXRpb24tbWF0dXJpdHknIGluIGZyb250bWF0dGVyKSl7XHJcblx0XHRcdFx0XHRcdFx0Ly9wb2ludHNSZWNlaXZlZCArPSBwb2ludHNNYWp1cml0eSpyYXRlRGlyZWN0aW9uRm9yU3RhdHVzUG9pbnRzKGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J10sIHJhdGVQcm9ncmVzc2l2ZVN1bSlcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdMZXZlbCA9IHRoaXMuZ2l2ZVN0YXR1c1BvaW50cyhwb2ludHNNYWp1cml0eSAqIHJhdGVEaXJlY3Rpb25Gb3JTdGF0dXNQb2ludHMoXCIwXCIsIHJhdGVQcm9ncmVzc2l2ZVN1bSksJ2Zyb21Qcm9ncmVzc2l2ZVR1bW1hcml6YXRpb25NYXR1cml0eUZpcnN0VGltZScpXHJcblx0XHRcdFx0XHRcdFx0cG9pbnRzUmVjZWl2ZWQgKz0gcG9pbnRzVG9SZWNlaXZlZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbClcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGBwb2ludHNSZWNlaXZlZDogJHtwb2ludHNSZWNlaXZlZH1gKVxyXG5cdFx0XHRcdFx0XHRpZiAocG9pbnRzUmVjZWl2ZWQgPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlUG9pbnRzID0gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHNSZWNlaXZlZCk7XHJcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShtZXNzYWdlUG9pbnRzLHRoaXMuZ2V0U2V0dGluZ051bWJlcigndGltZVNob3dOb3RpY2UnKSAqIDEwMDApXHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZVBvaW50cylcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy53cml0ZUZyb250bWF0dGVyKGZyb250bWF0dGVyLCBmaWxlTmFtZVJhdGUsIHJhdGVGaWxlTGVuZ3RoLCBpbmxpbmtDbGFzcywgcmF0ZU91dCwgcmF0ZVByb2dyZXNzaXZlU3VtLCBub3RlTWFqdXJpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0aWYgKGU/Lm5hbWUgPT09ICdZQU1MUGFyc2VFcnJvcicpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGBVcGRhdGUgbWFqdXJpdHlzIGZhaWxlZCBNYWxmb3JtZWQgZnJvbnRhbXR0ZXIgb24gdGhpcyBmaWxlIDogJHtmaWxlLnBhdGh9ICR7ZS5tZXNzYWdlfWA7XHJcblx0XHRcdFx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSwgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCd0aW1lU2hvd05vdGljZScpICogMTAwMCk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdG5ldyBOb3RpY2UoJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ25vdGUgbWFqdXJpdHkgdXBkYXRlZCEnKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2ZpbGUgd2FzIG5vdCBmb3VuZCB0byBjYWxjdWxhdGUgbWFqdXJpdGllcy4gTWFrZSBzdXJlIG9uZSBpcyBhY3RpdmUuJylcclxuXHRcdH1cclxuXHRcdGlmIChkZXRlY3RJZk5vdGVJc0ZpcnN0VGltZVJhdGVkKXtcclxuXHRcdFx0YXdhaXQgdGhpcy5pbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLmluY3JlYXNlV2Vla2x5Q3JlYXRlZE5vdGVDb3VudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHJlc2V0RGFpbHlHb2Fscygpe1xyXG5cdFx0bGV0IHJlc2V0ID0gZmFsc2U7XHJcblx0XHRpZighaXNTYW1lRGF5KHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdkYWlseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2RhaWx5Tm90ZUNyZWF0aW9uVGFzaycsIDApO1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdTdHJpbmcoJ2RhaWx5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IENoYWxsZW5nZSByZXNldGVkYClcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYoIWlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJyksICdERC5NTS5ZWVlZJykpICYmICFpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHRjb25zdCBkYXlzUGFzc2VkID0gd2luZG93Lm1vbWVudCgpLmRpZmYod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSwgJ2RheXMnKSAtIDE7IC8vdG9kYXkgaXMgc3RpbGwgYSBjaGFuY2UuIFxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3dlZWtseU5vdGVDcmVhdGlvblRhc2snLCAwKTtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0dGhpcy5kZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGF5c1Bhc3NlZClcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7ZGF5c1Bhc3NlZH0gZGF5cyBwYXNzZWRgKVxyXG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0Y29uc29sZS5sb2coYHdlZWtseSBDaGFsbGVuZ2UgcmVzZXRlZGApXHJcblx0XHRcdHJlc2V0ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmKGlzT25lRGF5QmVmb3JlKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJyksICdERC5NTS5ZWVlZJykpICYmIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpID09IDcpe1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3dlZWtseU5vdGVDcmVhdGlvblRhc2snLCAwKTtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0cmVzZXQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHJlc2V0KXtcclxuXHRcdFx0YXdhaXQgdGhpcy51cGRhdGVBdmF0YXJQYWdlKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZGVhdGl2YXRlIGJvb3N0ZXJzXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzJykgPT0gdHJ1ZSAmJiBpc01pbnV0ZXNQYXNzZWQod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ2Jvb3N0ZXJEYXRlUGVycGV0dWFsUHJvZ3Jlc3MnKSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKSxnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKCdwZXJwZXR1YWxQcm9ncmVzcycpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzcycsZmFsc2UpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnXCJQZXJwZXR1YWwgUHJvZ3Jlc3NcIiBoYXMgZW5kZWQuJylcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMnKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVTdHJhdGVnaWNTeW5hcHNlcycpLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLGdldEJvb3N0ZXJSdW5UaW1lRnJvbVZhck5hbWUoJ3N0cmF0ZWdpY1N5bmFwc2VzJykpKXtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlN0cmF0ZWdpYyBTeW5hcHNlc1wiIGhhcyBlbmRlZC4nKVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZScpID09IHRydWUgJiYgaXNNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdib29zdGVyRGF0ZUxpbmtlcnNMb2RlJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgnbGlua2Vyc0xvZGUnKSkpe1xyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yTGlua2Vyc0xvZGUnLGZhbHNlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1wiTGlua2VycyBMb2RlXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24nKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVSZWN1cnNpdmVSZWZsZWN0aW9uJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgncmVjdXJzaXZlUmVmbGVjdGlvbicpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JSZWN1cnNpdmVSZWZsZWN0aW9uJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlJlY3Vyc2l2ZSBSZWZsZWN0aW9uXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN5bmFwdGljU3VyZ2UnKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVTeW5hcHRpY1N1cmdlJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgnc3luYXB0aWNTdXJnZScpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlN5bmFwdGljIFN1cmdlXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclRpdGxlVGl0YW4nKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVUaXRsZVRpdGFuJyksICdZWVlZLU1NLUREIEhIOm1tOnNzJyksZ2V0Qm9vc3RlclJ1blRpbWVGcm9tVmFyTmFtZSgndGl0bGVUaXRhbicpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIlRpdGxlIFRpdGFuXCIgaGFzIGVuZGVkLicpXHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtJykgPT0gdHJ1ZSAmJiBpc01pbnV0ZXNQYXNzZWQod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ2Jvb3N0ZXJEYXRlUHJlY2lzaW9uUHJpc20nKSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKSxnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKCdwcmVjaXNpb25QcmlzbScpKSl7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbScsZmFsc2UpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnXCJQcmVjaXNpb24gUHJpc21cIiBoYXMgZW5kZWQuJylcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueScpID09IHRydWUgJiYgaXNNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdib29zdGVyRGF0ZUh5cGVybGlua0hhcm1vbnknKSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKSxnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKCdoeXBlcmxpbmtIYXJtb255JykpKXtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3Rvckh5cGVybGlua0hhcm1vbnknLGZhbHNlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1wiSHlwZXJsaW5rIEhhcm1vbnlcIiBoYXMgZW5kZWQuJylcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEnKSA9PSB0cnVlICYmIGlzTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYm9vc3RlckRhdGVFcGhlbWVyYWxFdXBob3JpYScpLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLGdldEJvb3N0ZXJSdW5UaW1lRnJvbVZhck5hbWUoJ2VwaGVtZXJhbEV1cGhvcmlhJykpKXtcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhJyxmYWxzZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdcIkVwaGVtZXJhbCBFdXBob3JpYVwiIGhhcyBlbmRlZC4nKVxyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBpbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCgpe1xyXG5cdFx0bGV0IG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcignZGFpbHlOb3RlQ3JlYXRpb25UYXNrJyk7XHJcbiAgICAgICAgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA8IDIpe1xyXG5cdFx0XHRuZXdEYWlseU5vdGVDcmVhdGlvblRhc2sgKys7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcignZGFpbHlOb3RlQ3JlYXRpb25UYXNrJywgbmV3RGFpbHlOb3RlQ3JlYXRpb25UYXNrKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGlmKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAxKXtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQXZhdGFyIFBhZ2VcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9IGVsc2UgaWYgKG5ld0RhaWx5Tm90ZUNyZWF0aW9uVGFzayA9PSAyKSB7XHJcblx0XHRcdFx0dGhpcy5pbmNyZWFzZVN0cmVha2Jvb3N0ZXIoc3RyZWFrYm9vc3RlckluY3JlYXNlRGFpbHkpXHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZVN0YXR1c0Jhcih0aGlzLnN0YXR1c2JhckdhbWlmaWNhdGlvbilcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yRGFpbHlDaGFsbGVuZ2UsJ2Zvcm1JbmNyZWFzZURhaWx5Q3JlYXRlZE5vdGVDb3VudCcpXHJcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VUd29Ob3RlQ2hhbGxlbmdlKHBvaW50c0ZvckRhaWx5Q2hhbGxlbmdlICogKHRoaXMuZ2V0U2V0dGluZ051bWJlcignYmFkZ2VCb29zdGVyRmFjdG9yJykgKyB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKSkpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBkYWlseSBDaGFsbGVuZ2UgcmVhY2hlZCEgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgY3JlYXRlZC5gKVxyXG5cdFx0XHRcdG5ldyBOb3RpY2UobWVzc2FnZSx0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3RpbWVTaG93Tm90aWNlJykgKiAxMDAwKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyBlbHNlIHRvIGRvIGhlcmVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdEYWlseU5vdGVDcmVhdGlvblRhc2t9LzIgTm90ZXMgY3JlYXRlZCB0b2RheS5gKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VXZWVrbHlDcmVhdGVkTm90ZUNvdW50KCl7XHJcblx0XHRpZihpc09uZURheUJlZm9yZSh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScpLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlQmVsb3c3KCk7XHJcblx0XHR9IGVsc2UgaWYgKGlzU2FtZURheSh3aW5kb3cubW9tZW50KHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScpLCAnREQuTU0uWVlZWScpKSl7XHJcblx0XHRcdC8vIGRvIG5vdGhpbmdcclxuXHRcdFx0Y29uc29sZS5sb2coYGRhaWx5IG5vdGUgY3JlYXRpb24gd2FzIHJhdGVkIGFscmVhZHkgdG9kYXkuYClcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ1N0cmluZygnd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZScsIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0RELk1NLllZWVknKSlcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nTnVtYmVyKCd3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrJywgMSk7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0ZvcldlZWtseU5vdGVDaGFsbGVuZ2VCZWxvdzcoKSB7XHJcblx0XHRsZXQgY3VycmVudFdlZWtseUNyZWF0ZWROb3RlcyA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpO1xyXG5cdFx0aWYgKGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMgPCA3KSB7XHJcblx0XHRcdGN1cnJlbnRXZWVrbHlDcmVhdGVkTm90ZXMrKztcclxuXHRcdFx0dGhpcy5zZXRTZXR0aW5nU3RyaW5nKCd3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlJywgd2luZG93Lm1vbWVudCgpLmZvcm1hdCgnREQuTU0uWVlZWScpKVxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3dlZWtseU5vdGVDcmVhdGlvblRhc2snLCBjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHJcblx0XHRcdGF3YWl0IHRoaXMuY2hlY2tGb3JXZWVrbHlOb3RlQ2hhbGxlbmdlRXZhbHVhdGlvbihjdXJyZW50V2Vla2x5Q3JlYXRlZE5vdGVzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24obmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogbnVtYmVyKSB7XHJcblx0XHRpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA8PSA2KSB7XHJcblx0XHRcdC8vIHVwZGF0ZSBBdmF0YXIgUGFnZVxyXG5cdFx0XHRhd2FpdCB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYCR7bmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFza30vNyBOb3RlcyBjcmVhdGVkIGluIGEgY2hhaW4uYClcclxuXHRcdH0gZWxzZSBpZiAobmV3V2Vla2x5Tm90ZUNyZWF0aW9uVGFzayA9PSA3KSB7XHJcblx0XHRcdHRoaXMuaW5jcmVhc2VTdHJlYWtib29zdGVyKHN0cmVha2Jvb3N0ZXJJbmNyZWFzZVdlZWtseSk7XHJcblx0XHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdGF3YWl0IHRoaXMudXBkYXRlU3RhdHVzQmFyKHRoaXMuc3RhdHVzYmFyR2FtaWZpY2F0aW9uKVxyXG5cdFx0XHRhd2FpdCB0aGlzLmdpdmVTdGF0dXNQb2ludHMocG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlLCAnZnJvbUNoZWNrRm9yV2Vla2x5Tm90ZUNoYWxsZW5nZUV2YWx1YXRpb24nKVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgV2Vla2x5IENoYWxsZW5nZSByZWFjaGVkISAke25ld1dlZWtseU5vdGVDcmVhdGlvblRhc2t9LzcgY3JlYXRlZCBpbiBhIGNoYWluLmApXHJcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBnZXRSYW5kb21NZXNzYWdlV2Vla2x5Q2hhbGxlbmdlKHBvaW50c0ZvcldlZWtseUNoYWxsZW5nZSAqICh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicpICsgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJykpKTtcclxuXHRcdFx0bmV3IE5vdGljZShtZXNzYWdlLHRoaXMuZ2V0U2V0dGluZ051bWJlcigndGltZVNob3dOb3RpY2UnKSAqIDEwMDApXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBub3RoaW5nIGVsc2UgdG8gZG8gaGVyZVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgJHtuZXdXZWVrbHlOb3RlQ3JlYXRpb25UYXNrfS83IE5vdGVzIGNyZWF0ZWQgaW4gYSBjaGFpbi5gKVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZVN0YXR1c0JhcihzdGF0dXNiYXI6IEhUTUxTcGFuRWxlbWVudCl7XHJcblx0XHRjb25zdCBjdXJyZW50TGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c1BvaW50cycpKVxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NiYXJQZXJjZW50ID0gKHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RhdHVzUG9pbnRzJykgLSBjdXJyZW50TGV2ZWwucG9pbnRzKS8oY3VycmVudExldmVsLnBvaW50c05leHQgLSBjdXJyZW50TGV2ZWwucG9pbnRzKSoxMDA7XHJcblx0XHRjb25zdCBjaGFyTnVtUHJvZ3Jlc3NiYXIgPSAxMDtcclxuXHRcdGNvbnN0IGJhckxlbmd0aCA9IE1hdGgucm91bmQocHJvZ3Jlc3NiYXJQZXJjZW50IC8gY2hhck51bVByb2dyZXNzYmFyKVxyXG5cdFx0Y29uc3QgYm9vc3RlckZhY3RvciA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpXHJcblx0XHRzdGF0dXNiYXIuc2V0VGV4dChgXHVEODNDXHVERkIyfGx2bDogJHt0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJyl9IHwgJHt0aGlzLmNyZWF0ZVByb2dyZXNzYmFyKGNoYXJOdW1Qcm9ncmVzc2JhciwgYmFyTGVuZ3RoKX18XHVEODNEXHVERTgwJHtib29zdGVyRmFjdG9yfSR7dGhpcy5yYXRlQm9vc3RlckRpcmVjdGlvbigpfWApXHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSByYXRlQm9vc3RlckRpcmVjdGlvbigpe1xyXG5cdFx0bGV0IGRpcmVjdGlvbiA9ICdcdTIxOTVcdUZFMEYnXHJcblx0XHRpZih0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2RhaWx5Tm90ZUNyZWF0aW9uVGFzaycpPT0xKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MjdBMVx1RkUwRic7XHJcblx0XHR9IGVsc2UgaWYodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignc3RyZWFrYm9vc3RlckRhdGUnKSl7XHJcblx0XHRcdGRpcmVjdGlvbiA9ICdcdTJCMDZcdUZFMEYnO1xyXG5cdFx0fSBlbHNlIGlmKCF0aGlzLmdldFNldHRpbmdCb29sZWFuKCdzdHJlYWtib29zdGVyRGF0ZScpKXtcclxuXHRcdFx0ZGlyZWN0aW9uID0gJ1x1MkIwN1x1RkUwRic7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZGlyZWN0aW9uXHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQcm9ncmVzc2JhcihjaGFyTnVtUHJvZ3Jlc3NiYXI6IG51bWJlciwgYmFyTGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGxldCBwcm9ncmVzc2JhciA9ICcnXHJcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBjaGFyTnVtUHJvZ3Jlc3NiYXI7IGkrKykge1xyXG5cdFx0XHRpZiAoaSA8PSBiYXJMZW5ndGgpIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnPSdcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwcm9ncmVzc2JhciArPSAnLSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb2dyZXNzYmFyO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHRcdGNvbnNvbGUubG9nKCdsb2FkU2V0dGluZ3MoKScpXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBnaXZlU3RhdHVzUG9pbnRzKHBvaW50c1RvQWRkOiBudW1iZXIsIGNhbGxlcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuXHRcdGxldCBib29zdGVyRmFjdG9yID0gMTtcclxuXHRcdGxldCBzdHJlYWtib29zdGVyID0gdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJyk7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzID0gMDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMgPSAwO1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZSA9IDA7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24gPSAwO1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlID0gMDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9yVGl0bGVUaXRhbiA9IDA7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtID0gMDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueSA9IDA7XHJcblx0XHRsZXQgYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhID0gMDtcclxuXHRcdFxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2JhZGdlQm9vc3RlclN0YXRlJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yID0gdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUGVycGV0dWFsUHJvZ3Jlc3MnKSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzcyA9IDM7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMgPSAzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZScpKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvckxpbmtlcnNMb2RlID0gMTA7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24nKSAmJiAoIGNhbGxlciA9PSAnZnJvbU5vdGVNYWp1cml0eScgfHwgY2FsbGVyID09ICdmcm9tVGl0bGVDbGFzcycgfHwgY2FsbGVyID09ICdmcm9tTm90ZUxlbmd0aENsYXNzJyB8fCBjYWxsZXIgPT0gJ2Zyb21JbmxpbmtDbGFzcycgfHwgY2FsbGVyID09ICdmcm9tT3V0bGlua0NsYXNzJyB8fCBjYWxsZXIgPT0gJ2Zyb21Qcm9ncmVzc2l2ZVR1bW1hcml6YXRpb25NYXR1cml0eScpKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24gPSA1O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZ2V0U2V0dGluZ0Jvb2xlYW4oJ2Jvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlJykgJiYgKGNhbGxlciA9PSAnZnJvbUlubGlua0NsYXNzJyB8fCBjYWxsZXIgPT0gJ2Zyb21PdXRsaW5rQ2xhc3MnKSl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlID0gMjA7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclRpdGxlVGl0YW4nKSAmJiBjYWxsZXIgPT0gJ2Zyb21UaXRsZUNsYXNzJyl7XHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuID0gNDtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUHJlY2lzaW9uUHJpc20nKSAmJiBjYWxsZXIgPT0gJ2Zyb21Ob3RlTGVuZ3RoQ2xhc3MnKXtcclxuXHRcdFx0Ym9vc3RlckZhY3RvclByZWNpc2lvblByaXNtID0gNDtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmdldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueScpICYmIChjYWxsZXIgPT0gJ2Zyb21JbmxpbmtDbGFzcycgfHwgY2FsbGVyID09ICdmcm9tT3V0bGlua0NsYXNzJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueSA9IDU7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhJykpe1xyXG5cdFx0XHRib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEgPSA4MDtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0cG9pbnRzVG9SZWNlaXZlZCA9IHBvaW50c1RvQWRkICogKGJvb3N0ZXJGYWN0b3IgKyBzdHJlYWtib29zdGVyICsgYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzICsgYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzICsgYm9vc3RlckZhY3RvckxpbmtlcnNMb2RlICsgYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24gKyBib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZSArIGJvb3N0ZXJGYWN0b3JUaXRsZVRpdGFuICsgYm9vc3RlckZhY3RvclByZWNpc2lvblByaXNtICsgYm9vc3RlckZhY3Rvckh5cGVybGlua0hhcm1vbnkgKyBib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEgKVxyXG5cdFx0dGhpcy5zZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNQb2ludHMnLCBwb2ludHNUb1JlY2VpdmVkICsgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNQb2ludHMnKSlcclxuXHRcdC8vYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUF2YXRhclBhZ2UodGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpKVxyXG5cdH1cclxuXHJcblx0YXN5bmMgaW5jcmVhc2VTdHJlYWtib29zdGVyKGluY3JlYXNlVmFsdWU6bnVtYmVyKXtcclxuXHRcdGxldCBuZXdCb29zdGVyRmFrZm9yID0gcGFyc2VGbG9hdCgodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJykgKyBpbmNyZWFzZVZhbHVlKS50b0ZpeGVkKDEpKTtcclxuXHRcdGlmKG5ld0Jvb3N0ZXJGYWtmb3IgPiA4MCl7XHJcblx0XHRcdG5ld0Jvb3N0ZXJGYWtmb3IgPSA4MDtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKGBuZXdCb29zdGVyRmFrZm9yOiAke25ld0Jvb3N0ZXJGYWtmb3J9YClcclxuXHRcdC8vY29uc29sZS5sb2coYG9sZCB2YWx1ZSBzdHJlYWtib29zdGVyOiAke3RoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpfWApXHJcblx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInLCBuZXdCb29zdGVyRmFrZm9yKTtcclxuXHRcdHRoaXMuc2V0U2V0dGluZ0Jvb2xlYW4oJ3N0cmVha2Jvb3N0ZXJEYXRlJywgdHJ1ZSk7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBuZXcgdmFsdWUgc3RyZWFrYm9vc3RlcjogJHt0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKX1gKVxyXG5cdFx0Ly9hd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHQvL2NvbnNvbGUubG9nKGBzdHJlYWtib29zdGVyOiAke3RoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpfWApXHJcblx0XHR9XHJcblxyXG5cclxuXHRhc3luYyBkZWNyZWFzZVN0cmVha2Jvb3N0ZXIoZGVjcmVhc2VWYWx1ZTpudW1iZXIpe1xyXG5cdFx0bGV0IG5ld0Jvb3N0ZXJGYWtmb3IgPSBwYXJzZUZsb2F0KCh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKSAtIGRlY3JlYXNlVmFsdWUgKiBzdHJlYWtib29zdGVyRGVjcmVhc2UpLnRvRml4ZWQoMSkpXHJcblx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInLCBuZXdCb29zdGVyRmFrZm9yKVxyXG5cdFx0aWYgKG5ld0Jvb3N0ZXJGYWtmb3IgPCAwKXtcclxuXHRcdFx0bmV3Qm9vc3RlckZha2ZvciA9IDBcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicsIG5ld0Jvb3N0ZXJGYWtmb3IpXHJcblx0XHR0aGlzLnNldFNldHRpbmdCb29sZWFuKCdzdHJlYWtib29zdGVyRGF0ZScsIGZhbHNlKTtcclxuXHRcdC8vYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHVwZGF0ZUF2YXRhclBhZ2UoYXZhdGFyUGFnZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj57XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IGxldmVsQW5kUG9pbnRzUmVmZXJlbmNlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2UzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCByZWZlcmVuY2U0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBsZXZlbEFuZFBvaW50c0VuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgbGV2ZWxBbmRQb2ludHNTdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZGFpbHlOb3Rlc0NoYWxsZW5nZUVuZDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGRhaWx5Tm90ZXNDaGFsbGVuZ2VTdGFydDI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHdlZWtseU5vdGVzQ2hhbGxlbmdlRW5kMzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgd2Vla2x5Tm90ZXNDaGFsbGVuZ2VTdGFydDM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGJvb3N0ZXJGYWN0b3JFbmQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBib29zdGVyRmFjdG9yU3RhcnQ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5sZXZlbEFuZFBvaW50c1wiKSB7XHJcblx0XHRcdFx0aWYgKGxldmVsQW5kUG9pbnRzUmVmZXJlbmNlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRsZXZlbEFuZFBvaW50c1JlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl5kYWlseU5vdGVzQ2hhbGxlbmdlXCIpIHtcclxuXHRcdFx0XHRpZiAocmVmZXJlbmNlMiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBcIl53ZWVrbHlOb3Rlc0NoYWxsZW5nZVwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTMgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTMgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAobGluZSA9PT0gXCJeYm9vc3RlckZhY3RvclwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZTQgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZTQgPSBpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gcmVhZCBjdXJyZW50IFBvaW50cyBmcm9tIHNldHRpbmdzXHJcblx0XHRjb25zdCBuZXdQb2ludHMgPSB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c1BvaW50cycpXHJcblxyXG5cdFx0Y29uc3QgbGV2ZWwgPSBnZXRMZXZlbEZvclBvaW50cyhuZXdQb2ludHMpO1xyXG5cdFx0bGV0IG5leHRMZXZlbEF0ID0gdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCd4cEZvck5leHRMZXZlbCcpO1xyXG5cdFx0bGV0IHJlY2VpdmVCYWRnZSA9IGZhbHNlXHJcblx0XHRpZiAodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpIDwgbGV2ZWwubGV2ZWwpe1xyXG5cdFx0XHQvLyBMZXZlbCBVcCBhcmNoaXZlZFxyXG5cdFx0XHRuZXcgTm90aWNlKGBXaXRoICR7bmV3UG9pbnRzfSBwb2ludHMsIHRoZSBjdXJyZW50IGxldmVsIGlzICR7bGV2ZWwubGV2ZWx9LmAsdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCd0aW1lU2hvd05vdGljZScpICogMTAwMCAqIDEuMilcclxuXHRcdFx0Ly8gY2hlY2sgZmlyc3QgaWYgdGhpcyBtZWFucyBhIG5ldyBiYWRnZSBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlblxyXG5cdFx0XHRyZWNlaXZlQmFkZ2UgPSBjaGVja0lmUmVjZWl2ZUFCYWRnZSh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJyksIGxldmVsLmxldmVsKVxyXG5cdFx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ3N0YXR1c0xldmVsJywgbGV2ZWwubGV2ZWwpO1xyXG5cdFx0XHRuZXh0TGV2ZWxBdCA9IGxldmVsLnBvaW50c05leHQ7XHJcblx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcigneHBGb3JOZXh0TGV2ZWwnLCBsZXZlbC5wb2ludHNOZXh0KTtcclxuXHRcdFx0Ly9hd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJvZ3Jlc3NCYXJFbmQgPSBuZXh0TGV2ZWxBdCAtIG5ld1BvaW50cztcclxuXHRcdGNvbnN0IG5ld1BvaW50c1N0cmluZyA9ICd8ICoqTGV2ZWwqKiAgfCAqKicgKyBsZXZlbC5sZXZlbCArICcqKiB8XFxufCBQb2ludHMgfCAnICsgbmV3UG9pbnRzICsgJyAgICB8XFxuXmxldmVsQW5kUG9pbnRzXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtFeHByaXJpZW5jZV1cXG5zZXJpZXM6XFxuICAtIHRpdGxlOiBwb2ludHMgcmVhY2hlZFxcbiAgICBkYXRhOiBbJyArIG5ld1BvaW50cyArICddXFxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxcbiAgICBkYXRhOiBbJyArIHByb2dyZXNzQmFyRW5kICsgJ11cXG54TWluOiAnICsgbGV2ZWwucG9pbnRzICsgJ1xcbnhNYXg6ICcgKyBsZXZlbC5wb2ludHNOZXh0ICsgJ1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCdcclxuXHRcdGNvbnN0IGRhaWx5Q2hhbGxlbmdlID0gJ3wgKipkYWlseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JEYWlseUNoYWxsZW5nZSAqICh0aGlzLmdldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicpICsgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdHJlYWtib29zdGVyJykpICsgJ0VQKiB8ICoqJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignZGFpbHlOb3RlQ3JlYXRpb25UYXNrJykgKyAnLzIqKiAgIHwnO1xyXG5cdFx0Y29uc3QgZGF5c0xlZnRJbldlZWtseUNoYWluIDogbnVtYmVyID0gNyAtIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpO1xyXG5cdFx0bGV0IHdlZWtseUNoYWxsZW5nZSA9ICcnXHJcblx0XHRpZihpc1NhbWVEYXkod2luZG93Lm1vbWVudCh0aGlzLmdldFNldHRpbmdTdHJpbmcoJ3dlZWtseU5vdGVDcmVhdGlvbkRhdGUnKSwgJ0RELk1NLllZWVknKSkpe1xyXG5cdFx0XHR3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InKSArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpKSArICdFUCogICAgIHwgICoqJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJ1x1MjcxNFx1RkUwRi83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR3ZWVrbHlDaGFsbGVuZ2UgPSAnfCAqKndlZWtseSBOb3RlcyoqIHwgKicgKyBwb2ludHNGb3JXZWVrbHlDaGFsbGVuZ2UgKiAodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InKSArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RyZWFrYm9vc3RlcicpKSArICdFUCogICAgIHwgICoqJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJy83KiogICB8XFxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXFxuYGBgY2hhcnRcXG50eXBlOiBiYXJcXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXFxuc2VyaWVzOlxcbiAgLSB0aXRsZTogZGF5cyB0byBkbyBpbiBhIHJvd1xcbiAgICBkYXRhOiBbJyArIHRoaXMuZ2V0U2V0dGluZ051bWJlcignd2Vla2x5Tm90ZUNyZWF0aW9uVGFzaycpICsgJ11cXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXFxuICAgIGRhdGE6IFsnICsgZGF5c0xlZnRJbldlZWtseUNoYWluICsgJ11cXG54TWluOiAwXFxueE1heDogN1xcbnRlbnNpb246IDAuMlxcbndpZHRoOiA0MCVcXG5sYWJlbENvbG9yczogZmFsc2VcXG5maWxsOiBmYWxzZVxcbmJlZ2luQXRaZXJvOiBmYWxzZVxcbmJlc3RGaXQ6IGZhbHNlXFxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcXG5iZXN0Rml0TnVtYmVyOiAwXFxuc3RhY2tlZDogdHJ1ZVxcbmluZGV4QXhpczogeVxcbnhUaXRsZTogXCJwcm9ncmVzc1wiXFxubGVnZW5kOiBmYWxzZVxcbmBgYCc7XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdGNvbnN0IGJvb3N0ZXJGYWN0b3IgPSAnfCAqKmJvb3N0ZXIgZmFjdG9yKiogfCAqKicgKyB0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3N0cmVha2Jvb3N0ZXInKSArICcqKiB8J1xyXG5cclxuXHRcdGlmIChsZXZlbEFuZFBvaW50c1JlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgIT0gbnVsbCAmJiByZWZlcmVuY2UzICE9IG51bGwgJiYgcmVmZXJlbmNlNCAhPSBudWxsKXtcclxuXHRcdFx0bGV2ZWxBbmRQb2ludHNTdGFydCA9IGxldmVsQW5kUG9pbnRzUmVmZXJlbmNlIC0gMjtcclxuXHRcdFx0bGV2ZWxBbmRQb2ludHNFbmQgPSBsZXZlbEFuZFBvaW50c1JlZmVyZW5jZSArIDI0O1xyXG5cdFx0XHRkYWlseU5vdGVzQ2hhbGxlbmdlU3RhcnQyID0gcmVmZXJlbmNlMiAtIDEgLSAyNTsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHRkYWlseU5vdGVzQ2hhbGxlbmdlRW5kMiA9IHJlZmVyZW5jZTIgLSAyNTsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHR3ZWVrbHlOb3Rlc0NoYWxsZW5nZVN0YXJ0MyA9IHJlZmVyZW5jZTMgLSAxIC0yNTsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cdFx0XHR3ZWVrbHlOb3Rlc0NoYWxsZW5nZUVuZDMgPSByZWZlcmVuY2UzICsgMjQgLTI1OyAvLyBubyBpZGVhIHdoeSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JTdGFydDQgPSByZWZlcmVuY2U0IC0gMSAtIDI1OyAvLyBubyBpZGVhIHdoeSBvZmZzZXQgMjUgaXMgbmVlZGVkXHJcblx0XHRcdGJvb3N0ZXJGYWN0b3JFbmQ0ID0gcmVmZXJlbmNlNCAtIDI1IDsgLy8gbm8gaWRlYSB3aHkgb2Zmc2V0IDI1IGlzIG5lZWRlZFxyXG5cclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgbGV2ZWxBbmRQb2ludHNTdGFydCksIG5ld1BvaW50c1N0cmluZywgLi4ubGluZXMuc2xpY2UobGV2ZWxBbmRQb2ludHNFbmQpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMyID0gWy4uLm5ld0xpbmVzLnNsaWNlKDAsIGRhaWx5Tm90ZXNDaGFsbGVuZ2VTdGFydDIpLCBkYWlseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMuc2xpY2UoZGFpbHlOb3Rlc0NoYWxsZW5nZUVuZDIpXTtcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMzID0gWy4uLm5ld0xpbmVzMi5zbGljZSgwLCB3ZWVrbHlOb3Rlc0NoYWxsZW5nZVN0YXJ0MyksIHdlZWtseUNoYWxsZW5nZSwgLi4ubmV3TGluZXMyLnNsaWNlKHdlZWtseU5vdGVzQ2hhbGxlbmdlRW5kMyldO1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lczQgPSBbLi4ubmV3TGluZXMzLnNsaWNlKDAsIGJvb3N0ZXJGYWN0b3JTdGFydDQpLCBib29zdGVyRmFjdG9yLCAuLi5uZXdMaW5lczMuc2xpY2UoYm9vc3RlckZhY3RvckVuZDQpXTtcclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczQuam9pbihcIlxcblwiKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVjZWl2ZUJhZGdlXHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUJhZGdlSW5Qcm9maWxlKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGJhZGdlOiBCYWRnZSl7XHJcblx0XHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2F2YXRhclBhZ2VOYW1lfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSA9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBGaWxlICR7YXZhdGFyUGFnZU5hbWV9Lm1kIGRvZXMgbm90IGV4aXN0YCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZpbGUgPSBleGlzdGluZ0ZpbGUgYXMgVEZpbGU7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgcmVmZXJlbmNlMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHRcdGxldCBzdGFydDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgZW5kMjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XHJcblx0XHRcdGlmIChsaW5lID09PSBcIiMjIyMgYWNoaWV2ZWRcIikge1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdHJlZmVyZW5jZSA9IGk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChsaW5lID09PSBiYWRnZS5sZXZlbCArIFwiOiAqXCIgKyBiYWRnZS5uYW1lICsgXCIqXCIpe1xyXG5cdFx0XHRcdGlmIChyZWZlcmVuY2UyID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRyZWZlcmVuY2UyID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAxO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRlbmQyID0gcmVmZXJlbmNlMiArIDI7XHJcblx0XHRcdHN0YXJ0MiA9IHJlZmVyZW5jZTIgKyAxO1xyXG5cclxuXHRcdFx0Y29uc3QgYmFkZ2VTdHJpbmcgPSBcIioqXCIgKyBiYWRnZS5uYW1lICsgXCIqKiBcIiArIGJhZGdlLmxldmVsICsgXCJcXG4+IFwiICsgYmFkZ2UuZGVzY3JpcHRpb24gKyBcIiAtICpcIiArIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ0QuTS5ZWScpICsgXCIqXFxuXCJcclxuXHRcdFx0Y29uc3QgbmV3TGluZXMgPSBbLi4ubGluZXMuc2xpY2UoMCwgc3RhcnQpLCBiYWRnZVN0cmluZywgLi4ubGluZXMuc2xpY2UoZW5kKV07XHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzMiA9IFsuLi5uZXdMaW5lcy5zbGljZSgwLCBzdGFydDIpLCAuLi5uZXdMaW5lcy5zbGljZShlbmQyKV1cclxuXHRcdFx0YXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBuZXdMaW5lczIuam9pbihcIlxcblwiKSk7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGJhZGdlU3RyaW5nOiAke2JhZGdlU3RyaW5nfWApXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgZ2l2ZUluaXRCYWRnZUluUHJvZmlsZShhdmF0YXJQYWdlTmFtZTogc3RyaW5nLCBiYWRnZTogQmFkZ2Upe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IGVuZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0XHRsZXQgc3RhcnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBhY2hpZXZlZFwiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCApe1xyXG5cdFx0XHRlbmQgPSByZWZlcmVuY2UgKyAyO1xyXG5cdFx0XHRzdGFydCA9IHJlZmVyZW5jZSArIDE7XHJcblxyXG5cdFx0XHRjb25zdCBiYWRnZVN0cmluZyA9IFwiKipcIiArIGJhZGdlLm5hbWUgKyBcIioqXFxuPiBcIiArIGJhZGdlLmRlc2NyaXB0aW9uICsgXCIgLSAqXCIgKyB3aW5kb3cubW9tZW50KCkuZm9ybWF0KCdELk0uWVknKSArIFwiKlxcblwiXHJcblx0XHRcdGNvbnN0IG5ld0xpbmVzID0gWy4uLmxpbmVzLnNsaWNlKDAsIHN0YXJ0KSwgYmFkZ2VTdHJpbmcsIC4uLmxpbmVzLnNsaWNlKGVuZCldO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgYmFkZ2VTdHJpbmc6ICR7YmFkZ2VTdHJpbmd9YClcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyByZW1vdmVCYWRnZXNXaGVuSW5pdExldmVsSGlnaGVyKGF2YXRhclBhZ2VOYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpe1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdGaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChgJHthdmF0YXJQYWdlTmFtZX0ubWRgKTtcclxuXHRcdGlmIChleGlzdGluZ0ZpbGUgPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgRmlsZSAke2F2YXRhclBhZ2VOYW1lfS5tZCBkb2VzIG5vdCBleGlzdGApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBmaWxlID0gZXhpc3RpbmdGaWxlIGFzIFRGaWxlO1xyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHRcdGxldCByZWZlcmVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cdFx0bGV0IHJlZmVyZW5jZTI6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGluZSA9IGxpbmVzW2ldLnRyaW0oKTtcclxuXHRcdFx0aWYgKGxpbmUgPT09IFwiIyMjIyBvdXRzdGFuZGluZ1wiKSB7XHJcblx0XHRcdFx0aWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0cmVmZXJlbmNlID0gaTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHJlZmVyZW5jZSAhPSBudWxsICYmIHJlZmVyZW5jZTIgPT0gbnVsbCl7XHJcblx0XHRcdFx0Ly8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBsZXZlbCBudW1iZXJcclxuXHRcdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdFx0Ly8gRXh0cmFjdCB0aGUgbGV2ZWwgbnVtYmVyIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cclxuXHRcdFx0XHRjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2gobGV2ZWxSZWdleCk7XHJcblxyXG5cdFx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRcdGNvbnN0IGxldmVsTnVtYmVyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsgLy8gQ29udmVydCB0aGUgbWF0Y2hlZCBudW1iZXIgdG8gYW4gaW50ZWdlclxyXG5cdFx0XHRcdFx0aWYgKGxldmVsTnVtYmVyID4gbGV2ZWwpIHtcclxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlMiA9IGlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChyZWZlcmVuY2UgIT0gbnVsbCAmJiByZWZlcmVuY2UyICE9IG51bGwpe1xyXG5cdFx0XHRjb25zdCBuZXdMaW5lcyA9IFsuLi5saW5lcy5zbGljZSgwLCByZWZlcmVuY2UgKyAxKSwgLi4ubGluZXMuc2xpY2UocmVmZXJlbmNlMildO1xyXG5cdFx0XHRhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIG5ld0xpbmVzLmpvaW4oXCJcXG5cIikpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LypcclxuXHRhc3luYyBjcmVhdGVDaGFydCh2YXVsdDogVmF1bHQpOiBQcm9taXNlPHN0cmluZz57XHJcblx0XHRjb25zdCBmaWxlcyA9IHZhdWx0LmdldE1hcmtkb3duRmlsZXMoKTtcclxuXHRcdGNvbnN0IGVhcmxpZXN0RmlsZSA9IGZpbmRFYXJsaWVzdE1vZGlmaWVkRmlsZShmaWxlcylcclxuXHRcdGNvbnN0IGVhcmxpZXN0RGF0ZSA9IGVhcmxpZXN0RmlsZS5zdGF0Lm10aW1lXHJcblxyXG5cdFx0bGV0IG1vbnRoQ291bnRlciA9IDAgLy9mb3JtYXQobmV3IERhdGUoZWFybGllc3REYXRlKSwgJ01NJyk7XHJcblx0XHRsZXQgZGF0ZUNvdW50ID0gbmV3IERhdGUoZWFybGllc3REYXRlKTsgLy8gdW0gZXMgaG9jaHpcdTAwRTRobGVuIHp1IGtcdTAwRjZubmVuXHJcblx0XHRjb25zdCBmaWxlRGF0ZU1vbnRoTWFwTW9kID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHRcdGNvbnN0IG1vbnRoY291bnQgPSBtb250aHNCZXR3ZWVuKG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSksIG5ldyBEYXRlKCkpXHJcblx0XHRsZXQgZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRsZXQgeUxhYmVsID0gXCJcIlxyXG5cclxuXHRcdG1vbnRoQ291bnRlciA9IDBcclxuXHRcdGRhdGVDb3VudCA9IG5ldyBEYXRlKGVhcmxpZXN0RGF0ZSk7IC8vIHVtIGVzIGhvY2h6XHUwMEU0aGxlbiB6dSBrXHUwMEY2bm5lblxyXG5cdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHQvLyBjcmVhdGUgQmFzZSBmb3IgY291bnRpbmcgbW9kaWZpZWRcclxuXHRcdHdoaWxlIChtb250aENvdW50ZXIgPCBtb250aGNvdW50KXtcclxuXHRcdFx0ZGF0ZVN0cmluZyA9IGRhdGVDb3VudC5nZXRNb250aCgpKzEgKyBcIi5cIiArIGRhdGVDb3VudC5nZXRGdWxsWWVhcigpXHJcblx0XHRcdHlMYWJlbCA9IHlMYWJlbCArIGRhdGVTdHJpbmcgKyBcIiwgXCJcclxuXHRcdFx0ZGF0ZUNvdW50LnNldE1vbnRoKGRhdGVDb3VudC5nZXRNb250aCgpICsgMSlcclxuXHRcdFx0bW9udGhDb3VudGVyICs9IDE7XHJcblx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGRhdGVTdHJpbmcsIDApXHJcblx0XHR9XHJcblx0XHR5TGFiZWwgPSB5TGFiZWwuc2xpY2UoMCx5TGFiZWwubGVuZ3RoLTIpXHJcblxyXG5cdFx0Ly8gY291bnQgaG93IG1hbnkgbW9kIGZpbGVzIGluIGVhY2ggbW9udGhcclxuXHRcdGNvbnN0IG1vZGlmaWNhdGlvbkRhdGVzID0gZ2V0TW9kaWZpY2F0aW9uRGF0ZXMoZmlsZXMpXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG1vZGlmaWNhdGlvbkRhdGVzLmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0Ly9maWxlRGF0ZU1vbnRoTWFwTW9kLnNldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSxmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXQobW9kaWZpY2F0aW9uRGF0ZXNbaV0sICdNLnl5eXknKSkrMSlcclxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IGZvcm1hdChtb2RpZmljYXRpb25EYXRlc1tpXSwgJ00ueXl5eScpO1xyXG5cdFx0XHRjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlRGF0ZU1vbnRoTWFwTW9kLmdldChmb3JtYXR0ZWREYXRlKTtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50Q291bnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGZpbGVEYXRlTW9udGhNYXBNb2Quc2V0KGZvcm1hdHRlZERhdGUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBpbiB0aGUgbWFwLCBpbml0aWFsaXplIGl0IHdpdGggYSBjb3VudCBvZiAxXHJcblx0XHRcdFx0ZmlsZURhdGVNb250aE1hcE1vZC5zZXQoZm9ybWF0dGVkRGF0ZSwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY2hhclN0cmluZ01vZGlmaWVkID0gXCJcIlxyXG5cdFx0Zm9yIChjb25zdCBbdmFsdWVdIG9mIGZpbGVEYXRlTW9udGhNYXBNb2QpIHtcclxuXHRcdFx0Ly9jb25zb2xlLmxvZyhga2V5OiAke2tleX0sIHZhbHVlOiAke3ZhbHVlfWApO1xyXG5cdFx0XHRjaGFyU3RyaW5nTW9kaWZpZWQgPSBjaGFyU3RyaW5nTW9kaWZpZWQgKyB2YWx1ZSArIFwiLCBcIlxyXG5cdFx0fVxyXG5cdFx0Y2hhclN0cmluZ01vZGlmaWVkID0gY2hhclN0cmluZ01vZGlmaWVkLnNsaWNlKDAsY2hhclN0cmluZ01vZGlmaWVkLmxlbmd0aC0yKVxyXG5cclxuXHRcdHJldHVybiBjcmVhdGVDaGFydEZvcm1hdCh5TGFiZWwsIGNoYXJTdHJpbmdNb2RpZmllZCwgdGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdjaGFydFJlZHV6aWVydW5nTW9uYXRlJykpXHJcblx0fVxyXG5cdCovXHJcblxyXG5cdGFzeW5jIGRlY2lzaW9uSWZCYWRnZShuZXdMZXZlbDogUHJvbWlzZTxib29sZWFuPil7XHJcblx0XHRuZXdMZXZlbC50aGVuKChyZXN1bHQ6IGJvb2xlYW4pPT4ge1xyXG5cdFx0XHRpZihyZXN1bHQpe1xyXG5cdFx0XHRcdGNvbnN0IGJhZGdlIDogQmFkZ2UgPSBnZXRCYWRnZUZvckxldmVsKHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RhdHVzTGV2ZWwnKSwgZmFsc2UpXHJcblx0XHRcdFx0bmV3IE5vdGljZShgWW91J3ZlIGVhcm5lZCB0aGUgXCIke2JhZGdlLm5hbWV9XCIgYmFkZ2UuICR7YmFkZ2UuZGVzY3JpcHRpb259YCx0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3RpbWVTaG93Tm90aWNlJykgKiAxMDAwICogMS4yKVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBZb3UndmUgZWFybmVkIHRoZSBcIiR7YmFkZ2UubmFtZX1cIiBiYWRnZS4gJHtiYWRnZS5kZXNjcmlwdGlvbn1gKVxyXG5cdFx0XHRcdHRoaXMuZ2l2ZUJhZGdlSW5Qcm9maWxlKHRoaXMuZ2V0U2V0dGluZ1N0cmluZygnYXZhdGFyUGFnZU5hbWUnKSwgYmFkZ2UpXHJcblx0XHRcdFx0dGhpcy5zZXRTZXR0aW5nQm9vbGVhbignYmFkZ2VCb29zdGVyU3RhdGUnLCBmYWxzZSk7XHJcblx0XHRcdFx0dGhpcy5zZXRTZXR0aW5nTnVtYmVyKCdiYWRnZUJvb3N0ZXJGYWN0b3InLCAxKTtcclxuXHRcdFx0XHQvL3RoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgcmVtb3ZlS2V5c0Zyb21Gcm9udG1hdHRlcigpIHtcclxuXHRcdGNvbnN0IHsgdmF1bHQgfSA9IHRoaXMuYXBwXHJcblx0XHRjb25zdCBmaWxlQ291bnRNYXAgPSBhd2FpdCBnZXRGaWxlQ291bnRNYXAodGhpcy5hcHAsIHRoaXMuZ2V0U2V0dGluZ1N0cmluZygndGFnc0V4Y2x1ZGUnKSwgdGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdmb2xkZXJFeGNsdWRlJykpO1xyXG5cdFx0Zm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlQ291bnRNYXAua2V5cygpKSB7XHJcblx0XHRcdGNvbnN0IGZpbGVzID0gdmF1bHQuZ2V0RmlsZXMoKTtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IGZpbGVzLmZpbmQoZmlsZSA9PiBmaWxlLmJhc2VuYW1lID09PSBmaWxlTmFtZSk7XHJcblx0XHRcdGlmICghZmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVOYW1lfSBub3QgZm91bmQuYCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc29sZS5sb2coYFByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnByb2Nlc3NGcm9udE1hdHRlcihmaWxlLCAoZnJvbnRtYXR0ZXIpID0+IHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsndGl0bGUtY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydub3RlLWxlbmd0aC1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ2lubGluay1jbGFzcyddXHJcblx0XHRcdFx0XHRkZWxldGUgZnJvbnRtYXR0ZXJbJ291dGxpbmstY2xhc3MnXVxyXG5cdFx0XHRcdFx0ZGVsZXRlIGZyb250bWF0dGVyWydwcm9ncmVzc2l2ZS1zdW1tYXJpemF0aW9uLW1hdHVyaXR5J11cclxuXHRcdFx0XHRcdGRlbGV0ZSBmcm9udG1hdHRlclsnbm90ZS1tYXR1cml0eSddXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRpZiAoZT8ubmFtZSA9PT0gJ1lBTUxQYXJzZUVycm9yJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gYFVwZGF0ZSBtYWp1cml0eXMgZmFpbGVkIE1hbGZvcm1lZCBmcm9udGFtdHRlciAke2UubWVzc2FnZX1gO1xyXG5cdFx0XHRcdFx0bmV3IE5vdGljZShlcnJvck1lc3NhZ2UsIHRoaXMuZ2V0U2V0dGluZ051bWJlcigndGltZVNob3dOb3RpY2UnKSAqIDEwMDApO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdGFzeW5jIHdoaWNoTGV2ZWxOZXh0QmFkZ2UoY3VycmVudExldmVsOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj57XHJcblx0XHRsZXQgbmV4dEJhZGdlTGV2ZWwgPSAwXHJcblx0XHRmb3IgKGxldCBpID0gY3VycmVudExldmVsOyBpIDwgMTEwOyBpKyspe1xyXG5cdFx0XHRjb25zdCBiYWRnZSA6IEJhZGdlID0gZ2V0QmFkZ2VGb3JMZXZlbChpLCB0cnVlKVxyXG5cdFx0XHQvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggdGhlIGxldmVsIG51bWJlclxyXG5cdFx0XHRjb25zdCBsZXZlbFJlZ2V4ID0gL2xldmVsIChcXGQrKS87XHJcblx0XHRcdC8vIEV4dHJhY3QgdGhlIGxldmVsIG51bWJlciB1c2luZyB0aGUgcmVndWxhciBleHByZXNzaW9uXHJcblx0XHRcdGNvbnN0IG1hdGNoID0gYmFkZ2UubGV2ZWwubWF0Y2gobGV2ZWxSZWdleCk7XHJcblx0XHRcdGlmKG1hdGNoKXtcclxuXHRcdFx0XHRjb25zdCBsZXZlbE51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7IC8vIENvbnZlcnQgdGhlIG1hdGNoZWQgbnVtYmVyIHRvIGFuIGludGVnZXJcclxuXHRcdFx0XHRpZiAobGV2ZWxOdW1iZXIgPiBjdXJyZW50TGV2ZWwgJiYgbmV4dEJhZGdlTGV2ZWwgPT0gMCApIHtcclxuXHRcdFx0XHRcdG5leHRCYWRnZUxldmVsID0gbGV2ZWxOdW1iZXI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV4dEJhZGdlTGV2ZWxcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBib29zdGVyRm9ySW5pdCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cdFx0Y29uc3QgbmV4dEJhZGdlQXQgPSBhd2FpdCB0aGlzLndoaWNoTGV2ZWxOZXh0QmFkZ2UodGhpcy5nZXRTZXR0aW5nTnVtYmVyKCdzdGF0dXNMZXZlbCcpKVxyXG5cdFx0Y29uc3Qgc3RhdHVzUG9pbnRzVG9SZWFjaCA9IHN0YXR1c1BvaW50c0ZvckxldmVsKG5leHRCYWRnZUF0KVxyXG5cdFx0Ly9jb25zb2xlLmxvZyhgc3RhdHVzUG9pbnRzVG9SZWFjaCBmb3IgbmV4dCBCYWRnZTogJHtzdGF0dXNQb2ludHNUb1JlYWNofWApXHJcblx0XHQvLyA1MCBOb3RlcyBmcm9tIExldmVsIDEgdG8gNSB0byBnZXQgdGhlIGZpcnN0IGJhZGdlLlxyXG5cdFx0Ly8gMzAwIFBvaW50cyBpbiBhdmVyYWdlIGZvciBhIE5vdGUuXHJcblx0XHRjb25zdCBib29zdGVyRmFjdG9yID0gTWF0aC5yb3VuZCgoc3RhdHVzUG9pbnRzVG9SZWFjaCAtIHRoaXMuZ2V0U2V0dGluZ051bWJlcignc3RhdHVzUG9pbnRzJykpLzUwLzMwMCk7XHJcblx0XHR0aGlzLnNldFNldHRpbmdOdW1iZXIoJ2JhZGdlQm9vc3RlckZhY3RvcicsIGJvb3N0ZXJGYWN0b3IpXHJcblx0XHR0aGlzLnNldFNldHRpbmdCb29sZWFuKCdiYWRnZUJvb3N0ZXJTdGF0ZScsIHRydWUpXHJcblx0XHQvL2F3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncylcclxuXHRcdC8vY29uc29sZS5sb2coYGJvb3N0ZXJGYWt0b3I6ICR7Ym9vc3RlckZhY3Rvcn1gKVxyXG5cdFx0cmV0dXJuIGJvb3N0ZXJGYWN0b3JcclxuXHR9XHJcblxyXG5cclxuXHRhc3luYyBvcGVuQXZhdGFyRmlsZSgpIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nRmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7dGhpcy5nZXRTZXR0aW5nU3RyaW5nKCdhdmF0YXJQYWdlTmFtZScpfS5tZGApO1xyXG5cdFx0aWYgKGV4aXN0aW5nRmlsZSl7XHJcblx0XHRcdGNvbnN0IHNvdXJjZVBhdGggPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpPy5wYXRoIHx8ICcnO1xyXG5cdFx0XHRhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChleGlzdGluZ0ZpbGUucGF0aCwgc291cmNlUGF0aCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIkZpbGUgbm90IGZvdW5kIG9yIHVuYWJsZSB0byBvcGVuLlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRnZXRSYW5kb21JbnQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuXHQgIH1cclxuXHJcblx0YXN5bmMgYWNxdWlyZUluZ3JlZGllbnRzKGNoYW5jZTpudW1iZXIsIG1pbjpudW1iZXIsIG1heDpudW1iZXIpIHtcclxuXHRcdGxldCBlYXJuZWRJbmdyZWRpZW50VG9TaG93ID0gW107XHJcblx0XHRpZiAoTWF0aC5yYW5kb20oKSA8IGNoYW5jZSkge1xyXG5cdFx0XHRjb25zdCByYW5kb21BbW91bnQgPSB0aGlzLmdldFJhbmRvbUludChtaW4sbWF4KTtcclxuXHRcdFx0Zm9yIChsZXQgaT0xO2k8PXJhbmRvbUFtb3VudDtpKyspe1xyXG5cdFx0XHRcdGNvbnN0IHJhbmRvbUluZ3JlZGllbnRJbmRleCA9IHRoaXMuZ2V0UmFuZG9tSW50KDAsIGxpc3RPZlVzZWFibGVJbmdyZWRpZW50c1RvQmVTaG93bi5sZW5ndGgtMSk7XHJcblx0XHRcdFx0Y29uc3QgZWFybmVkSW5ncmVkaWVudCA9IGVsZW1lbnRzW3JhbmRvbUluZ3JlZGllbnRJbmRleF07XHJcblx0XHRcdFx0bGV0IGVsZW1lbnRDb3VudCA9IHRoaXMuZ2V0U2V0dGluZ051bWJlcihlYXJuZWRJbmdyZWRpZW50LnZhck5hbWUpO1xyXG5cdFx0XHRcdGVhcm5lZEluZ3JlZGllbnRUb1Nob3cucHVzaChlYXJuZWRJbmdyZWRpZW50Lm5hbWUpO1xyXG5cclxuXHRcdFx0XHQvLyBQZXJmb3JtIGEgbnVsbCBjaGVja1xyXG5cdFx0XHRcdGlmIChlbGVtZW50Q291bnQgIT09IG51bGwgJiYgdHlwZW9mIGVsZW1lbnRDb3VudCA9PT0gJ251bWJlcicpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2V0U2V0dGluZ051bWJlcihlYXJuZWRJbmdyZWRpZW50LnZhck5hbWUsIGVsZW1lbnRDb3VudCArIDEpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBJbnZhbGlkIGVsZW1lbnQgY291bnQgZm9yICR7ZWFybmVkSW5ncmVkaWVudC52YXJOYW1lfWApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zb2xlLmxvZyhgWW91IGVhcm5lZDogJHtjb25jYXRlbmF0ZVN0cmluZ3MoZWFybmVkSW5ncmVkaWVudFRvU2hvdyl9YCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoYFlvdSBlYXJuZWQgJHtjb25jYXRlbmF0ZVN0cmluZ3MoZWFybmVkSW5ncmVkaWVudFRvU2hvdyl9YCx0aGlzLmdldFNldHRpbmdOdW1iZXIoJ3RpbWVTaG93Tm90aWNlJykgKiAxMDAwKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ1lvdSBkaWQgbm90IGVhcm4gYW4gaW5ncmVkaWVudCB0aGlzIHRpbWUuJyk7XHJcblx0XHR9XHJcblx0XHRcclxuXHR9XHJcblx0XHJcblx0XHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG4vLyBFeGFtcGxlIHVzYWdlXHJcbi8vY29uc3Qgb3JpZ2luYWxEYXRhID0gJzIwMjMtMDgtMTUgMjA6MDA6MDAnO1xyXG4vL2NvbnN0IGVuY3J5cHRlZERhdGEgPSBlbmNyeXB0U3RyaW5nKG9yaWdpbmFsRGF0YSk7XHJcblxyXG4vLyBTYXZlIGBlbmNyeXB0ZWREYXRhYCBpbiB5b3VyIHNldHRpbmdzXHJcblxyXG4vLyBMYXRlciwgd2hlbiB5b3UgcmV0cmlldmUgdGhlIGRhdGFcclxuLy9jb25zdCBkZWNyeXB0ZWREYXRhID0gZGVjcnlwdFNydGluZyhlbmNyeXB0ZWREYXRhKTtcclxuXHJcbi8vIFVzZSBgZGVjcnlwdGVkRGF0YWAgaW4geW91ciBwbHVnaW5cclxuXHJcblxyXG5mdW5jdGlvbiBjb25jYXRlbmF0ZVN0cmluZ3MoYXJyOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiBhcnJbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeU1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG5cclxuICAgICAgICBhcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGZyZXF1ZW5jeU1hcFtpdGVtXSkge1xyXG4gICAgICAgICAgICAgICAgZnJlcXVlbmN5TWFwW2l0ZW1dKys7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmcmVxdWVuY3lNYXBbaXRlbV0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdEFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmcmVxdWVuY3lNYXApKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0QXJyYXkucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0QXJyYXkucHVzaChgJHt2YWx1ZX0geCAke2tleX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5LmpvaW4oJywgJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBnZXRCb29zdGVyUnVuVGltZUZyb21WYXJOYW1lKGJvb3N0ZXJWYXJOYW1lOiBzdHJpbmcpIHtcclxuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYm9vc3RlclJlY2lwZXMpIHtcclxuXHRcdGlmIChlbGVtZW50LnZhcm5hbWUgPT09IGJvb3N0ZXJWYXJOYW1lKSB7XHJcblx0XHRcdHJldHVybiBlbGVtZW50LmJvb3N0ZXJSdW5UaW1lIGFzIG51bWJlcjtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIDA7IC8vIFJldHVybiBudWxsIGlmIG5vIG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmRcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGlzU2FtZURheShpbnB1dERhdGU6IE1vbWVudCk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlID0gd2luZG93Lm1vbWVudCgpOyAvLyBHZXQgdGhlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBjdXJyZW50RGF0ZS5pc1NhbWUoaW5wdXREYXRlLCAnZGF5Jyk7IC8vIENoZWNrIGlmIHRoZXkgYXJlIHRoZSBzYW1lIGRheVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaXNPbmVEYXlCZWZvcmUoaW5wdXREYXRlOiBNb21lbnQpOiBib29sZWFuIHtcclxuXHRjb25zdCBvbmVEYXlCZWZvcmVDdXJyZW50ID0gd2luZG93Lm1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXknKTsgLy8gQ2FsY3VsYXRlIG9uZSBkYXkgYmVmb3JlIGN1cnJlbnQgZGF0ZVxyXG5cdHJldHVybiBpbnB1dERhdGUuaXNTYW1lKG9uZURheUJlZm9yZUN1cnJlbnQsICdkYXknKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc01pbnV0ZXNQYXNzZWQoaW5wdXREYXRlOiBNb21lbnQsIG1pbnV0ZXNQYXNzZWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbWludXRlc0FnbyA9IHdpbmRvdy5tb21lbnQoKS5zdWJ0cmFjdChtaW51dGVzUGFzc2VkLCAnbWludXRlcycpOyAvLyBDYWxjdWxhdGUgdGltZSAnbWludXRlc1Bhc3NlZCcgbWludXRlcyBhZ29cclxuXHRyZXR1cm4gaW5wdXREYXRlLmlzU2FtZU9yQmVmb3JlKG1pbnV0ZXNBZ28pO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhvdXJzVW50aWxNaW51dGVzUGFzc2VkKGlucHV0RGF0ZTogTW9tZW50LCBtaW51dGVzVG9QYXNzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB3aW5kb3cubW9tZW50KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lXHJcbiAgICBjb25zdCB0YXJnZXRUaW1lID0gaW5wdXREYXRlLmNsb25lKCkuYWRkKG1pbnV0ZXNUb1Bhc3MsICdtaW51dGVzJyk7IC8vIENhbGN1bGF0ZSB0aGUgdGFyZ2V0IHRpbWVcclxuXHJcbiAgICBpZiAodGFyZ2V0VGltZS5pc0FmdGVyKGN1cnJlbnRUaW1lKSkge1xyXG4gICAgICAgIGNvbnN0IGhvdXJzUmVtYWluaW5nID0gdGFyZ2V0VGltZS5kaWZmKGN1cnJlbnRUaW1lLCAnaG91cnMnKTtcclxuICAgICAgICByZXR1cm4gaG91cnNSZW1haW5pbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXZhdGFyRmlsZShhcHA6IEFwcCwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuXHRjb25zdCBleGlzdGluZ0ZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGAke2ZpbGVOYW1lfS5tZGApO1xyXG5cdGlmIChleGlzdGluZ0ZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG5cdFx0Y29uc29sZS5sb2coYEZpbGUgJHtmaWxlTmFtZX0ubWQgYWxyZWFkeSBleGlzdHNgKTtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Ly8gQ3JlYXRlIHRoZSBmaWxlIGluIHRoZSByb290IG9mIHRoZSB2YXVsdFxyXG5cdGF3YWl0IGFwcC52YXVsdC5jcmVhdGUoYCR7ZmlsZU5hbWV9Lm1kYCwgYXZhdGFySW5pdENvbnRlbnQpO1xyXG5cclxufVxyXG5cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VGb3JtYXRTdHJpbmdzKGxheWVyMjogc3RyaW5nLCBsYXllcjM6IHN0cmluZykge1xyXG5cdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG5cclxuXHRpZiAoIWFjdGl2ZVZpZXcpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoXCJObyBhY3RpdmUgTWFya2Rvd24gdmlldyBmb3VuZC5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRjb25zdCBlZGl0b3IgPSBhY3RpdmVWaWV3LmVkaXRvcjtcclxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG5cdGlmICghc2VsZWN0ZWRUZXh0KSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiTm8gdGV4dCBzZWxlY3RlZCAoZm9yIHByb2dyZXNzaXZlIHN1bW1hcml6YXRpb24gc3dpdGNoIExheWVyIDIgJiAzKS5cIik7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRsZXQgcmVwbGFjZWRUZXh0ID0gc2VsZWN0ZWRUZXh0LnJlcGxhY2VBbGwobGF5ZXIyLCBcIlx1MDBBN1x1MDBBN1x1MDBBN1x1MDBBN1wiKTtcclxuXHRyZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZUFsbChsYXllcjMsIFwiXHUyMEFDXHUyMEFDXHUyMEFDXHUyMEFDXCIpXHJcblx0cmVwbGFjZWRUZXh0ID0gcmVwbGFjZWRUZXh0LnJlcGxhY2VBbGwoXCJcdTIwQUNcdTIwQUNcdTIwQUNcdTIwQUNcIiwgbGF5ZXIyKVxyXG5cdHJlcGxhY2VkVGV4dCA9IHJlcGxhY2VkVGV4dC5yZXBsYWNlQWxsKFwiXHUwMEE3XHUwMEE3XHUwMEE3XHUwMEE3XCIsIGxheWVyMylcclxuXHJcblx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmVwbGFjZWRUZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmF0ZURpcmVjdGlvbkZvclN0YXR1c1BvaW50cyhyYXRpbmdDdXJyZW50OiBzdHJpbmcsIHJhdGluZ05ldzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRsZXQgcmF0aW5nRmFrdG9yOiBudW1iZXJcclxuXHRpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApIDwgcmF0aW5nTmV3KXtcclxuXHRcdHJhdGluZ0Zha3RvciA9IHJhdGluZ05ldyAtIHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKVxyXG5cdH0gZWxzZSB7XHJcblx0XHRyYXRpbmdGYWt0b3IgPSAwXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmF0aW5nRmFrdG9yXHJcbn1cclxuXHJcblxyXG5cclxuICBcclxuICBcclxuXHJcblxyXG5cclxuXHJcbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnLi9tYWluJztcclxuaW1wb3J0IHR5cGUge01vbWVudElucHV0fSBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBlbmNyeXB0VmFsdWUsIGVuY3J5cHRTdHJpbmcsIGRlY3J5cHRTdHJpbmcsIGVuY3J5cHROdW1iZXIsIGRlY3J5cHROdW1iZXIsIGVuY3J5cHRCb29sZWFuLCBkZWNyeXB0Qm9vbGVhbiB9IGZyb20gJ2VuY3J5cHRpb24nO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogUGFydGlhbDxJU2V0dGluZ3M+ID0ge1xyXG4gIGVuYWJsZUluaXRDb21tYW5kOiBcIlUyRnNkR1ZrWDErN2xXZS9oOTV1cXpnbDI3SkJHVzJpa2k3c0J3azQ0WVE9XCIsXHJcbiAgYmluZEVudGVyOiBcIlUyRnNkR1ZrWDE4UnpHa3lMRWFUU25ZdWdsVDlsZmhqdnNpMW1tSThCTG89XCIsXHJcbiAgYmluZFRhYjogXCJVMkZzZEdWa1gxOGh2cU1vaGxrT2xRV1JyRFh0aE5oMFk2aUlVMzErZmdNPVwiLFxyXG4gIGF2YXRhclBhZ2VOYW1lOiBcIlUyRnNkR1ZrWDE5dHg3SE9oRmUvL2pGWnlUN004aVAvNTd5VksxMDhRUzZqeWpIU1VlNm1jNVdxenB0MnZkaVFcIixcclxuICB0YWdzRXhjbHVkZTogXCJVMkZzZEdWa1gxLzFERExUcStlbVlTd01ZZFRkTGZadEZNRXkrdisybFRNPVwiLFxyXG4gIGZvbGRlckV4Y2x1ZGU6IFwiVTJGc2RHVmtYMThoNDUxT1NpRHR6V2Npc2V1WGJyMWFpb2Q1MkQvWnRodz1cIixcclxuICBwcm9ncmVzc2l2ZVN1bUxheWVyMjogXCJVMkZzZEdWa1gxOENZN294dHlJUEY3QmUwcStEc3FoNHVGNDJDWjliK3N3PVwiLFxyXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIzOiBcIlUyRnNkR1ZrWDErSmR3U2NyTVVlbHQxYXkyWDJnS20rcGp3aklmb2VRVlU9XCIsXHJcbiAgbnVtQWxsRmlsZXM6IFwiVTJGc2RHVmtYMTkrK3BlaWQ4VXVFb1VhUkJ1Vlo1N29ObG15QlJEWGd5UT1cIixcclxuICBudW1BbGxGaWxlc0NvdW50OiBcIlUyRnNkR1ZrWDE5N052QTEvKytEcVROR2RCZW56cUtreG9sYjgyWGxIVUU9XCIsXHJcbiAgY2hhcnRSZWR1emllcnVuZ01vbmF0ZTogXCJVMkZzZEdWa1gxK2l1Snp5S0pNbndZcUpra0REL3FNTU9oZkY2Z0lUMHI0PVwiLFxyXG4gIHN0YXR1c1BvaW50czogXCJVMkZzZEdWa1gxOXExYUFXMW1idTA3U0xlY3g0aGhMb0d1VTJ4c09ZTFFvPVwiLFxyXG4gIHN0YXR1c0xldmVsOiBcIlUyRnNkR1ZrWDErbXJXOS8reG1LRVNMa3NOL1U4c3V1YTZ3aEhjb21wbWM9XCIsXHJcbiAgeHBGb3JOZXh0TGV2ZWw6IFwiVTJGc2RHVmtYMTk4STRqK1pKSFl2VzM5U0xHOGY5cnRRRUxZSVRaK2p3MD1cIixcclxuICBnYW1pZmljYXRpb25TdGFydERhdGU6IFwiVTJGc2RHVmtYMS9pUVNsRFp6ZUlTYTJyVXp3YnVlWmhMODhianJ3d3FnQT1cIixcclxuICBiYWRnZUJvb3N0ZXJTdGF0ZTogXCJVMkZzZEdWa1gxK2U2UVhVOFkxalhmZTBGbmJrdm5IaDFiVnZpMUE1ZXVJPVwiLFxyXG4gIGJhZGdlQm9vc3RlckZhY3RvcjogXCJVMkZzZEdWa1gxL2dxOEtsWDk1V2E0Tjl3SWRkcms4NTVLQ2RUcHJDR0xNPVwiLFxyXG4gIGRlYnVnOiBcIlUyRnNkR1ZrWDErVGhSS2R2NVVuWHRlTldsbDIxZXhpRWo1YlZ3K1pxMGc9XCIsXHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25UYXNrOiBcIlUyRnNkR1ZrWDEvaEFqMVpaOVZLMG5GbEpoK20vcjhCM0xyZzJ0UW9QaTQ9XCIsXHJcbiAgZGFpbHlOb3RlQ3JlYXRpb25EYXRlOiBcIlUyRnNkR1ZrWDE5NXYzM0VoVFF2b1F0UjIveGZiQzJJYWcyTHkxVUZTajg9XCIsXHJcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogXCJVMkZzZEdWa1gxL01ZZmkwcjBCdG4ySjdQbWRRY1dvZEphd0MvdVpBVVNRPVwiLFxyXG4gIHdlZWtseU5vdGVDcmVhdGlvbkRhdGU6IFwiVTJGc2RHVmtYMThPWDUzME9QT2FVUmcvYnY4eHJNMTdoRTBZNjY0MWUzMD1cIixcclxuICBuZXh1c05vZGU6IFwiVTJGc2RHVmtYMSs1K3dnNk9qT3hCVXZFZTV3L1NVMGdydkNMSXNoVS85cz1cIixcclxuICBjb25uZWN0aW9uQ3J5c3RhbDogXCJVMkZzZEdWa1gxOVNGbXJRcG1ISndBZWlCL3cxelV3bU4zbk92ZmJmczhjPVwiLFxyXG4gIG1hc3RlcnlTY3JvbGw6IFwiVTJGc2RHVmtYMThLdzBycDNiL25rSU5OTjNTcHF2d2VKVkUvckFUQ0h0TT1cIixcclxuICBpbnNpZ2h0UHJpc206IFwiVTJGc2RHVmtYMSsrSFovMmhHSCs2TjJ0cm9xNlFMZVVlRU1PMjZ0QWNmST1cIixcclxuICByZWZsZWN0aXZlRXNzZW5jZTogXCJVMkZzZEdWa1gxOVo3RjJHaDhiWlh2RGQ3TjE4bDF3K0hiY0prMGdmV0EwPVwiLFxyXG4gIGFtcGxpZmljYXRpb25DcnlzdGFsOiBcIlUyRnNkR1ZrWDE4eU1pZHVnOXpBOUFXRW1ITUdnOUFaZ2VJN2VaK0FYZWs9XCIsXHJcbiAgY3JlYXRpdmVDYXRhbHlzdDogXCJVMkZzZEdWa1gxOVZ0QmhSeXg2cFYvSmJFa0lubXBnY1djMTRLQW5SUURZPVwiLFxyXG4gIHByZWNpc2lvbkxlbnM6IFwiVTJGc2RHVmtYMThzTnNYRmd5cUZVb0NXc2tmeU5COFBJREdhTFdMbG9OQT1cIixcclxuICB0ZW1wb3JhbFR3ZWFrZXI6IFwiVTJGc2RHVmtYMTlnRVprTUdyQzlXZkRYUUoxZFhCVHBHVlY3RnNncUw2Yz1cIixcclxuICBwZXJwZXR1YWxQcm9ncmVzczogXCJVMkZzZEdWa1gxKzNHL29WTnZpSEpGUnFGTUI0QnNQT0NRNElkcmYvMTdJPVwiLFxyXG4gIHN0cmF0ZWdpY1N5bmFwc2VzOiBcIlUyRnNkR1ZrWDEvQnJGSWVwdkJFV0hEekd5VHo1WXNMT00yWVZyZXdINGM9XCIsXHJcbiAgYWNjZWxlcmF0ZWRBY3F1aXNpdGlvbjogXCJVMkZzZEdWa1gxOVpoN2xoSW51THBWZm1UeUVray82N3JYSjNRQ2lJTjBnPVwiLFxyXG4gIGxpbmtlcnNMb2RlOiBcIlUyRnNkR1ZrWDE5eGFZMkdEMHNxU01NZjlZZDdib2NiS2hJMTB4aDVtRTg9XCIsXHJcbiAgZWZmb3J0bGVzc0V4cGFuc2lvbjogXCJVMkZzZEdWa1gxK3FYRW4rVXhIc3M0STE0SWpoaUFMR1dQUmJMa1ZkalFRPVwiLFxyXG4gIHJlY3Vyc2l2ZVJlZmxlY3Rpb246IFwiVTJGc2RHVmtYMS9HbXQwWkZJVjFkYmdFVmhWMVpXZ1lVRDZ5Mm55blg3bz1cIixcclxuICBzeW5hcHRpY1N1cmdlOiBcIlUyRnNkR1ZrWDE4K29vV1hGOXBhVFBUS09GeVIyWDRHOU1BNGxVK2xZYkk9XCIsXHJcbiAgaW5zcGlyYXRpb25JbmZ1c2lvbjogXCJVMkZzZEdWa1gxOG56N0VUcjZ5U0hpTzBabUVCL1dyYXpnTmlsUG5sS2tRPVwiLFxyXG4gIHRpdGxlVGl0YW46IFwiVTJGc2RHVmtYMS9JTWtEY21jOEEyMFV2OWlmcHBZSDV0eVZLT2FNYWdFWT1cIixcclxuICBwcmVjaXNpb25QcmlzbTogXCJVMkZzZEdWa1gxKzcyWXdUL1hkUXpicE9Md0E5bHRKWThhKzNHV0IrSWtRPVwiLFxyXG4gIGh5cGVybGlua0hhcm1vbnk6IFwiVTJGc2RHVmtYMTkxbFlkM2thZUxPS2RXVG85R2xsREwyNXROMzZ6UFl4RT1cIixcclxuICBlcGhlbWVyYWxFdXBob3JpYTogXCJVMkZzZEdWa1gxK2lqTnB1dEhxSFc1Z0swZnJmbXN3R3g3RVVkYUh4am5rPVwiLFxyXG4gIGZvcnR1bmVJbmZ1c2lvbjogXCJVMkZzZEdWa1gxK2lqTnB1dEhxSFc1Z0swZnJmbXN3R3g3RVVkYUh4am5rPVwiLFxyXG4gIGJvb3N0ZXJGYWN0b3JQZXJwZXR1YWxQcm9ncmVzczogXCJVMkZzZEdWa1gxOS9Gc3MyWCtoZCt3NlptSTV5TkpjdVVXQStJbXJPR21nPVwiLFxyXG4gIGJvb3N0ZXJEYXRlUGVycGV0dWFsUHJvZ3Jlc3M6IFwiVTJGc2RHVmtYMStSUWx0T01MeDlheGFZTG1xeUdFVTlxMkVKNmFGa1J5dm5DV1RTaE1MR2h5Rm1ZelQzNUJhWVwiLFxyXG4gIGJvb3N0ZXJGYWN0b3JTdHJhdGVnaWNTeW5hcHNlczogXCJVMkZzZEdWa1gxODU3NW1HSVZTakdrL3FKcG9zSXJmUlV5K3YvQ3M4ZEswPVwiLFxyXG4gIGJvb3N0ZXJEYXRlU3RyYXRlZ2ljU3luYXBzZXM6IFwiVTJGc2RHVmtYMS9UOVUweUI1ajZpYkdBdlY4UktyY3JqWnJLdHlnS2dyaGh5L3NQbWtSemowTEhVMEZ6cWhER1wiLFxyXG4gIGJvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZTogXCJVMkZzZEdWa1gxL0pEVVVVb1RGcHVEaTU0OGYyTnc4TUora0Z3RDdsSzlzPVwiLFxyXG4gIGJvb3N0ZXJEYXRlTGlua2Vyc0xvZGU6IFwiVTJGc2RHVmtYMSsxallPQ2hJZnpHZ3RKOCtDWUNONDFRbnJ1anEvdG1lQnBVVnJaSS9YWCtJenVoYzdTV0NKd1wiLFxyXG4gIGJvb3N0ZXJGYWN0b3JSZWN1cnNpdmVSZWZsZWN0aW9uOiBcIlUyRnNkR1ZrWDErdFJqalI4QUkvNkQwRWF1TXVBOXZSWjJtaGp4ZHlSSDQ9XCIsXHJcbiAgYm9vc3RlckRhdGVSZWN1cnNpdmVSZWZsZWN0aW9uOiBcIlUyRnNkR1ZrWDErbnRDQWxsS0U3dW1sWXBmTGdpNkt0UkIxTzlpSXV0VTJNUElEcUhmbmg2YngvcTlLWXRmZjdcIixcclxuICBib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZTogXCJVMkZzZEdWa1gxOUliY2FROTdUMlRHTmRGcjFmdHZxOSs2Z2x0YWh2YzVRPVwiLFxyXG4gIGJvb3N0ZXJEYXRlU3luYXB0aWNTdXJnZTogXCJVMkZzZEdWa1gxOElQSzJoVXFUOThwcWhqbGU0dWJBN25KbGdKOVpoSy9yOE45eHpqZTNveU1jTkN3NE9HTDlGXCIsXHJcbiAgYm9vc3RlckZhY3RvclRpdGxlVGl0YW46IFwiVTJGc2RHVmtYMThHd3pnaFRRWlNZMFp1ZHFXQndDTUlrM09NVDdjaHNMTT1cIixcclxuICBib29zdGVyRGF0ZVRpdGxlVGl0YW46IFwiVTJGc2RHVmtYMTlKSnlJWVlyYUdkRWZiSzZDR2FHVUw5VHRsSDhienBKNW1MSytXcjFwZ2ZRcXZXQ0JCTEpWb1wiLFxyXG4gIGJvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbTogXCJVMkZzZEdWa1gxK05NVjgwcm03R0E1M0M2d2hsd0tkU3hDQWlObWJlRUNzPVwiLFxyXG4gIGJvb3N0ZXJEYXRlUHJlY2lzaW9uUHJpc206IFwiVTJGc2RHVmtYMThPd1RCYldxTExGUEU0Q3dXQUZIYmpBMDUwRXpBYS9PNzdwSDBSQ1hoVlh5dmZRVU4wZitZaVwiLFxyXG4gIGJvb3N0ZXJGYWN0b3JIeXBlcmxpbmtIYXJtb255OiBcIlUyRnNkR1ZrWDEvRzkrQTlKSXBxcHFCYkdEQ3poSVREemJEOVZVMzBnT1E9XCIsXHJcbiAgYm9vc3RlckRhdGVIeXBlcmxpbmtIYXJtb255OiBcIlUyRnNkR1ZrWDErcVVuejZMTis5dzhnRHZwVlBQT21neTNCTkFPYS9tbTFPd2pVYVZYMDVMcW9yTzJ3clhMaG9cIixcclxuICBib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWE6IFwiVTJGc2RHVmtYMStweE0rVlVSd1RBajhlQUFHT3NiMkVSdWgxTGg3WkxuRT1cIixcclxuICBib29zdGVyRGF0ZUVwaGVtZXJhbEV1cGhvcmlhOiBcIlUyRnNkR1ZrWDE5cEpwdzJhM2YwU3ZmcGpmVVM3ejlNbFBBdXFBU3dRRkpCTGpXanlIVWo1cVlHZk42cmIvU1lcIixcclxuICBib29zdGVyRmFjdG9yRm9ydHVuZUluZnVzaW9uOiBcIlUyRnNkR1ZrWDErcHhNK1ZVUndUQWo4ZUFBR09zYjJFUnVoMUxoN1pMbkU9XCIsXHJcbiAgYm9vc3RlckRhdGVGb3J0dW5lSW5mdXNpb246IFwiVTJGc2RHVmtYMTlwSnB3MmEzZjBTdmZwamZVUzd6OU1sUEF1cUFTd1FGSkJMaldqeUhVajVxWUdmTjZyYi9TWVwiLFxyXG4gIHN0cmVha2Jvb3N0ZXI6IFwiVTJGc2RHVmtYMS9sVTh6MTI2OUdDaC9lQWJYY212TWVJOE15Zkw3bnpFST1cIixcclxuICBzdHJlYWtib29zdGVyRGF0ZTogXCJVMkZzZEdWa1gxK0RCVUJtcnpYdVNpWmxScDFqTzkvVUp2OHNUVGZlU05JPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudDogXCJVMkZzZEdWa1gxL1ZXbW5pdWhYUjZGQXg2UFRCZTlOUyt0Q3Y5WGJLMzJRPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFRlbXBvcmFsVHdlYWtlcjogXCJVMkZzZEdWa1gxL3IySmplUWlXSkFyejAzRW4zV1pPMk1lY0paNEtBL1U4PVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFBlcnBldHVhbFByb2dyZXNzOiBcIlUyRnNkR1ZrWDE5bVNRZVUzU2pXaHdLVVY4R1NMSENOdWRmMFZhK2svZk09XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50U3RyYXRlZ2ljU3luYXBzZXM6IFwiVTJGc2RHVmtYMStVVno5ZXZ2eSs5VkpiZnVmQnk1TXYwMEE5T1dHbzNNOD1cIixcclxuICBib29zdGVyVXNlQ291bnRBY2NlbGVyYXRlZEFjcXVpc2l0aW9uOiBcIlUyRnNkR1ZrWDErNklOSjF1cFhreUFwVTJ0MG9VWDZHbTMzeVN0WFRzR009XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50TGlua2Vyc0xvZGU6IFwiVTJGc2RHVmtYMS9QcUtrTGdXYitxU20rTUVZU2NLYU45ZGMvMk8xTklBND1cIixcclxuICBib29zdGVyVXNlQ291bnRFZmZvcnRsZXNzRXhwYW5zaW9uOiBcIlUyRnNkR1ZrWDE4dFoxVU1zTmV2Z3AxNWRvU2JETmdiMWlCVlBDc29qbWs9XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50ckVjdXJzaXZlUmVmbGVjdGlvbjogXCJVMkZzZEdWa1gxL2NSTU5mMHhkOTJkZGt5RWlrY2ZaVDgwS3BTVjJyZVhvPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFN5bmFwdGljU3VyZ2U6IFwiVTJGc2RHVmtYMTlhVXR6OHdHcFNwdUs2UFYxcmxKcUE5NDdTQ2dHcnJuWT1cIixcclxuICBib29zdGVyVXNlQ291bnRJbnNwaXJhdGlvbkluZnVzaW9uOiBcIlUyRnNkR1ZrWDEvMUZpZlI2Nzh3a3RzV0NJQU9hdXpPTjloVnFNZUdpZWs9XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50VGl0bGVUaXRhbjogXCJVMkZzZEdWa1gxOEo5dVRKMjVaVmFxbkVNc1ovRG4xVVF6TjdETXZOMHVnPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudFByZWNpc2lvblByaXNtOiBcIlUyRnNkR1ZrWDE4L2tuY3VTRzRrbEZaNkxwREhrcDgwd21wMlUwa25ycjQ9XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50SHlwZXJsaW5rSGFybW9ueTogXCJVMkZzZEdWa1gxK1I0ZlUvb0RJZGIzNGtDSWVkeGM0MTY1UFgzb09uQ0xjPVwiLFxyXG4gIGJvb3N0ZXJVc2VDb3VudEVwaGVtZXJhbEV1cGhvcmlhOiBcIlUyRnNkR1ZrWDE5MWhKQU5ZcjhKSEkxYm4xWVJySmZCaDBjUTB2Z2tLUk09XCIsXHJcbiAgYm9vc3RlclVzZUNvdW50Rm9ydHVuZUluZnVzaW9uOiBcIlUyRnNkR1ZrWDE5MWhKQU5ZcjhKSEkxYm4xWVJySmZCaDBjUTB2Z2tLUk09XCIsXHJcbiAgY291bnRlck1hanVyaXR5Q2FsYzogXCJVMkZzZEdWa1gxOVRMbmRvbkdZNFk4dkh1WkZmTEo1Z1oydC9DTHByaDBvPVwiLFxyXG4gIGNvdW50ZXJNYWp1cml0eUNhbGNJbml0aWFsOiBcIlUyRnNkR1ZrWDErMlFpaThxaEZTcXJOcW1LUjFXaDZzYUVqWWJ3UGRpOFE9XCIsXHJcbiAgZGVsYXlMb2FkVGltZTogXCJVMkZzZEdWa1gxOVRMbmRvbkdZNFk4dkh1WkZmTEo1Z1oydC9DTHByaDBvPVwiLFxyXG4gIHRpbWVTaG93Tm90aWNlOiBcIlUyRnNkR1ZrWDE4VGNzYTYzTjBmUFVFNDJGZi83SGJLR0d4YjdpekczQms9XCJcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY1NldHRpbmdzIHtcclxuICBba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTZXR0aW5ncyBleHRlbmRzIER5bmFtaWNTZXR0aW5nc3tcclxuICBlbmFibGVJbml0Q29tbWFuZDogc3RyaW5nO1xyXG4gIGJpbmRFbnRlcjogc3RyaW5nO1xyXG4gIGJpbmRUYWI6IHN0cmluZztcclxuICBhdmF0YXJQYWdlTmFtZTogc3RyaW5nO1xyXG4gIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XHJcbiAgZm9sZGVyRXhjbHVkZTogc3RyaW5nO1xyXG4gIHByb2dyZXNzaXZlU3VtTGF5ZXIyOiBzdHJpbmc7XHJcbiAgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcclxuICBudW1BbGxGaWxlczogc3RyaW5nO1xyXG4gIG51bUFsbEZpbGVzQ291bnQ6IHN0cmluZztcclxuICBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBzdHJpbmc7XHJcbiAgc3RhdHVzUG9pbnRzOiBzdHJpbmc7XHJcbiAgc3RhdHVzTGV2ZWw6IHN0cmluZztcclxuICB4cEZvck5leHRMZXZlbDogc3RyaW5nO1xyXG4gIGdhbWlmaWNhdGlvblN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIGJhZGdlQm9vc3RlclN0YXRlOiBzdHJpbmc7XHJcbiAgYmFkZ2VCb29zdGVyRmFjdG9yOiBzdHJpbmc7XHJcbiAgZGVidWc6IHN0cmluZztcclxuICBkYWlseU5vdGVDcmVhdGlvblRhc2s6IHN0cmluZztcclxuICBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcclxuICB3ZWVrbHlOb3RlQ3JlYXRpb25UYXNrOiBzdHJpbmc7XHJcbiAgd2Vla2x5Tm90ZUNyZWF0aW9uRGF0ZTogc3RyaW5nO1xyXG4gIHN0cmVha2Jvb3N0ZXI6IHN0cmluZztcclxuICBzdHJlYWtib29zdGVyRGF0ZTogc3RyaW5nO1xyXG4gIG5leHVzTm9kZTogc3RyaW5nO1xyXG4gIGNvbm5lY3Rpb25DcnlzdGFsOiBzdHJpbmc7XHJcbiAgbWFzdGVyeVNjcm9sbDogc3RyaW5nO1xyXG4gIGluc2lnaHRQcmlzbTogc3RyaW5nO1xyXG4gIHJlZmxlY3RpdmVFc3NlbmNlOiBzdHJpbmc7XHJcbiAgYW1wbGlmaWNhdGlvbkNyeXN0YWw6IHN0cmluZztcclxuICBjcmVhdGl2ZUNhdGFseXN0OiBzdHJpbmc7XHJcbiAgcHJlY2lzaW9uTGVuczogc3RyaW5nO1xyXG4gIHRlbXBvcmFsVHdlYWtlcjogc3RyaW5nO1xyXG4gIHBlcnBldHVhbFByb2dyZXNzOiBzdHJpbmc7XHJcbiAgc3RyYXRlZ2ljU3luYXBzZXM6IHN0cmluZztcclxuICBhY2NlbGVyYXRlZEFjcXVpc2l0aW9uOiBzdHJpbmc7XHJcbiAgbGlua2Vyc0xvZGU6IHN0cmluZztcclxuICBlZmZvcnRsZXNzRXhwYW5zaW9uOiBzdHJpbmc7XHJcbiAgcmVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nO1xyXG4gIHN5bmFwdGljU3VyZ2U6IHN0cmluZztcclxuICBpbnNwaXJhdGlvbkluZnVzaW9uOiBzdHJpbmc7XHJcbiAgdGl0bGVUaXRhbjogc3RyaW5nO1xyXG4gIHByZWNpc2lvblByaXNtOiBzdHJpbmc7XHJcbiAgaHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIGVwaGVtZXJhbEV1cGhvcmlhOiBzdHJpbmc7XHJcbiAgYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzOiBzdHJpbmc7XHJcbiAgYm9vc3RlckRhdGVQZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nXHJcbiAgYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzOiBzdHJpbmc7XHJcbiAgYm9vc3RlckRhdGVTdHJhdGVnaWNTeW5hcHNlczogc3RyaW5nO1xyXG4gIGJvb3N0ZXJGYWN0b3JMaW5rZXJzTG9kZTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlTGlua2Vyc0xvZGU6IHN0cmluZztcclxuICBib29zdGVyRmFjdG9yUmVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlUmVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJGYWN0b3JTeW5hcHRpY1N1cmdlOiBzdHJpbmc7XHJcbiAgYm9vc3RlckRhdGVTeW5hcHRpY1N1cmdlOiBzdHJpbmc7XHJcbiAgYm9vc3RlckZhY3RvclRpdGxlVGl0YW46IHN0cmluZztcclxuICBib29zdGVyRGF0ZVRpdGxlVGl0YW46IHN0cmluZ1xyXG4gIGJvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJEYXRlUHJlY2lzaW9uUHJpc206IHN0cmluZ1xyXG4gIGJvb3N0ZXJGYWN0b3JIeXBlcmxpbmtIYXJtb255OiBzdHJpbmc7XHJcbiAgYm9vc3RlckRhdGVIeXBlcmxpbmtIYXJtb255OiBzdHJpbmc7XHJcbiAgYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhOiBzdHJpbmc7XHJcbiAgYm9vc3RlckRhdGVFcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudDogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudFRlbXBvcmFsVHdlYWtlcjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudFBlcnBldHVhbFByb2dyZXNzOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50U3RyYXRlZ2ljU3luYXBzZXM6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRBY2NlbGVyYXRlZEFjcXVpc2l0aW9uOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50TGlua2Vyc0xvZGU6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRFZmZvcnRsZXNzRXhwYW5zaW9uOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50ckVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudFN5bmFwdGljU3VyZ2U6IHN0cmluZztcclxuICBib29zdGVyVXNlQ291bnRJbnNwaXJhdGlvbkluZnVzaW9uOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50VGl0bGVUaXRhbjogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudFByZWNpc2lvblByaXNtOiBzdHJpbmc7XHJcbiAgYm9vc3RlclVzZUNvdW50SHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIGJvb3N0ZXJVc2VDb3VudEVwaGVtZXJhbEV1cGhvcmlhOiBzdHJpbmc7XHJcbiAgY291bnRlck1hanVyaXR5Q2FsYzogc3RyaW5nO1xyXG4gIGNvdW50ZXJNYWp1cml0eUNhbGNJbml0aWFsOiBzdHJpbmc7XHJcbiAgZGVsYXlMb2FkVGltZTogc3RyaW5nO1xyXG4gIHRpbWVTaG93Tm90aWNlOiBzdHJpbmdcclxuICAvL1trZXk6IHN0cmluZ106IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBNb21lbnRJbnB1dDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBHYW1pZmljYXRpb25QbHVnaW5TZXR0aW5ncyBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luOiBnYW1pZmljYXRpb247XHJcbiAgcHVibGljIHNldHRpbmdzOiBJU2V0dGluZ3M7XHJcbiAgcHVibGljIGVuYWJsZUluaXRDb21tYW5kOiBzdHJpbmc7XHJcbiAgcHVibGljIGJpbmRFbnRlcjogc3RyaW5nO1xyXG4gIHB1YmxpYyBiaW5kVGFiOiBzdHJpbmc7XHJcbiAgcHVibGljIGF2YXRhclBhZ2VOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHRhZ3NFeGNsdWRlOiBzdHJpbmc7XHJcbiAgcHVibGljIGZvbGRlckV4Y2x1ZGU6IHN0cmluZztcclxuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjI6IHN0cmluZztcclxuICBwdWJsaWMgcHJvZ3Jlc3NpdmVTdW1MYXllcjM6IHN0cmluZztcclxuICBwdWJsaWMgbnVtQWxsRmlsZXM6IHN0cmluZztcclxuICBwdWJsaWMgbnVtQWxsRmlsZXNDb3VudDogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGFydFJlZHV6aWVydW5nTW9uYXRlOiBzdHJpbmc7XHJcbiAgcHVibGljIHN0YXR1c1BvaW50czogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdGF0dXNMZXZlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyB4cEZvck5leHRMZXZlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBnYW1pZmljYXRpb25TdGFydERhdGU6IHN0cmluZztcclxuICBwdWJsaWMgYmFkZ2VCb29zdGVyU3RhdGU6IHN0cmluZztcclxuICBwdWJsaWMgYmFkZ2VCb29zdGVyRmFjdG9yOiBzdHJpbmc7XHJcbiAgcHVibGljIGRlYnVnOiBzdHJpbmc7XHJcbiAgcHVibGljIGRhaWx5Tm90ZUNyZWF0aW9uVGFzazogc3RyaW5nO1xyXG4gIHB1YmxpYyBkYWlseU5vdGVDcmVhdGlvbkRhdGU6IHN0cmluZztcclxuICBwdWJsaWMgd2Vla2x5Tm90ZUNyZWF0aW9uVGFzazogc3RyaW5nO1xyXG4gIHB1YmxpYyB3ZWVrbHlOb3RlQ3JlYXRpb25EYXRlOiBzdHJpbmc7XHJcbiAgcHVibGljIHN0cmVha2Jvb3N0ZXI6IHN0cmluZztcclxuICBwdWJsaWMgc3RyZWFrYm9vc3RlckRhdGU6IHN0cmluZztcclxuICBwdWJsaWMgbmV4dXNOb2RlOiBzdHJpbmc7XHJcbiAgcHVibGljIGNvbm5lY3Rpb25DcnlzdGFsOiBzdHJpbmc7XHJcbiAgcHVibGljIG1hc3RlcnlTY3JvbGw6IHN0cmluZztcclxuICBwdWJsaWMgaW5zaWdodFByaXNtOiBzdHJpbmc7XHJcbiAgcHVibGljIHJlZmxlY3RpdmVFc3NlbmNlOiBzdHJpbmc7XHJcbiAgcHVibGljIGFtcGxpZmljYXRpb25DcnlzdGFsOiBzdHJpbmc7XHJcbiAgcHVibGljIGNyZWF0aXZlQ2F0YWx5c3Q6IHN0cmluZztcclxuICBwdWJsaWMgcHJlY2lzaW9uTGVuczogc3RyaW5nO1xyXG4gIHB1YmxpYyB0ZW1wb3JhbFR3ZWFrZXI6IHN0cmluZztcclxuICBwdWJsaWMgcGVycGV0dWFsUHJvZ3Jlc3M6IHN0cmluZztcclxuICBwdWJsaWMgc3RyYXRlZ2ljU3luYXBzZXM6IHN0cmluZztcclxuICBwdWJsaWMgYWNjZWxlcmF0ZWRBY3F1aXNpdGlvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBsaW5rZXJzTG9kZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBlZmZvcnRsZXNzRXhwYW5zaW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIHJlY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZztcclxuICBwdWJsaWMgc3luYXB0aWNTdXJnZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpbnNwaXJhdGlvbkluZnVzaW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIHRpdGxlVGl0YW46IHN0cmluZztcclxuICBwdWJsaWMgcHJlY2lzaW9uUHJpc206IHN0cmluZztcclxuICBwdWJsaWMgaHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIHB1YmxpYyBlcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yUGVycGV0dWFsUHJvZ3Jlc3M6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlckRhdGVQZXJwZXR1YWxQcm9ncmVzczogc3RyaW5nXHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JTdHJhdGVnaWNTeW5hcHNlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZVN0cmF0ZWdpY1N5bmFwc2VzOiBzdHJpbmdcclxuICBwdWJsaWMgYm9vc3RlckZhY3RvckxpbmtlcnNMb2RlOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJEYXRlTGlua2Vyc0xvZGU6IHN0cmluZ1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yUmVjdXJzaXZlUmVmbGVjdGlvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZVJlY3Vyc2l2ZVJlZmxlY3Rpb246IHN0cmluZ1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZVN5bmFwdGljU3VyZ2U6IHN0cmluZ1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yVGl0bGVUaXRhbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRGF0ZVRpdGxlVGl0YW46IHN0cmluZ1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yUHJlY2lzaW9uUHJpc206IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlckRhdGVQcmVjaXNpb25QcmlzbTogc3RyaW5nXHJcbiAgcHVibGljIGJvb3N0ZXJGYWN0b3JIeXBlcmxpbmtIYXJtb255OiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJEYXRlSHlwZXJsaW5rSGFybW9ueTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWE6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlckRhdGVFcGhlbWVyYWxFdXBob3JpYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnQ6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50VGVtcG9yYWxUd2Vha2VyOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudFBlcnBldHVhbFByb2dyZXNzOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudFN0cmF0ZWdpY1N5bmFwc2VzOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudEFjY2VsZXJhdGVkQWNxdWlzaXRpb246IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50TGlua2Vyc0xvZGU6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50RWZmb3J0bGVzc0V4cGFuc2lvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRyRWN1cnNpdmVSZWZsZWN0aW9uOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudFN5bmFwdGljU3VyZ2U6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50SW5zcGlyYXRpb25JbmZ1c2lvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBib29zdGVyVXNlQ291bnRUaXRsZVRpdGFuOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudFByZWNpc2lvblByaXNtOiBzdHJpbmc7XHJcbiAgcHVibGljIGJvb3N0ZXJVc2VDb3VudEh5cGVybGlua0hhcm1vbnk6IHN0cmluZztcclxuICBwdWJsaWMgYm9vc3RlclVzZUNvdW50RXBoZW1lcmFsRXVwaG9yaWE6IHN0cmluZztcclxuICBwdWJsaWMgY291bnRlck1hanVyaXR5Q2FsYzogc3RyaW5nO1xyXG4gIHB1YmxpYyBjb3VudGVyTWFqdXJpdHlDYWxjSW5pdGlhbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBkZWxheUxvYWRUaW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHRpbWVTaG93Tm90aWNlOiBzdHJpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IGdhbWlmaWNhdGlvbikge1xyXG5cdCAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG5cdCAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblxyXG4gICAgbGV0IHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzKTtcclxuXHJcbiAgICAvKlxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc2V0dGluZ3MpIHtcclxuICAgICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICBpZih0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyl7XHJcbiAgICAgICAgICBzZXR0aW5nc1trZXldID0gZW5jcnlwdE51bWJlcihzZXR0aW5nc1trZXldIGFzIG51bWJlcilcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBlbmNyeXB0U3RyaW5nKHNldHRpbmdzW2tleV0gYXMgc3RyaW5nKVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleSA9PT0gJ2Jvb2xlYW4nKXtcclxuICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBlbmNyeXB0Qm9vbGVhbihzZXR0aW5nc1trZXldIGFzIGJvb2xlYW4pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiovXHJcbiAgICAvLyBTYXZlIGBzZXR0aW5nc2Agd2l0aCBlbmNyeXB0ZWQgdmFsdWVzIHRvIHlvdXIgc3RvcmFnZVxyXG5cclxuXHR9XHJcbiAgXHJcblx0cHVibGljIGRpc3BsYXkoKTogdm9pZCB7XHJcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGFpbmVyRWwuYWRkQ2xhc3MoXCJleGNhbGlkcmF3LXNldHRpbmdzXCIpO1xyXG5cdFx0dGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xyXG5cclxuXHRcdGNvbnN0IGNvZmZlZURpdiA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihcImNvZmZlZVwiKTtcclxuXHRcdGNvZmZlZURpdi5hZGRDbGFzcyhcImV4LWNvZmZlZS1kaXZcIik7XHJcblx0XHRjb25zdCBjb2ZmZWVMaW5rID0gY29mZmVlRGl2LmNyZWF0ZUVsKFwiYVwiLCB7XHJcblx0XHRocmVmOiBcImh0dHBzOi8va28tZmkuY29tL2FuZHJlYXN0cmViaW5nXCIsXHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGNvZmZlZUltZyA9IGNvZmZlZUxpbmsuY3JlYXRlRWwoXCJpbWdcIiwge1xyXG5cdFx0YXR0cjoge1xyXG5cdFx0XHRzcmM6IFwiaHR0cHM6Ly9jZG4ua28tZmkuY29tL2Nkbi9rb2ZpMy5wbmc/dj0zXCIsXHJcblx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHRjb2ZmZWVJbWcuaGVpZ2h0ID0gNDU7XHJcblxyXG5cdFx0Ly9jb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xyXG5cdFx0Ly9jb250YWluZXJFbC5lbXB0eSgpO1xyXG4gIFxyXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnR2FtaWZ5IHlvdXIgUEtNIC0gU2V0dGluZ3MnIH0pO1xyXG5cdFx0Y29uc29sZS5sb2coJ3NldHRpbmdzIGNhbGxlZCcpXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJyN0YWdzIHRvIGlnbm9yZScpXHJcblx0XHRcdC5zZXREZXNjKCdlbnRlciB0YWdzIHdpdGhvdXQgIyBhbmQgc2VwYXJhdGUgd2l0aCBcIiwgXCIuXFxuSW5jbHVkZSBuZXN0ZWQgdGFncy4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgdGFnMSwgdGFnMi9zdWJ0YWcsIFx1MjAyNicpXHJcblx0XHRcdFx0Ly8uc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUpXHJcbiAgICAgICAgLnNldFZhbHVlKGRlY3J5cHRTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc0V4Y2x1ZGUpKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRhZ3NFeGNsdWRlID0gZW5jcnlwdFN0cmluZyh2YWx1ZSk7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSk7XHJcblxyXG5cdFx0XHRcdFxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdmb2xkZXIgdG8gaWdub3JlJylcclxuXHRcdFx0LnNldERlc2MoJ2VudGVyIGZvbGRlciB3aGljaHMgY29udGVudCBzaGFsbCBiZSBpZ25vcmVkLiBTZXBhcmF0ZSB3aXRoIFwiLCBcIi4nKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgZm9sZGVyMSwgZm9sZGVyMiwgXHUyMDI2JylcclxuXHRcdFx0XHQvLy5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXJFeGNsdWRlKVxyXG4gICAgICAgIC5zZXRWYWx1ZShkZWNyeXB0U3RyaW5nKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUpKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmZvbGRlckV4Y2x1ZGUgPSBlbmNyeXB0U3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ1Byb2ZpbGUgUGFnZSBOYW1lJylcclxuXHRcdFx0LnNldERlc2MoJ3lvdSBjYW4gY2hhbmdlIGhlcmUgdGhlIG5hbWUgb2YgeW91ciBwcm9maWxlIHBhZ2UgaWYgeW91IGxpa2UuJylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ25hbWUnKVxyXG5cdFx0XHRcdFx0Ly8uc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUpXHJcbiAgICAgICAgICAuc2V0VmFsdWUoZGVjcnlwdFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdmF0YXJQYWdlTmFtZSkpXHJcblx0XHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdmb2xkZXIgdG8gZXhjbHVkZTogJyArIHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXZhdGFyUGFnZU5hbWUgPSBlbmNyeXB0U3RyaW5nKHZhbHVlKTtcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdFxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiAnT3RoZXIgU2V0dGluZ3MnIH0pO1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdEaXNhYmxlIEluaXQgQ29tbWFuZCcpXHJcblx0XHRcdC5zZXREZXNjKCd5b3UgY2FuIHJlbW92ZSB0aGUgaW5pdCBjb21tYW5kIGZyb20gY29tbWFuZCBwcm9tcHQgYnkgc3dpdGNoaW5nIG9mZi5cXG5yZXN0YXJ0IG5lZWRlZC4nKVxyXG5cdFx0XHQuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IFxyXG5cdFx0XHRcdHRvZ2dsZVxyXG4gICAgICAgICAgXHRcdC5zZXRWYWx1ZShkZWNyeXB0Qm9vbGVhbih0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCkpXHJcbiAgICAgICAgXHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVJbml0Q29tbWFuZCA9IGVuY3J5cHRCb29sZWFuKHZhbHVlKTtcclxuICAgICAgICAgICAgXHRcdFx0dGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgXHRcdFx0fSksXHJcblx0XHRcdCk7XHJcblxyXG4gIFxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdEZWxheSBTZXR0aW5ncyBhdCBzdGFydHVwJylcclxuXHRcdFx0LnNldERlc2MoJ0VudGVyIGluIHNlY29uZHMgdG8gZGVsYXkgdGhlIGxvYWQgdGltZS4gZS5nLiB3aGVuIEdJVCBwdWxsIGlzIHBlcmZvcm1lZCBiZWZvcmUgYW5kIHNldHRpbmdzIGdldCBtZXJnZSBjb25mbGljdHMuIFdpdGhvdXQgR0lUIHVzYWdlLCBrZWVwIGl0IHRvIDAuJylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJzAnKVxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKGRlY3J5cHROdW1iZXIodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVsYXlMb2FkVGltZSkudG9TdHJpbmcoKSlcclxuICAgICAgICAgIC8vLnNldFZhbHVlKFwiMFwiKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWxheUxvYWRUaW1lID0gZW5jcnlwdE51bWJlcihwYXJzZUludCh2YWx1ZSkpO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ1RpbWUgaG93IGxvbmcgTm90aWNlcyBhcmUgc2hvd24nKVxyXG5cdFx0XHQuc2V0RGVzYygnRW50ZXIgaW4gc2Vjb25kcy4gNCBzZWNvbmRzIG9yIG1vcmUgaXMgYSBnb29kIHZhbHVlJylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJzQnKVxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKGRlY3J5cHROdW1iZXIodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZVNob3dOb3RpY2UpLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVTaG93Tm90aWNlID0gZW5jcnlwdE51bWJlcihwYXJzZUludCh2YWx1ZSkpO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdH0pKTtcclxuXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoJ1Byb2dyZXNzaXZlIFN1bW1hcml6YXRpb24nKVxyXG5cdFx0XHQuc2V0RGVzYygneW91IGNhbiBjaGFuZ2Ugd2hpY2ggZm9ybWF0dGluZyB5b3UgdXNlIGZvciBMYXllciAyIGFuZCAzLicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCdMYXllciAyIGlzIHVzdWFsbHkgKionKVxyXG5cdFx0XHRcdFx0LnNldFZhbHVlKGRlY3J5cHRTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MucHJvZ3Jlc3NpdmVTdW1MYXllcjIpKVxyXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnZm9sZGVyIHRvIGV4Y2x1ZGU6ICcgKyB2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIyID0gZW5jcnlwdFN0cmluZyh2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pKVxyXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcclxuXHRcdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignTGF5ZXIgMyBpcyB1c3VhbGx5ID09JylcclxuXHRcdFx0XHRcdC5zZXRWYWx1ZShkZWNyeXB0U3RyaW5nKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2dyZXNzaXZlU3VtTGF5ZXIzKSlcclxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2ZvbGRlciB0byBleGNsdWRlOiAnICsgdmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9ncmVzc2l2ZVN1bUxheWVyMyA9IGVuY3J5cHRTdHJpbmcodmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0fSkpO1xyXG5cclxuXHR9XHJcbiAgfSIsICJleHBvcnQgY29uc3QgcG9pbnRzTm90ZU1hanVyaXR5OiBudW1iZXIgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNNYWp1cml0eTogbnVtYmVyID0gMTA7XHJcbmV4cG9ydCBjb25zdCBwb2ludHNGb3JEYWlseUNoYWxsZW5nZTogbnVtYmVyID0gNTAwO1xyXG5leHBvcnQgY29uc3QgcG9pbnRzRm9yV2Vla2x5Q2hhbGxlbmdlOiBudW1iZXIgPSAyMDAwO1xyXG5leHBvcnQgY29uc3Qgc3RyZWFrYm9vc3RlckRlY3JlYXNlOiBudW1iZXIgPSAwLjI7XHJcbmV4cG9ydCBjb25zdCBzdHJlYWtib29zdGVySW5jcmVhc2VEYWlseTogbnVtYmVyID0gMC4xO1xyXG5leHBvcnQgY29uc3Qgc3RyZWFrYm9vc3RlckluY3JlYXNlV2Vla2x5OiBudW1iZXIgPSAxO1xyXG5leHBvcnQgY29uc3QgQ3J5cHRvSlMgPSByZXF1aXJlKFwiY3J5cHRvLWpzXCIpO1xyXG5leHBvcnQgY29uc3Qgc2VjcmV0S2V5ID0gXCIyWlVeMTJ5I1FtTkI1JHlFaW41XlwiO1xyXG5leHBvcnQgY29uc3QgYXZhdGFySW5pdENvbnRlbnQgPSAgYCMgQXZhdGFyXHJcblxyXG58ICAgICAgICAgICB8ICAgICAgICAgfCBcclxufCAtLS0tLS0tLS0gfCAtLS0tLS0tIHxcclxufCAqKkxldmVsKiogIHwgKioxKiogfFxyXG58IFBvaW50cyB8IDAgICAgfFxyXG5ebGV2ZWxBbmRQb2ludHNcclxuXFxgXFxgXFxgY2hhcnRcclxudHlwZTogYmFyXHJcbmxhYmVsczogW0V4cHJpcmllbmNlXVxyXG5zZXJpZXM6XHJcbiAgLSB0aXRsZTogcG9pbnRzIHJlYWNoZWRcclxuICAgIGRhdGE6IFswXVxyXG4gIC0gdGl0bGU6IHBvaW50cyB0byBlYXJuIHRvIGxldmVsIHVwXHJcbiAgICBkYXRhOiBbMTAwMF1cclxueE1pbjogMFxyXG54TWF4OiAxMDAwXHJcbnRlbnNpb246IDAuMlxyXG53aWR0aDogNDAlXHJcbmxhYmVsQ29sb3JzOiBmYWxzZVxyXG5maWxsOiBmYWxzZVxyXG5iZWdpbkF0WmVybzogZmFsc2VcclxuYmVzdEZpdDogZmFsc2VcclxuYmVzdEZpdFRpdGxlOiB1bmRlZmluZWRcclxuYmVzdEZpdE51bWJlcjogMFxyXG5zdGFja2VkOiB0cnVlXHJcbmluZGV4QXhpczogeVxyXG54VGl0bGU6IFwicHJvZ3Jlc3NcIlxyXG5sZWdlbmQ6IGZhbHNlXHJcblxcYFxcYFxcYFxyXG5cclxufCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxyXG58IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLSB8XHJcbnwgKipib29zdGVyIGZhY3RvcioqIHwgKiowKiogfFxyXG5eYm9vc3RlckZhY3RvclxyXG5cclxufCAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IFxyXG58IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tIHxcclxufCAqKmRhaWx5IE5vdGVzKiogfCAqNTAwRVAqIHwgKiowLzIqKiAgIHxcclxuXmRhaWx5Tm90ZXNDaGFsbGVuZ2VcclxuXHJcbnwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IFxyXG58IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0gfFxyXG58ICoqd2Vla2x5IE5vdGVzKiogfCAqMjAwMEVQKiAgICAgfCAgKiowLzcqKiAgIHxcclxuXndlZWtseU5vdGVzQ2hhbGxlbmdlXHJcblxcYFxcYFxcYGNoYXJ0XHJcbnR5cGU6IGJhclxyXG5sYWJlbHM6IFtkYXlzIGRvbmUgaW4gYSByb3ddXHJcbnNlcmllczpcclxuICAtIHRpdGxlOiBkYXlzIHRvIGRvIGluIGEgcm93XHJcbiAgICBkYXRhOiBbMF1cclxuICAtIHRpdGxlOiBwb2ludHMgdG8gZWFybiB0byBsZXZlbCB1cFxyXG4gICAgZGF0YTogWzddXHJcbnhNaW46IDBcclxueE1heDogN1xyXG50ZW5zaW9uOiAwLjJcclxud2lkdGg6IDQwJVxyXG5sYWJlbENvbG9yczogZmFsc2VcclxuZmlsbDogZmFsc2VcclxuYmVnaW5BdFplcm86IGZhbHNlXHJcbmJlc3RGaXQ6IGZhbHNlXHJcbmJlc3RGaXRUaXRsZTogdW5kZWZpbmVkXHJcbmJlc3RGaXROdW1iZXI6IDBcclxuc3RhY2tlZDogdHJ1ZVxyXG5pbmRleEF4aXM6IHlcclxueFRpdGxlOiBcInByb2dyZXNzXCJcclxubGVnZW5kOiBmYWxzZVxyXG5cXGBcXGBcXGBcclxuXHJcbnwgTGV2ZWwgfCBDb3VudCB8XHJcbnwgOi0tLTogfCA6LS0tOiB8XHJcbnwgTWFqdXJpdHkgNSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzUsICc1JywgJzVcdTI3QTFcdUZFMEYnLCAnNVx1MkIwN1x1RkUwRicsICc1XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgNCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzQsICc0JywgJzRcdTI3QTFcdUZFMEYnLCAnNFx1MkIwN1x1RkUwRicsICc0XHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMyB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzMsICczJywgJzNcdTI3QTFcdUZFMEYnLCAnM1x1MkIwN1x1RkUwRicsICczXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMiB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzIsICcyJywgJzJcdTI3QTFcdUZFMEYnLCAnMlx1MkIwN1x1RkUwRicsICcyXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMSB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzEsICcxJywgJzFcdTI3QTFcdUZFMEYnLCAnMVx1MkIwN1x1RkUwRicsICcxXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcbnwgTWFqdXJpdHkgMCB8XFxgJD1kdi5wYWdlcygpLndoZXJlKHAgPT4gWzAsICcwJywgJzBcdTI3QTFcdUZFMEYnLCAnMFx1MkIwN1x1RkUwRicsICcwXHUyQjA2XHVGRTBGJ10uaW5jbHVkZXMocC5maWxlLmZyb250bWF0dGVyWydub3RlLW1hdHVyaXR5J10pKS5sZW5ndGhcXGB8XHJcblxyXG5cclxuXHJcbiMjIyBCYWRnZXNcclxuIyMjIyBhY2hpZXZlZFxyXG5cclxuXHJcbiMjIyMgb3V0c3RhbmRpbmdcclxubGV2ZWwgNTogKkVubGlnaHRlbmVkIE5vdmljZSpcclxubGV2ZWwgMTA6ICpDdXJpb3VzIENvbm5vaXNzZXVyKlxyXG5sZXZlbCAyMDogKkJyYWluaWFjIFRyYWlsYmxhemVyKlxyXG5sZXZlbCAyNzogKlNjaG9sYXJseSBUcmFpbGJsYXplcipcclxubGV2ZWwgMzU6ICpJbmZvIE5pbmphIE1hc3RlcipcclxubGV2ZWwgNDI6ICpXaXNlIE93bCBHdXJ1KlxyXG5sZXZlbCA1MDogKkVpbnN0ZWluIEluY2FybmF0ZSpcclxubGV2ZWwgNjA6ICpNYXN0ZXJtaW5kIFNhZ2UqXHJcbmxldmVsIDc1OiAqQ2VyZWJyYWwgTWFlc3RybypcclxubGV2ZWwgODI6ICpaZW4gS25vd2xlZGdlIEtlZXBlcipcclxubGV2ZWwgOTA6ICpHcmFuZCBBcmNoaXZpc3QgT3ZlcmxvcmQqXHJcbmxldmVsIDEwMDogKk9tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nKlxyXG5cclxuXHJcblxyXG4jIyMgKipub3RlLW1hdHVyaXR5ID0gNSoqXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSA1IG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI1XHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNVx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjVcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyAqKm5vdGUtbWF0dXJpdHkgPSA0KipcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDQgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjRcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCI0XHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiNFx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAzXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAzIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIzXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiM1x1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjNcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuXHJcbiMjIyBub3RlLW1hdHVyaXR5ID0gMlxyXG5cXGBcXGBcXGBkYXRhdmlld1xyXG5MaXN0IE5vdGVNYXR1cml0eUNvdW50XHJcbmZyb20gXCJcIlxyXG5XaGVyZSBub3RlLW1hdHVyaXR5ID0gMiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMlx1MjdBMVx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjJcdTJCMDZcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIyXHUyQjA3XHVGRTBGXCJcclxuXFxgXFxgXFxgXHJcblxyXG4jIyMgbm90ZS1tYXR1cml0eSA9IDFcclxuXFxgXFxgXFxgZGF0YXZpZXdcclxuTGlzdCBOb3RlTWF0dXJpdHlDb3VudFxyXG5mcm9tIFwiXCJcclxuV2hlcmUgbm90ZS1tYXR1cml0eSA9IDEgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjFcdTI3QTFcdUZFMEZcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIxXHUyQjA2XHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMVx1MkIwN1x1RkUwRlwiXHJcblxcYFxcYFxcYFxyXG5cclxuIyMjIG5vdGUtbWF0dXJpdHkgPSAwXHJcblxcYFxcYFxcYGRhdGF2aWV3XHJcbkxpc3QgTm90ZU1hdHVyaXR5Q291bnRcclxuZnJvbSBcIlwiXHJcbldoZXJlIG5vdGUtbWF0dXJpdHkgPSAwIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcIiBvciBub3RlLW1hdHVyaXR5ID0gXCIwXHUyN0ExXHVGRTBGXCIgb3Igbm90ZS1tYXR1cml0eSA9IFwiMFx1MkIwNlx1RkUwRlwiIG9yIG5vdGUtbWF0dXJpdHkgPSBcIjBcdTJCMDdcdUZFMEZcIlxyXG5cXGBcXGBcXGBcclxuYDtcclxuZXhwb3J0IGNvbnN0IGluY3JlZGltZW50cyA9IFtcclxuICAnTmV4dXMgTm9kZScsXHJcbiAgJ0Nvbm5lY3Rpb24gQ3J5c3RhbCcsXHJcbiAgJ01hc3RlcnkgU2Nyb2xsJyxcclxuICAnSW5zaWdodCBQcmlzbScsXHJcbiAgJ1JlZmxlY3RpdmUgRXNzZW5jZScsXHJcbiAgJ0FtcGxpZmljYXRpb24gQ3J5c3RhbCcsXHJcbiAgJ0NyZWF0aXZlIENhdGFseXN0JyxcclxuICAnUHJlY2lzaW9uIExlbnMnXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgaW5jcmVkaW1lbnRzRGF0YU5hbWUgPSBbXHJcbiAgJ25leHVzTm9kZScsXHJcbiAgJ2Nvbm5lY3Rpb25DcnlzdGFsJyxcclxuICAnbWFzdGVyeVNjcm9sbCcsXHJcbiAgJ2luc2lnaHRQcmlzbScsXHJcbiAgJ3JlZmxlY3RpdmVFc3NlbmNlJyxcclxuICAnYW1wbGlmaWNhdGlvbkNyeXN0YWwnLFxyXG4gICdjcmVhdGl2ZUNhdGFseXN0JyxcclxuICAncHJlY2lzaW9uTGVucydcclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmFmdGluZ0l0ZW1zID0gW1xyXG4gIHsgbmFtZTogJ1RlbXBvcmFsIFR3ZWFrZXInLCBpbmNyZWRpZW50czogWycyeFMxJywgJzF4UzYnXSB9LFxyXG4gIHsgbmFtZTogJ1BlcnBldHVhbCBQcm9ncmVzcycsIGluY3JlZGllbnRzOiBbJzJ4UzInLCAnMXhTNCddIH0sXHJcbiAgeyBuYW1lOiAnU3RyYXRlZ2ljIFN5bmFwc2VzJywgaW5jcmVkaWVudHM6IFsnM3hTMScsICcyeFMyJ10gfSxcclxuICB7IG5hbWU6ICdBY2NlbGVyYXRlZCBBY3F1aXNpdGlvbicsIGluY3JlZGllbnRzOiBbJzF4UzMnLCAnMnhTNCddIH0sXHJcbiAgeyBuYW1lOiAnTGlua2VycyBMb2RlJywgaW5jcmVkaWVudHM6IFsnM3hTMicsICcxeFMxJ10gfSxcclxuICB7IG5hbWU6ICdFZmZvcnRsZXNzIEV4cGFuc2lvbicsIGluY3JlZGllbnRzOiBbJzJ4UzMnLCAnMXhTNiddIH0sXHJcbiAgeyBuYW1lOiAnUmVjdXJzaXZlIFJlZmxlY3Rpb24nLCBpbmNyZWRpZW50czogWycyeFM0JywgJzF4UzUnXSB9LFxyXG4gIHsgbmFtZTogJ1N5bmFwdGljIFN1cmdlJywgaW5jcmVkaWVudHM6IFsnMnhTMicsICcxeFMxJ10gfSxcclxuICB7IG5hbWU6ICdJbnNwaXJhdGlvbiBJbmZ1c2lvbicsIGluY3JlZGllbnRzOiBbJzJ4UzcnLCAnMXhTMSddIH0sXHJcbiAgeyBuYW1lOiAnVGl0bGUgVGl0YW4nLCBpbmNyZWRpZW50czogWycyeFM4JywgJzF4UzcnXSB9LFxyXG4gIHsgbmFtZTogJ1ByZWNpc2lvbiBQcmlzbScsIGluY3JlZGllbnRzOiBbJzJ4UzgnLCAnMXhTMiddIH0sXHJcbiAgeyBuYW1lOiAnSHlwZXJsaW5rIEhhcm1vbnknLCBpbmNyZWRpZW50czogWycyeFMyJywgJzF4UzYnXSB9LFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGxpc3RPZlVzZWFibGVCb29zdGVyc1RvQmVTaG93biA9IFsnUGVycGV0dWFsIFByb2dyZXNzJywgJ1RpdGxlIFRpdGFuJywgJ1ByZWNpc2lvbiBQcmlzbSddXHJcbmV4cG9ydCBjb25zdCBsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd24gPSBbJ0Nvbm5lY3Rpb24gQ3J5c3RhbCcsICdJbnNpZ2h0IFByaXNtJywgJ0NyZWF0aXZlIENhdGFseXN0JywgJ1ByZWNpc2lvbiBMZW5zJ11cclxuZXhwb3J0IGNvbnN0IGNoYW5jZVRvRWFybkluZ3JlZGllbnQgPSAwLjU7XHJcblxyXG5leHBvcnQgY29uc3QgZWxlbWVudHMgPSBbXHJcbiAgeyBzaG9ydE5hbWU6ICdTMicsIG5hbWU6ICdDb25uZWN0aW9uIENyeXN0YWwnLCB2YXJOYW1lOiAnY29ubmVjdGlvbkNyeXN0YWwnIH0sXHJcbiAgeyBzaG9ydE5hbWU6ICdTNCcsIG5hbWU6ICdJbnNpZ2h0IFByaXNtJywgdmFyTmFtZTogJ2luc2lnaHRQcmlzbScgfSxcclxuICB7IHNob3J0TmFtZTogJ1M3JywgbmFtZTogJ0NyZWF0aXZlIENhdGFseXN0JywgdmFyTmFtZTogJ2NyZWF0aXZlQ2F0YWx5c3QnIH0sXHJcbiAgeyBzaG9ydE5hbWU6ICdTOCcsIG5hbWU6ICdQcmVjaXNpb24gTGVucycsIHZhck5hbWU6ICdwcmVjaXNpb25MZW5zJyB9LFxyXG4gIHsgc2hvcnROYW1lOiAnUzEnLCBuYW1lOiAnTmV4dXMgTm9kZScsIHZhck5hbWU6ICduZXh1c05vZGUnIH0sXHJcbiAgeyBzaG9ydE5hbWU6ICdTMycsIG5hbWU6ICdNYXN0ZXJ5IFNjcm9sbCcsIHZhck5hbWU6ICdtYXN0ZXJ5U2Nyb2xsJyB9LFxyXG4gIHsgc2hvcnROYW1lOiAnUzUnLCBuYW1lOiAnUmVmbGVjdGl2ZSBFc3NlbmNlJywgdmFyTmFtZTogJ3JlZmxlY3RpdmVFc3NlbmNlJyB9LFxyXG4gIHsgc2hvcnROYW1lOiAnUzYnLCBuYW1lOiAnQW1wbGlmaWNhdGlvbiBDcnlzdGFsJywgdmFyTmFtZTogJ2FtcGxpZmljYXRpb25DcnlzdGFsJyB9XHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgYm9vc3RlclJlY2lwZXMgPSBbXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50VGVtcG9yYWxUd2Vha2VyJywgYm9vc3RlclJ1blRpbWU6IDAsIGJvb3N0ZXJDb29sZG93bjogMCwgYm9vc3RlckRhdGU6ICcnLCBib29zdGVyU3dpdGNoOiAnJywgdmFybmFtZTogJ3RlbXBvcmFsVHdlYWtlcicgLG5hbWU6ICdUZW1wb3JhbCBUd2Vha2VyJywgaW5jcmVkaWVudHM6IFsnMjB4UzEnLCAnMTB4UzYnXSwgZGVzY3JpcHRpb246ICdUZW1wb3JhbCBUd2Vha2VyOiByZXNldCB0aGUgY29vbGRvd24gcGhhc2UgZm9yIGEgYm9vc3RlciB5b3VyIGNob2ljZScgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRQZXJwZXR1YWxQcm9ncmVzcycsIGJvb3N0ZXJSdW5UaW1lOiA0KjYwLCBib29zdGVyQ29vbGRvd246IDM2KjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlUGVycGV0dWFsUHJvZ3Jlc3MnLCBib29zdGVyU3dpdGNoOiAnYm9vc3RlckZhY3RvclBlcnBldHVhbFByb2dyZXNzJywgdmFybmFtZTogJ3BlcnBldHVhbFByb2dyZXNzJyAsbmFtZTogJ1BlcnBldHVhbCBQcm9ncmVzcycsIGluY3JlZGllbnRzOiBbJzIweFMyJywgJzEweFM0J10sIGRlc2NyaXB0aW9uOiAnUGVycGV0dWFsIFByb2dyZXNzOiBnZXQgMyB0aW1lcyBwb2ludHMgYW4gYWxsIHlvdXIgYWN0aW9ucyBmb3IgdGhlIG5leHQgNCBob3Vycy4gWW91IGNhbiB1c2UgUGVycGV0dWFsIFByb2dyZXNzIGV2ZXJ5IHRocmVlIGRheXMsIGlmIHlvdSBoYXZlIHRoZSBpbmdyZWRpZW50cyB0byBjcmFmdCBpdC4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50U3RyYXRlZ2ljU3luYXBzZXMnLCBib29zdGVyUnVuVGltZTogNCo2MCwgYm9vc3RlckNvb2xkb3duOiAxMjAqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVTdHJhdGVnaWNTeW5hcHNlcycsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yU3RyYXRlZ2ljU3luYXBzZXMnLCB2YXJuYW1lOiAnc3RyYXRlZ2ljU3luYXBzZXMnICxuYW1lOiAnU3RyYXRlZ2ljIFN5bmFwc2VzJywgaW5jcmVkaWVudHM6IFsnMzB4UzEnLCAnMjB4UzInXSwgZGVzY3JpcHRpb246ICdTdHJhdGVnaWMgU3luYXBzZXM6IGdhaW4gMyB0aW1lcyBFUCBmb3IgYWxsIGFjdGlvbnMgb24gTWFwIE9mIENvbnRlbnQgcmF0aW5ncyBmb3IgdGhlIG5leHQgNCBob3Vycy4gVGhpcyBib29zdGVyIGhhcyBhIGNvb2xkb3duIHRpbWUgb2YgNSBkYXlzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRBY2NlbGVyYXRlZEFjcXVpc2l0aW9uJywgYm9vc3RlclJ1blRpbWU6IDAsIGJvb3N0ZXJDb29sZG93bjogMzYqNjAsIGJvb3N0ZXJEYXRlOiAnJywgYm9vc3RlclN3aXRjaDogJycsIHZhcm5hbWU6ICdhY2NlbGVyYXRlZEFjcXVpc2l0aW9uJyAsbmFtZTogJ0FjY2VsZXJhdGVkIEFjcXVpc2l0aW9uJywgaW5jcmVkaWVudHM6IFsnMTB4UzMnLCAnMjB4UzQnXSwgZGVzY3JpcHRpb246ICdBY2NlbGVyYXRlZCBBY3F1aXNpdGlvbjogVXNlIEFjY2VsZXJhdGVkIEFjcXVpc2l0aW9uIGFuZCBjb2xsZWN0IG11Y2ggZmFzdGVyIGZvciB0aGUgbmV4dCAxMiBob3VycyBhbGwgc29ydHMgb2YgaW5ncmVkaWVudHMgd2hlbiBjcmVhdGluZyBhbmQgaW1wcm92aW5nIG5vdGVzJyB9LFxyXG4gIHsgYm9vc3RlclVzZUNvdW50TmFtZTogJ2Jvb3N0ZXJVc2VDb3VudExpbmtlcnNMb2RlJywgYm9vc3RlclJ1blRpbWU6IDMqNjAsIGJvb3N0ZXJDb29sZG93bjogNDgqNjAsIGJvb3N0ZXJEYXRlOiAnYm9vc3RlckRhdGVMaW5rZXJzTG9kZScsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yTGlua2Vyc0xvZGUnLCB2YXJuYW1lOiAnbGlua2Vyc0xvZGUnICxuYW1lOiAnTGlua2VycyBMb2RlJywgaW5jcmVkaWVudHM6IFsnMzB4UzInLCAnMTB4UzEnXSwgZGVzY3JpcHRpb246ICdMaW5rZXJzIExvZGU6IGNvbGxlY3QgZXh0cmEgcG9pbnRzIHdoZW4gY3JlYXRpbmcgY2hhaW4gb2YgdGhvdWdodHMgZm9yIHRoZSBuZXh0IDMgaG91cnMuIChjb29sZG93biAyIGRheXMpJyB9LFxyXG4gIHsgYm9vc3RlclVzZUNvdW50TmFtZTogJ2Jvb3N0ZXJVc2VDb3VudEVmZm9ydGxlc3NFeHBhbnNpb24nLCBib29zdGVyUnVuVGltZTogMCwgYm9vc3RlckNvb2xkb3duOiA0ODAqNjAsIGJvb3N0ZXJEYXRlOiAnJywgYm9vc3RlclN3aXRjaDogJycsIHZhcm5hbWU6ICdlZmZvcnRsZXNzRXhwYW5zaW9uJyAsbmFtZTogJ0VmZm9ydGxlc3MgRXhwYW5zaW9uJywgaW5jcmVkaWVudHM6IFsnMjB4UzMnLCAnMTB4UzYnXSwgZGVzY3JpcHRpb246ICdFZmZvcnRsZXNzIEV4cGFuc2lvbjogQ2FzdCBcIkVmZm9ydGxlc3MgRXhwYW5zaW9uXCIgYW5kIGxvd2VyIHRoZSBjYXAgdG8gdGhlIG5leHQgbGV2ZWwgYWJvdXQgMjAlIGluIHRoZSBuZXh0IDUgZGF5cy4gKENvb2xkb3duIDIwIGRheXMpJyB9LFxyXG4gIHsgYm9vc3RlclVzZUNvdW50TmFtZTogJ2Jvb3N0ZXJVc2VDb3VudHJFY3Vyc2l2ZVJlZmxlY3Rpb24nLCBib29zdGVyUnVuVGltZTogNSo2MCwgYm9vc3RlckNvb2xkb3duOiAzNio2MCwgYm9vc3RlckRhdGU6ICdib29zdGVyRGF0ZVJlY3Vyc2l2ZVJlZmxlY3Rpb24nLCBib29zdGVyU3dpdGNoOiAnYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24nLCB2YXJuYW1lOiAncmVjdXJzaXZlUmVmbGVjdGlvbicgLG5hbWU6ICdSZWN1cnNpdmUgUmVmbGVjdGlvbicsIGluY3JlZGllbnRzOiBbJzIweFM0JywgJzEweFM1J10sIGRlc2NyaXB0aW9uOiAnUmVjdXJzaXZlIFJlZmxlY3Rpb246IEltcHJvdmUgeW91ciBub3RlcyBhbmQgZ2V0IDUgdGltZXMgdGhlIHBvaW50cyB5b3UgZ2V0IG9uIG5vcm1hbCBjb25kaXRpb24gZm9yIHRoZSBuZXh0IDUgaG91cnMuIENvb2xkb3duIDMgZGF5cy4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50U3luYXB0aWNTdXJnZScsIGJvb3N0ZXJSdW5UaW1lOiAyKjYwLCBib29zdGVyQ29vbGRvd246IDM2KjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlU3luYXB0aWNTdXJnZScsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZScsIHZhcm5hbWU6ICdzeW5hcHRpY1N1cmdlJyAsbmFtZTogJ1N5bmFwdGljIFN1cmdlJywgaW5jcmVkaWVudHM6IFsnMjB4UzInLCAnMTB4UzEnXSwgZGVzY3JpcHRpb246ICdTeW5hcHRpYyBTdXJnZTogTGluayB5b3VyIGlkZWFzIHRvZ2V0aGVyLCBldmVyeSBpbmNyZWFzZSBpbiBcImxpbmtpbmcgbWF0dXJpdHlcIiBwYXlzIG91dCAyMCB0aW1lcyBmb3IgdGhlIG5leHQgMiBob3Vycy4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50SW5zcGlyYXRpb25JbmZ1c2lvbicsIGJvb3N0ZXJSdW5UaW1lOiAwLCBib29zdGVyQ29vbGRvd246IDQ4KjYwLCBib29zdGVyRGF0ZTogJycsIGJvb3N0ZXJTd2l0Y2g6ICcnLCB2YXJuYW1lOiAnaW5zcGlyYXRpb25JbmZ1c2lvbicgLG5hbWU6ICdJbnNwaXJhdGlvbiBJbmZ1c2lvbicsIGluY3JlZGllbnRzOiBbJzIweFM3JywgJzEweFMxJ10sIGRlc2NyaXB0aW9uOiAnSW5zcGlyYXRpb24gSW5mdXNpb246IEluY3JlYXNlIHRoZSBmcmVxdWVuY3kgdG8gZ2V0IGhlbHBmdWwgcHJvbXB0cyB0byBwb3dlciB1cCB5b3UgcGVyc29uYWwga25vd2xlZGdlIG1hbmFnZW1lbnQgZm9yIHRoZSBuZXh0IDIgZGF5cy4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50VGl0bGVUaXRhbicsIGJvb3N0ZXJSdW5UaW1lOiAzKjYwLCBib29zdGVyQ29vbGRvd246IDM2KjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlVGl0bGVUaXRhbicsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yVGl0bGVUaXRhbicsIHZhcm5hbWU6ICd0aXRsZVRpdGFuJyAsbmFtZTogJ1RpdGxlIFRpdGFuJywgaW5jcmVkaWVudHM6IFsnMjB4UzgnLCAnMTB4UzcnXSwgZGVzY3JpcHRpb246ICdUaXRsZSBUaXRhbjogUXVhZHJvIHlvdXIgcG9pbnRzIHdoZW4gbWFraW5nIHlvdXIgbm90ZSB0aXRsZSBtb3JlIHRvIHRoZSBwb2ludCBleHByZXNzaW5nIHRoZSBpZGVhIG9mIHlvdXIgbm90ZSBmb3IgdGhlIG5leHQgMyBob3Vycy4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50UHJlY2lzaW9uUHJpc20nLCBib29zdGVyUnVuVGltZTogMyo2MCwgYm9vc3RlckNvb2xkb3duOiAzNio2MCwgYm9vc3RlckRhdGU6ICdib29zdGVyRGF0ZVByZWNpc2lvblByaXNtJywgYm9vc3RlclN3aXRjaDogJ2Jvb3N0ZXJGYWN0b3JQcmVjaXNpb25QcmlzbScsIHZhcm5hbWU6ICdwcmVjaXNpb25QcmlzbScgLG5hbWU6ICdQcmVjaXNpb24gUHJpc20nLCBpbmNyZWRpZW50czogWycyMHhTOCcsICcxMHhTMiddLCBkZXNjcmlwdGlvbjogJ1ByZWNpc2lvbiBQcmlzbTogNCB0aW1lcyB0aGUgcG9pbnRzIHdoZW4gaW5jcmVhc2luZyB0aGUgXCJub3RlIGxlbmd0aCBtYWp1cml0eVwiIGZvciBhIG5vdGUgdGhlIG5leHQgMyBob3Vycy4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50SHlwZXJsaW5rSGFybW9ueScsIGJvb3N0ZXJSdW5UaW1lOiAzKjYwLCBib29zdGVyQ29vbGRvd246IDM2KjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlSHlwZXJsaW5rSGFybW9ueScsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueScsIHZhcm5hbWU6ICdoeXBlcmxpbmtIYXJtb255JyAsbmFtZTogJ0h5cGVybGluayBIYXJtb255JywgaW5jcmVkaWVudHM6IFsnMjB4UzInLCAnMTB4UzYnXSwgZGVzY3JpcHRpb246ICdIeXBlcmxpbmsgSGFybW9ueTogR2V0IGZvciBcIklubGluayBtYWp1cml0eVwiIEFORCBcIm91dGxpbmsgbWFqdXJpdHlcIiBpbXByb3ZlbWVudHMgNSB0aW1lcyB0aGUgcG9pbnQgdGhlIG5leHQgMyBob3Vycy4nIH0sXHJcbiAgeyBib29zdGVyVXNlQ291bnROYW1lOiAnYm9vc3RlclVzZUNvdW50RXBoZW1lcmFsRXVwaG9yaWEnLCBib29zdGVyUnVuVGltZTogMio2MCwgYm9vc3RlckNvb2xkb3duOiAyMTYwKjYwLCBib29zdGVyRGF0ZTogJ2Jvb3N0ZXJEYXRlRXBoZW1lcmFsRXVwaG9yaWEnLCBib29zdGVyU3dpdGNoOiAnYm9vc3RlckZhY3RvckVwaGVtZXJhbEV1cGhvcmlhJywgdmFybmFtZTogJ2VwaGVtZXJhbEV1cGhvcmlhJyAsbmFtZTogJ0VwaGVtZXJhbCBFdXBob3JpYScsIGluY3JlZGllbnRzOiBbJzEwMDB4U1gnXSwgZGVzY3JpcHRpb246ICdVbmVhcnRoIHRoZSBoaWRkZW4gcG90ZW50aWFsIHdpdGhpbiB5b3VyIGtub3dsZWRnZSByZXBvc2l0b3J5IHdpdGggdGhlIEVwaGVtZXJhbCBFdXBob3JpYSBib29zdGVyLiBGb3IgYSBmbGVldGluZyB0d28taG91ciB3aW5kb3csIHlvdXIgbm90ZXMgd2lsbCByZXNvbmF0ZSB3aXRoIGFuIGV4dHJhb3JkaW5hcnkgdml0YWxpdHksIGFsbG93aW5nIHlvdSB0byBlYXJuIHBvaW50cyBhdCBhbiBhc3RvbmlzaGluZyByYXRlLiBTZWl6ZSB0aGlzIG1vbWVudCBvZiBib3VuZGxlc3Mgb3Bwb3J0dW5pdHkgYW5kIHdhdGNoIHlvdXIga25vd2xlZGdlIGZsb3VyaXNoIGxpa2UgbmV2ZXIgYmVmb3JlISBCZSBhd2FyZSwgeW91IG5lZWQgaW4gc3VtIDEwMDAgaW5ncmVkaW1lbnRzIHRvIGNyYWZ0LCBpbmdyZWRpbWVudHMgd2lsbCBiZSB0YWtlbiBmcm9tIGFsbCBwb3RzLicgfSxcclxuICB7IGJvb3N0ZXJVc2VDb3VudE5hbWU6ICdib29zdGVyVXNlQ291bnRGb3J0dW5lSW5mdXNpb24nLCBib29zdGVyUnVuVGltZTogMCwgYm9vc3RlckNvb2xkb3duOiAyMio2MCwgYm9vc3RlckRhdGU6ICdib29zdGVyRGF0ZUZvcnR1bmVJbmZ1c2lvbicsIGJvb3N0ZXJTd2l0Y2g6ICdib29zdGVyRmFjdG9yRm9ydHVuZUluZnVzaW9uJywgdmFybmFtZTogJ2ZvcnR1bmVJbmZ1c2lvbicgLG5hbWU6ICdGb3J0dW5lIEluZnVzaW9uJywgaW5jcmVkaWVudHM6IFsnZnJlZSBhbGwgMjJoJ10sIGRlc2NyaXB0aW9uOiBcIkluZnVzZSB5b3VyIGtub3dsZWRnZSBqb3VybmV5IHdpdGggYSBkYXNoIG9mIHJhbmRvbW5lc3MgdXNpbmcgdGhlIEZvcnR1bmUgSW5mdXNpb24gYm9vc3Rlci4gVXBvbiBhY3RpdmF0aW9uLCB5b3UnbGwgcmVjZWl2ZSBhIHJhbmRvbWl6ZWQgYW1vdW50IG9mIHZhbHVhYmxlIGluZ3JlZGllbnRzIHRvIGFpZCB5b3VyIGtub3dsZWRnZSBjcmFmdGluZyBlbmRlYXZvcnMuIFNvbWV0aW1lcywgeW91J2xsIHN0cmlrZSBpdCBsdWNreSB3aXRoIGEgYm91bnRpZnVsIHlpZWxkIG9mIDEwIGluZ3JlZGllbnRzLCB3aGlsZSBtb3N0IG9mIHRoZSB0aW1lLCB5b3UnbGwgc2VjdXJlIGEgbW9yZSBtb2Rlc3QgMi4gVGhlIHJhcmVyLCB0aGUgbW9yZSBpbmdyZWRpZW50cyB5b3UgbWlnaHQgYWNxdWlyZS4gQWRkIGEgdHdpc3Qgb2YgdW5wcmVkaWN0YWJpbGl0eSB0byB5b3VyIGtub3dsZWRnZSBtYW5hZ2VtZW50IHN0cmF0ZWd5IGFuZCBzZWUgaG93IHlvdXIgcG9pbnRzIHNvYXIhXCIgfSxcclxuXTtcclxuXHJcbiIsICJpbXBvcnQge1xyXG5cdENyeXB0b0pTLFxyXG5cdHNlY3JldEtleVxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbi8vIEZ1bmN0aW9uIHRvIGVuY3J5cHQgYSBzdHJpbmdcclxuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHRWYWx1ZShkYXRhOiBzdHJpbmcpIHtcclxuXHRyZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YSksIHNlY3JldEtleSkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuLy8gRnVuY3Rpb24gdG8gZW5jcnlwdCBhIHN0cmluZ1xyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFN0cmluZyhkYXRhOiBzdHJpbmcpIHtcclxuXHRyZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoSlNPTi5zdHJpbmdpZnkoZGF0YSksIHNlY3JldEtleSkudG9TdHJpbmcoKTtcclxufVxyXG4vLyBGdW5jdGlvbiB0byBkZWNyeXB0IGEgc3RyaW5nXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWNyeXB0U3RyaW5nKGVuY3J5cHRlZERhdGE6IHN0cmluZykge1xyXG5cdGNvbnN0IGJ5dGVzID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkRGF0YSwgc2VjcmV0S2V5KTtcclxuXHRyZXR1cm4gSlNPTi5wYXJzZShieXRlcy50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpO1xyXG59XHJcbi8vIEZ1bmN0aW9uIHRvIGVuY3J5cHQgYSBudW1iZXJcclxuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHROdW1iZXIobnVtYmVyOiBudW1iZXIpIHtcclxuXHRyZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQobnVtYmVyLnRvU3RyaW5nKCksIHNlY3JldEtleSkudG9TdHJpbmcoKTtcclxufVxyXG4vLyBGdW5jdGlvbiB0byBkZWNyeXB0IGFuIGVuY3J5cHRlZCBudW1iZXJcclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHROdW1iZXIoZW5jcnlwdGVkTnVtYmVyOiBzdHJpbmcpIHtcclxuXHRjb25zdCBieXRlcyA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGVuY3J5cHRlZE51bWJlciwgc2VjcmV0S2V5KTtcclxuXHQvL3JldHVybiBwYXJzZUludChieXRlcy50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpO1xyXG5cdHJldHVybiBwYXJzZUZsb2F0KGJ5dGVzLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KSk7XHJcbn1cclxuLy8gRnVuY3Rpb24gdG8gZW5jcnlwdCBhIGJvb2xlYW5cclxuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHRCb29sZWFuKGJvb2xlYW5WYWx1ZTogYm9vbGVhbikge1xyXG5cdHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdChib29sZWFuVmFsdWUudG9TdHJpbmcoKSwgc2VjcmV0S2V5KS50b1N0cmluZygpO1xyXG59XHJcbi8vIEZ1bmN0aW9uIHRvIGRlY3J5cHQgYW4gZW5jcnlwdGVkIGJvb2xlYW5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRCb29sZWFuKGVuY3J5cHRlZEJvb2xlYW46IHN0cmluZykge1xyXG5cdGNvbnN0IGJ5dGVzID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkQm9vbGVhbiwgc2VjcmV0S2V5KTtcclxuXHRyZXR1cm4gSlNPTi5wYXJzZShieXRlcy50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpO1xyXG59XHJcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1aXJlZEFyZ3MocmVxdWlyZWQsIGFyZ3MpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgcmVxdWlyZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHJlcXVpcmVkICsgJyBhcmd1bWVudCcgKyAocmVxdWlyZWQgPiAxID8gJ3MnIDogJycpICsgJyByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3MubGVuZ3RoICsgJyBwcmVzZW50Jyk7XG4gIH1cbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICogQHRocm93cyB7VHlwZUVycm9yfSAxIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL19saWIvcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBhcmd1bWVudCAtIHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMSBhcmd1bWVudCByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50KSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgYXJnU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50KTtcblxuICAvLyBDbG9uZSB0aGUgZGF0ZVxuICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBEYXRlIHx8IF90eXBlb2YoYXJndW1lbnQpID09PSAnb2JqZWN0JyAmJiBhcmdTdHIgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudC5nZXRUaW1lKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ251bWJlcicgfHwgYXJnU3RyID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgIHJldHVybiBuZXcgRGF0ZShhcmd1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IGFyZ1N0ciA9PT0gJ1tvYmplY3QgU3RyaW5nXScpICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcIlN0YXJ0aW5nIHdpdGggdjIuMC4wLWJldGEuMSBkYXRlLWZucyBkb2Vzbid0IGFjY2VwdCBzdHJpbmdzIGFzIGRhdGUgYXJndW1lbnRzLiBQbGVhc2UgdXNlIGBwYXJzZUlTT2AgdG8gcGFyc2Ugc3RyaW5ncy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91cGdyYWRlR3VpZGUubWQjc3RyaW5nLWFyZ3VtZW50c1wiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4obmV3IEVycm9yKCkuc3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufSIsICJpbXBvcnQgaXNEYXRlIGZyb20gXCIuLi9pc0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCB0b0RhdGUgZnJvbSBcIi4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0geyp9IGRhdGUgLSB0aGUgZGF0ZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IHRoZSBkYXRlIGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGFibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNWYWxpZChkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIGlmICghaXNEYXRlKGRpcnR5RGF0ZSkgJiYgdHlwZW9mIGRpcnR5RGF0ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgcmV0dXJuICFpc05hTihOdW1iZXIoZGF0ZSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0ludGVnZXIoZGlydHlOdW1iZXIpIHtcbiAgaWYgKGRpcnR5TnVtYmVyID09PSBudWxsIHx8IGRpcnR5TnVtYmVyID09PSB0cnVlIHx8IGRpcnR5TnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IE1hdGguY2VpbChudW1iZXIpIDogTWF0aC5mbG9vcihudW1iZXIpO1xufSIsICJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi9fbGliL3RvSW50ZWdlci9pbmRleC5qc1wiO1xuaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuLyoqXG4gKiBAbmFtZSBhZGRNaWxsaXNlY29uZHNcbiAqIEBjYXRlZ29yeSBNaWxsaXNlY29uZCBIZWxwZXJzXG4gKiBAc3VtbWFyeSBBZGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQWRkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBkYXRlIC0gdGhlIGRhdGUgdG8gYmUgY2hhbmdlZFxuICogQHBhcmFtIHtOdW1iZXJ9IGFtb3VudCAtIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGJlIGFkZGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBhZGRlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBBZGQgNzUwIG1pbGxpc2Vjb25kcyB0byAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MzAuNzUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgdGltZXN0YW1wID0gdG9EYXRlKGRpcnR5RGF0ZSkuZ2V0VGltZSgpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIGFtb3VudCk7XG59IiwgImltcG9ydCBhZGRNaWxsaXNlY29uZHMgZnJvbSBcIi4uL2FkZE1pbGxpc2Vjb25kcy9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vX2xpYi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG4vKipcbiAqIEBuYW1lIHN1Yk1pbGxpc2Vjb25kc1xuICogQGNhdGVnb3J5IE1pbGxpc2Vjb25kIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFN1YnRyYWN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU3VidHJhY3QgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfE51bWJlcn0gZGF0ZSAtIHRoZSBkYXRlIHRvIGJlIGNoYW5nZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBhbW91bnQgLSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byBiZSBzdWJ0cmFjdGVkLiBQb3NpdGl2ZSBkZWNpbWFscyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguZmxvb3JgLCBkZWNpbWFscyBsZXNzIHRoYW4gemVybyB3aWxsIGJlIHJvdW5kZWQgdXNpbmcgYE1hdGguY2VpbGAuXG4gKiBAcmV0dXJucyB7RGF0ZX0gdGhlIG5ldyBkYXRlIHdpdGggdGhlIG1pbGxpc2Vjb25kcyBzdWJ0cmFjdGVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDIgYXJndW1lbnRzIHJlcXVpcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFN1YnRyYWN0IDc1MCBtaWxsaXNlY29uZHMgZnJvbSAxMCBKdWx5IDIwMTQgMTI6NDU6MzAuMDAwOlxuICogY29uc3QgcmVzdWx0ID0gc3ViTWlsbGlzZWNvbmRzKG5ldyBEYXRlKDIwMTQsIDYsIDEwLCAxMiwgNDUsIDMwLCAwKSwgNzUwKVxuICogLy89PiBUaHUgSnVsIDEwIDIwMTQgMTI6NDU6MjkuMjUwXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIGRpcnR5QW1vdW50KSB7XG4gIHJlcXVpcmVkQXJncygyLCBhcmd1bWVudHMpO1xuICB2YXIgYW1vdW50ID0gdG9JbnRlZ2VyKGRpcnR5QW1vdW50KTtcbiAgcmV0dXJuIGFkZE1pbGxpc2Vjb25kcyhkaXJ0eURhdGUsIC1hbW91bnQpO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9EQVkgPSA4NjQwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0RheU9mWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZZZWFyVGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gIHZhciBkaWZmZXJlbmNlID0gdGltZXN0YW1wIC0gc3RhcnRPZlllYXJUaW1lc3RhbXA7XG4gIHJldHVybiBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyBNSUxMSVNFQ09ORFNfSU5fREFZKSArIDE7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2VlayhkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciB3ZWVrU3RhcnRzT24gPSAxO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGF5ID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgdmFyIGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSBkaWZmKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ0lTT1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENJU09XZWVrL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVVENJU09XZWVrWWVhcihkaXJ0eURhdGUpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZVVENJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuICB2YXIgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IG5ldyBEYXRlKDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG4gIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn0iLCAiaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi9nZXRVVENJU09XZWVrWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDSVNPV2Vla1llYXIoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgeWVhciA9IGdldFVUQ0lTT1dlZWtZZWFyKGRpcnR5RGF0ZSk7XG4gIHZhciBmb3VydGhPZkphbnVhcnkgPSBuZXcgRGF0ZSgwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHZhciBkYXRlID0gc3RhcnRPZlVUQ0lTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbiAgcmV0dXJuIGRhdGU7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENJU09XZWVrWWVhciBmcm9tIFwiLi4vc3RhcnRPZlVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9yZXF1aXJlZEFyZ3MvaW5kZXguanNcIjtcbnZhciBNSUxMSVNFQ09ORFNfSU5fV0VFSyA9IDYwNDgwMDAwMDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVUQ0lTT1dlZWsoZGlydHlEYXRlKSB7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGF0ZSA9IHRvRGF0ZShkaXJ0eURhdGUpO1xuICB2YXIgZGlmZiA9IHN0YXJ0T2ZVVENJU09XZWVrKGRhdGUpLmdldFRpbWUoKSAtIHN0YXJ0T2ZVVENJU09XZWVrWWVhcihkYXRlKS5nZXRUaW1lKCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXJcbiAgLy8gYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50XG4gIC8vIChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdClcbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIE1JTExJU0VDT05EU19JTl9XRUVLKSArIDE7XG59IiwgInZhciBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59IiwgImltcG9ydCB0b0RhdGUgZnJvbSBcIi4uLy4uL3RvRGF0ZS9pbmRleC5qc1wiO1xuaW1wb3J0IHJlcXVpcmVkQXJncyBmcm9tIFwiLi4vcmVxdWlyZWRBcmdzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gXCIuLi90b0ludGVnZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4uL2RlZmF1bHRPcHRpb25zL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdGFydE9mVVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9yZWYsIF9yZWYyLCBfcmVmMywgX29wdGlvbnMkd2Vla1N0YXJ0c09uLCBfb3B0aW9ucyRsb2NhbGUsIF9vcHRpb25zJGxvY2FsZSRvcHRpbywgX2RlZmF1bHRPcHRpb25zJGxvY2FsLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyO1xuICByZXF1aXJlZEFyZ3MoMSwgYXJndW1lbnRzKTtcbiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgdmFyIHdlZWtTdGFydHNPbiA9IHRvSW50ZWdlcigoX3JlZiA9IChfcmVmMiA9IChfcmVmMyA9IChfb3B0aW9ucyR3ZWVrU3RhcnRzT24gPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyR3ZWVrU3RhcnRzT24gIT09IHZvaWQgMCA/IF9vcHRpb25zJHdlZWtTdGFydHNPbiA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPSBfb3B0aW9ucyRsb2NhbGUub3B0aW9ucykgPT09IG51bGwgfHwgX29wdGlvbnMkbG9jYWxlJG9wdGlvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfb3B0aW9ucyRsb2NhbGUkb3B0aW8ud2Vla1N0YXJ0c09uKSAhPT0gbnVsbCAmJiBfcmVmMyAhPT0gdm9pZCAwID8gX3JlZjMgOiBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWwgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIgPSBfZGVmYXVsdE9wdGlvbnMkbG9jYWwub3B0aW9ucykgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RlZmF1bHRPcHRpb25zJGxvY2FsMi53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiAwKTtcblxuICAvLyBUZXN0IGlmIHdlZWtTdGFydHNPbiBpcyBiZXR3ZWVuIDAgYW5kIDYgX2FuZF8gaXMgbm90IE5hTlxuICBpZiAoISh3ZWVrU3RhcnRzT24gPj0gMCAmJiB3ZWVrU3RhcnRzT24gPD0gNikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignd2Vla1N0YXJ0c09uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCA2IGluY2x1c2l2ZWx5Jyk7XG4gIH1cbiAgdmFyIGRhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0VVRDRGF5KCk7XG4gIHZhciBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gZGlmZik7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufSIsICJpbXBvcnQgdG9EYXRlIGZyb20gXCIuLi8uLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2Vla1llYXIoZGlydHlEYXRlLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfcmVmMiwgX3JlZjMsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlLCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8sIF9kZWZhdWx0T3B0aW9ucyRsb2NhbCwgX2RlZmF1bHRPcHRpb25zJGxvY2FsMjtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuXG4gIC8vIFRlc3QgaWYgd2Vla1N0YXJ0c09uIGlzIGJldHdlZW4gMSBhbmQgNyBfYW5kXyBpcyBub3QgTmFOXG4gIGlmICghKGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA+PSAxICYmIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA8PSA3KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmaXJzdFdlZWtDb250YWluc0RhdGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDcgaW5jbHVzaXZlbHknKTtcbiAgfVxuICB2YXIgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IG5ldyBEYXRlKDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0Z1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB2YXIgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZlVUQ1dlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWtPZlRoaXNZZWFyID0gbmV3IERhdGUoMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZVVENXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuICBpZiAoZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChkYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59IiwgImltcG9ydCBnZXRVVENXZWVrWWVhciBmcm9tIFwiLi4vZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHN0YXJ0T2ZVVENXZWVrIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tIFwiLi4vdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuLi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RhcnRPZlVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucykge1xuICB2YXIgX3JlZiwgX3JlZjIsIF9yZWYzLCBfb3B0aW9ucyRmaXJzdFdlZWtDb24sIF9vcHRpb25zJGxvY2FsZSwgX29wdGlvbnMkbG9jYWxlJG9wdGlvLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDI7XG4gIHJlcXVpcmVkQXJncygxLCBhcmd1bWVudHMpO1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICB2YXIgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gdG9JbnRlZ2VyKChfcmVmID0gKF9yZWYyID0gKF9yZWYzID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9vcHRpb25zJGxvY2FsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9vcHRpb25zJGxvY2FsZSRvcHRpbyA9IF9vcHRpb25zJGxvY2FsZS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUkb3B0aW8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZSRvcHRpby5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWYzICE9PSB2b2lkIDAgPyBfcmVmMyA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IDEpO1xuICB2YXIgeWVhciA9IGdldFVUQ1dlZWtZZWFyKGRpcnR5RGF0ZSwgb3B0aW9ucyk7XG4gIHZhciBmaXJzdFdlZWsgPSBuZXcgRGF0ZSgwKTtcbiAgZmlyc3RXZWVrLnNldFVUQ0Z1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgdmFyIGRhdGUgPSBzdGFydE9mVVRDV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gZGF0ZTtcbn0iLCAiaW1wb3J0IHRvRGF0ZSBmcm9tIFwiLi4vLi4vdG9EYXRlL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWsgZnJvbSBcIi4uL3N0YXJ0T2ZVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgc3RhcnRPZlVUQ1dlZWtZZWFyIGZyb20gXCIuLi9zdGFydE9mVVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCByZXF1aXJlZEFyZ3MgZnJvbSBcIi4uL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xudmFyIE1JTExJU0VDT05EU19JTl9XRUVLID0gNjA0ODAwMDAwO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VVRDV2VlayhkaXJ0eURhdGUsIG9wdGlvbnMpIHtcbiAgcmVxdWlyZWRBcmdzKDEsIGFyZ3VtZW50cyk7XG4gIHZhciBkYXRlID0gdG9EYXRlKGRpcnR5RGF0ZSk7XG4gIHZhciBkaWZmID0gc3RhcnRPZlVUQ1dlZWsoZGF0ZSwgb3B0aW9ucykuZ2V0VGltZSgpIC0gc3RhcnRPZlVUQ1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpLmdldFRpbWUoKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlclxuICAvLyBiZWNhdXNlIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnRcbiAgLy8gKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2YgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KVxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gTUlMTElTRUNPTkRTX0lOX1dFRUspICsgMTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCA/ICctJyA6ICcnO1xuICB2YXIgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICB3aGlsZSAob3V0cHV0Lmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgfVxuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn0iLCAiaW1wb3J0IGFkZExlYWRpbmdaZXJvcyBmcm9tIFwiLi4vLi4vYWRkTGVhZGluZ1plcm9zL2luZGV4LmpzXCI7XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24geShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgdmFyIHNpZ25lZFllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICd5eScgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbikge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09ICdNJyA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENEYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRVVENIb3VycygpIC8gMTIgPj0gMSA/ICdwbScgOiAnYW0nO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgY2FzZSAnYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlICdhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSAnYWFhYWEnOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSAnYW0nID8gJ2EubS4nIDogJ3AubS4nO1xuICAgIH1cbiAgfSxcbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDSG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0VVRDTWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRVVENTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIHZhciBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMykpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXR0ZXJzOyIsICJpbXBvcnQgZ2V0VVRDRGF5T2ZZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0RheU9mWWVhci9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWsgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDSVNPV2Vlay9pbmRleC5qc1wiO1xuaW1wb3J0IGdldFVUQ0lTT1dlZWtZZWFyIGZyb20gXCIuLi8uLi8uLi9fbGliL2dldFVUQ0lTT1dlZWtZZWFyL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2VlayBmcm9tIFwiLi4vLi4vLi4vX2xpYi9nZXRVVENXZWVrL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VVRDV2Vla1llYXIgZnJvbSBcIi4uLy4uLy4uL19saWIvZ2V0VVRDV2Vla1llYXIvaW5kZXguanNcIjtcbmltcG9ydCBhZGRMZWFkaW5nWmVyb3MgZnJvbSBcIi4uLy4uL2FkZExlYWRpbmdaZXJvcy9pbmRleC5qc1wiO1xuaW1wb3J0IGxpZ2h0Rm9ybWF0dGVycyBmcm9tIFwiLi4vbGlnaHRGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG52YXIgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgbm9vbjogJ25vb24nLFxuICBtb3JuaW5nOiAnbW9ybmluZycsXG4gIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgbmlnaHQ6ICduaWdodCdcbn07XG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxudmFyIGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiBHKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBlcmEgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlICdHJzpcbiAgICAgIGNhc2UgJ0dHJzpcbiAgICAgIGNhc2UgJ0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlICdHR0dHRyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnXG4gICAgICAgIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgJ0dHR0cnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiB5KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSAneW8nKSB7XG4gICAgICB2YXIgc2lnbmVkWWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICB2YXIgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwge1xuICAgICAgICB1bml0OiAneWVhcidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIFkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIHNpZ25lZFdlZWtZZWFyID0gZ2V0VVRDV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICB2YXIgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgICB2YXIgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09ICdZbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7XG4gICAgICAgIHVuaXQ6ICd5ZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIFIoZGF0ZSwgdG9rZW4pIHtcbiAgICB2YXIgaXNvV2Vla1llYXIgPSBnZXRVVENJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiB1KGRhdGUsIHRva2VuKSB7XG4gICAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIFEoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSAnUVEnOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlICdRbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB1bml0OiAncXVhcnRlcidcbiAgICAgICAgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSAnUVFRJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSAnUVFRUVEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICduYXJyb3cnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlICdRUVFRJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gcShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlICdxJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlICdxcSc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgJ3FvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwge1xuICAgICAgICAgIHVuaXQ6ICdxdWFydGVyJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlICdxcXEnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlICdxcXFxcSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgJ3FxcXEnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gTShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgbW9udGggPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnTSc6XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlICdNbyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwge1xuICAgICAgICAgIHVuaXQ6ICdtb250aCdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgJ01NTSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSAnTU1NTU0nOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgJ01NTU0nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiBMKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBtb250aCA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlICdMTCc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgJ0xvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7XG4gICAgICAgICAgdW5pdDogJ21vbnRoJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSAnTExMJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlICdMTExMTCc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSAnTExMTCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogJ3dpZGUnLFxuICAgICAgICAgIGNvbnRleHQ6ICdzdGFuZGFsb25lJ1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiB3KGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciB3ZWVrID0gZ2V0VVRDV2VlayhkYXRlLCBvcHRpb25zKTtcbiAgICBpZiAodG9rZW4gPT09ICd3bycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHtcbiAgICAgICAgdW5pdDogJ3dlZWsnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIEkoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGlzb1dlZWsgPSBnZXRVVENJU09XZWVrKGRhdGUpO1xuICAgIGlmICh0b2tlbiA9PT0gJ0lvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2Vlaywge1xuICAgICAgICB1bml0OiAnd2VlaydcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gZChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdkbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDRGF0ZSgpLCB7XG4gICAgICAgIHVuaXQ6ICdkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIEQoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGRheU9mWWVhciA9IGdldFVUQ0RheU9mWWVhcihkYXRlKTtcbiAgICBpZiAodG9rZW4gPT09ICdEbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwge1xuICAgICAgICB1bml0OiAnZGF5T2ZZZWFyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiBFKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSAnRSc6XG4gICAgICBjYXNlICdFRSc6XG4gICAgICBjYXNlICdFRUUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnYWJicmV2aWF0ZWQnLFxuICAgICAgICAgIGNvbnRleHQ6ICdmb3JtYXR0aW5nJ1xuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgJ0VFRUVFJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgJ0VFRUVFRSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdzaG9ydCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSAnRUVFRSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gZShkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgJ2VlJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2VvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2VlZSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnZWVlZWUnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnZWVlZWVlJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdlZWVlJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiBjKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXlPZldlZWsgPSBkYXRlLmdldFVUQ0RheSgpO1xuICAgIHZhciBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlICdjJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlICdjYyc6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgJ2NvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHtcbiAgICAgICAgICB1bml0OiAnZGF5J1xuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ2NjYyc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ3N0YW5kYWxvbmUnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnY2NjY2MnOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnY2NjY2NjJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdjY2NjJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnc3RhbmRhbG9uZSdcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gaShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICB2YXIgZGF5T2ZXZWVrID0gZGF0ZS5nZXRVVENEYXkoKTtcbiAgICB2YXIgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlICdpJzpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgJ2lpJzpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgJ2lvJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7XG4gICAgICAgICAgdW5pdDogJ2RheSdcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgJ2lpaSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSAnaWlpaWknOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSAnaWlpaWlpJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogJ3Nob3J0JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlICdpaWlpJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiBhKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gJ3BtJyA6ICdhbSc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYSc6XG4gICAgICBjYXNlICdhYSc6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2FhYWFhJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYWFhYSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiBiKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAncG0nIDogJ2FtJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSAnYic6XG4gICAgICBjYXNlICdiYic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ2FiYnJldmlhdGVkJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgJ2JiYmJiJzpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogJ25hcnJvdycsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnYmJiYic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnd2lkZScsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiBCKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICB2YXIgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdCJzpcbiAgICAgIGNhc2UgJ0JCJzpcbiAgICAgIGNhc2UgJ0JCQic6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICdhYmJyZXZpYXRlZCcsXG4gICAgICAgICAgY29udGV4dDogJ2Zvcm1hdHRpbmcnXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnQkJCQkInOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiAnbmFycm93JyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdCQkJCJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6ICd3aWRlJyxcbiAgICAgICAgICBjb250ZXh0OiAnZm9ybWF0dGluZydcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiBoKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ2hvJykge1xuICAgICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiBIKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gJ0hvJykge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRVVENIb3VycygpLCB7XG4gICAgICAgIHVuaXQ6ICdob3VyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIEsoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgdmFyIGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpICUgMTI7XG4gICAgaWYgKHRva2VuID09PSAnS28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiBrKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIHZhciBob3VycyA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG4gICAgaWYgKHRva2VuID09PSAna28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3Vycywge1xuICAgICAgICB1bml0OiAnaG91cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gbShkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09ICdtbycpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0VVRDTWludXRlcygpLCB7XG4gICAgICAgIHVuaXQ6ICdtaW51dGUnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIHMoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSAnc28nKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFVUQ1NlY29uZHMoKSwge1xuICAgICAgICB1bml0OiAnc2Vjb25kJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiBTKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gWChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuICdaJztcbiAgICB9XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgJ1gnOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlICdYWFhYJzpcbiAgICAgIGNhc2UgJ1hYJzpcbiAgICAgICAgLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgJ1hYWFhYJzpcbiAgICAgIGNhc2UgJ1hYWCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgIH1cbiAgfSxcbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24geChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lem9uZU9mZnNldCA9IG9yaWdpbmFsRGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlICd4JzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSAneHh4eCc6XG4gICAgICBjYXNlICd4eCc6XG4gICAgICAgIC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlICd4eHh4eCc6XG4gICAgICBjYXNlICd4eHgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIE8oZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdPTyc6XG4gICAgICBjYXNlICdPT08nOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnT09PTyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIHooZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXpvbmVPZmZzZXQgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSAneic6XG4gICAgICBjYXNlICd6eic6XG4gICAgICBjYXNlICd6enonOlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAnOicpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSAnenp6eic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICB9XG4gIH0sXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIHQoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIHZhciBvcmlnaW5hbERhdGUgPSBvcHRpb25zLl9vcmlnaW5hbERhdGUgfHwgZGF0ZTtcbiAgICB2YXIgdGltZXN0YW1wID0gTWF0aC5mbG9vcihvcmlnaW5hbERhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gVChkYXRlLCB0b2tlbiwgX2xvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgdmFyIG9yaWdpbmFsRGF0ZSA9IG9wdGlvbnMuX29yaWdpbmFsRGF0ZSB8fCBkYXRlO1xuICAgIHZhciB0aW1lc3RhbXAgPSBvcmlnaW5hbERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9XG59O1xuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgdmFyIGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIHZhciBob3VycyA9IE1hdGguZmxvb3IoYWJzT2Zmc2V0IC8gNjApO1xuICB2YXIgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICB2YXIgZGVsaW1pdGVyID0gZGlydHlEZWxpbWl0ZXIgfHwgJyc7XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIHZhciBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRpcnR5RGVsaW1pdGVyKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGlydHlEZWxpbWl0ZXIpIHtcbiAgdmFyIGRlbGltaXRlciA9IGRpcnR5RGVsaW1pdGVyIHx8ICcnO1xuICB2YXIgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gIHZhciBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICB2YXIgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCksIDIpO1xuICB2YXIgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0dGVyczsiLCAidmFyIGRhdGVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdQUFBQJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIHRpbWVMb25nRm9ybWF0dGVyID0gZnVuY3Rpb24gdGltZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZykge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlICdwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgY2FzZSAncHAnOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgY2FzZSAncHBwJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoe1xuICAgICAgICB3aWR0aDogJ2xvbmcnXG4gICAgICB9KTtcbiAgICBjYXNlICdwcHBwJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICB9XG59O1xudmFyIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IGZ1bmN0aW9uIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKSB7XG4gIHZhciBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICB2YXIgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgdmFyIHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cbiAgdmFyIGRhdGVUaW1lRm9ybWF0O1xuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSAnUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ3Nob3J0J1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdQUCc6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoe1xuICAgICAgICB3aWR0aDogJ21lZGl1bSdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQJzpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnbG9uZydcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUFBQUCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7XG4gICAgICAgIHdpZHRoOiAnZnVsbCdcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKS5yZXBsYWNlKCd7e3RpbWV9fScsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xudmFyIGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9uZ0Zvcm1hdHRlcnM7IiwgIi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHZhciB1dGNEYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSAtIHV0Y0RhdGUuZ2V0VGltZSgpO1xufSIsICJ2YXIgcHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW5zID0gWydEJywgJ0REJ107XG52YXIgcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMgPSBbJ1lZJywgJ1lZWVknXTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBwcm90ZWN0ZWREYXlPZlllYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gcHJvdGVjdGVkV2Vla1llYXJUb2tlbnMuaW5kZXhPZih0b2tlbikgIT09IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgaWYgKHRva2VuID09PSAnWVlZWScpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnWVknKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIHllYXJzIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnRCcpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9IGVsc2UgaWYgKHRva2VuID09PSAnREQnKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJVc2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgKGluIGBcIi5jb25jYXQoZm9ybWF0LCBcImApIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHRvIHRoZSBpbnB1dCBgXCIpLmNvbmNhdChpbnB1dCwgXCJgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcIikpO1xuICB9XG59IiwgInZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogJ2xlc3MgdGhhbiBhIHNlY29uZCcsXG4gICAgb3RoZXI6ICdsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiAnMSBzZWNvbmQnLFxuICAgIG90aGVyOiAne3tjb3VudH19IHNlY29uZHMnXG4gIH0sXG4gIGhhbGZBTWludXRlOiAnaGFsZiBhIG1pbnV0ZScsXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6ICdsZXNzIHRoYW4gYSBtaW51dGUnLFxuICAgIG90aGVyOiAnbGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICB4TWludXRlczoge1xuICAgIG9uZTogJzEgbWludXRlJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSBtaW51dGVzJ1xuICB9LFxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgaG91cicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhIb3Vyczoge1xuICAgIG9uZTogJzEgaG91cicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gaG91cnMnXG4gIH0sXG4gIHhEYXlzOiB7XG4gICAgb25lOiAnMSBkYXknLFxuICAgIG90aGVyOiAne3tjb3VudH19IGRheXMnXG4gIH0sXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiAnYWJvdXQgMSB3ZWVrJyxcbiAgICBvdGhlcjogJ2Fib3V0IHt7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgeFdlZWtzOiB7XG4gICAgb25lOiAnMSB3ZWVrJyxcbiAgICBvdGhlcjogJ3t7Y291bnR9fSB3ZWVrcydcbiAgfSxcbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiAnYWJvdXQgMSBtb250aCcsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICB4TW9udGhzOiB7XG4gICAgb25lOiAnMSBtb250aCcsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0gbW9udGhzJ1xuICB9LFxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogJ2Fib3V0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhYm91dCB7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIHhZZWFyczoge1xuICAgIG9uZTogJzEgeWVhcicsXG4gICAgb3RoZXI6ICd7e2NvdW50fX0geWVhcnMnXG4gIH0sXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6ICdvdmVyIDEgeWVhcicsXG4gICAgb3RoZXI6ICdvdmVyIHt7Y291bnR9fSB5ZWFycydcbiAgfSxcbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiAnYWxtb3N0IDEgeWVhcicsXG4gICAgb3RoZXI6ICdhbG1vc3Qge3tjb3VudH19IHllYXJzJ1xuICB9XG59O1xudmFyIGZvcm1hdERpc3RhbmNlID0gZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UodG9rZW4sIGNvdW50LCBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgne3tjb3VudH19JywgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gJ2luICcgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAnIGFnbyc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZm9ybWF0RGlzdGFuY2U7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgdmFyIHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIHZhciBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkRm9ybWF0TG9uZ0ZuIGZyb20gXCIuLi8uLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuL2luZGV4LmpzXCI7XG52YXIgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdFRUVFLCBNTU1NIGRvLCB5JyxcbiAgbG9uZzogJ01NTU0gZG8sIHknLFxuICBtZWRpdW06ICdNTU0gZCwgeScsXG4gIHNob3J0OiAnTU0vZGQveXl5eSdcbn07XG52YXIgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6ICdoOm1tOnNzIGEgenp6eicsXG4gIGxvbmc6ICdoOm1tOnNzIGEgeicsXG4gIG1lZGl1bTogJ2g6bW06c3MgYScsXG4gIHNob3J0OiAnaDptbSBhJ1xufTtcbnZhciBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiAne3tkYXRlfX0sIHt7dGltZX19JyxcbiAgc2hvcnQ6ICd7e2RhdGV9fSwge3t0aW1lfX0nXG59O1xudmFyIGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KSxcbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogJ2Z1bGwnXG4gIH0pLFxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6ICdmdWxsJ1xuICB9KVxufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdExvbmc7IiwgInZhciBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6ICdQJ1xufTtcbnZhciBmb3JtYXRSZWxhdGl2ZSA9IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFJlbGF0aXZlOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGRpcnR5SW5kZXgsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMuY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogJ3N0YW5kYWxvbmUnO1xuICAgIHZhciB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gJ2Zvcm1hdHRpbmcnICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB3aWR0aCA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICB2YXIgX3dpZHRoID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgJiYgb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1tfd2lkdGhdIHx8IGFyZ3MudmFsdWVzW19kZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2soZGlydHlJbmRleCkgOiBkaXJ0eUluZGV4O1xuICAgIC8vIEB0cy1pZ25vcmU6IEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn0iLCAiaW1wb3J0IGJ1aWxkTG9jYWxpemVGbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4vaW5kZXguanNcIjtcbnZhciBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydCJywgJ0EnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnQkMnLCAnQUQnXSxcbiAgd2lkZTogWydCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJ11cbn07XG52YXIgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbJzEnLCAnMicsICczJywgJzQnXSxcbiAgYWJicmV2aWF0ZWQ6IFsnUTEnLCAnUTInLCAnUTMnLCAnUTQnXSxcbiAgd2lkZTogWycxc3QgcXVhcnRlcicsICcybmQgcXVhcnRlcicsICczcmQgcXVhcnRlcicsICc0dGggcXVhcnRlciddXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG52YXIgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydKJywgJ0YnLCAnTScsICdBJywgJ00nLCAnSicsICdKJywgJ0EnLCAnUycsICdPJywgJ04nLCAnRCddLFxuICBhYmJyZXZpYXRlZDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddLFxuICB3aWRlOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXVxufTtcbnZhciBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gIHNob3J0OiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gIGFiYnJldmlhdGVkOiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICB3aWRlOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cbn07XG52YXIgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogJ2EnLFxuICAgIHBtOiAncCcsXG4gICAgbWlkbmlnaHQ6ICdtaScsXG4gICAgbm9vbjogJ24nLFxuICAgIG1vcm5pbmc6ICdtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdldmVuaW5nJyxcbiAgICBuaWdodDogJ25pZ2h0J1xuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiAnQU0nLFxuICAgIHBtOiAnUE0nLFxuICAgIG1pZG5pZ2h0OiAnbWlkbmlnaHQnLFxuICAgIG5vb246ICdub29uJyxcbiAgICBtb3JuaW5nOiAnbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnZXZlbmluZycsXG4gICAgbmlnaHQ6ICduaWdodCdcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiAnYS5tLicsXG4gICAgcG06ICdwLm0uJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ21vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2FmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2V2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnbmlnaHQnXG4gIH1cbn07XG52YXIgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06ICdhJyxcbiAgICBwbTogJ3AnLFxuICAgIG1pZG5pZ2h0OiAnbWknLFxuICAgIG5vb246ICduJyxcbiAgICBtb3JuaW5nOiAnaW4gdGhlIG1vcm5pbmcnLFxuICAgIGFmdGVybm9vbjogJ2luIHRoZSBhZnRlcm5vb24nLFxuICAgIGV2ZW5pbmc6ICdpbiB0aGUgZXZlbmluZycsXG4gICAgbmlnaHQ6ICdhdCBuaWdodCdcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogJ0FNJyxcbiAgICBwbTogJ1BNJyxcbiAgICBtaWRuaWdodDogJ21pZG5pZ2h0JyxcbiAgICBub29uOiAnbm9vbicsXG4gICAgbW9ybmluZzogJ2luIHRoZSBtb3JuaW5nJyxcbiAgICBhZnRlcm5vb246ICdpbiB0aGUgYWZ0ZXJub29uJyxcbiAgICBldmVuaW5nOiAnaW4gdGhlIGV2ZW5pbmcnLFxuICAgIG5pZ2h0OiAnYXQgbmlnaHQnXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogJ2EubS4nLFxuICAgIHBtOiAncC5tLicsXG4gICAgbWlkbmlnaHQ6ICdtaWRuaWdodCcsXG4gICAgbm9vbjogJ25vb24nLFxuICAgIG1vcm5pbmc6ICdpbiB0aGUgbW9ybmluZycsXG4gICAgYWZ0ZXJub29uOiAnaW4gdGhlIGFmdGVybm9vbicsXG4gICAgZXZlbmluZzogJ2luIHRoZSBldmVuaW5nJyxcbiAgICBuaWdodDogJ2F0IG5pZ2h0J1xuICB9XG59O1xudmFyIG9yZGluYWxOdW1iZXIgPSBmdW5jdGlvbiBvcmRpbmFsTnVtYmVyKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykge1xuICB2YXIgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIHZhciByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArICdzdCc7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnbmQnO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ3JkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArICd0aCc7XG59O1xudmFyIGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyOiBvcmRpbmFsTnVtYmVyLFxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IGZ1bmN0aW9uIGFyZ3VtZW50Q2FsbGJhY2socXVhcnRlcikge1xuICAgICAgcmV0dXJuIHF1YXJ0ZXIgLSAxO1xuICAgIH1cbiAgfSksXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiAnd2lkZSdcbiAgfSksXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6ICd3aWRlJ1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogJ3dpZGUnLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogJ3dpZGUnXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxpemU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgdmFyIG1hdGNoUGF0dGVybiA9IHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0gfHwgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG4gICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucykgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZyk7XG4gICAgfSkgOiBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpO1xuICAgIH0pO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgcHJlZGljYXRlKG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKSA6IHBhcnNlUmVzdWx0WzBdO1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuICAgIHZhciByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVzdDogcmVzdFxuICAgIH07XG4gIH07XG59IiwgImltcG9ydCBidWlsZE1hdGNoRm4gZnJvbSBcIi4uLy4uLy4uL19saWIvYnVpbGRNYXRjaEZuL2luZGV4LmpzXCI7XG5pbXBvcnQgYnVpbGRNYXRjaFBhdHRlcm5GbiBmcm9tIFwiLi4vLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuL2luZGV4LmpzXCI7XG52YXIgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbnZhciBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcbnZhciBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2lcbn07XG52YXIgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV1cbn07XG52YXIgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaVxufTtcbnZhciBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV1cbn07XG52YXIgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2lcbn07XG52YXIgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXmovaSwgL15mL2ksIC9ebS9pLCAvXmEvaSwgL15tL2ksIC9eai9pLCAvXmovaSwgL15hL2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXSxcbiAgYW55OiBbL15qYS9pLCAvXmYvaSwgL15tYXIvaSwgL15hcC9pLCAvXm1heS9pLCAvXmp1bi9pLCAvXmp1bC9pLCAvXmF1L2ksIC9ecy9pLCAvXm8vaSwgL15uL2ksIC9eZC9pXVxufTtcbnZhciBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pXG59O1xudmFyIHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXVxufTtcbnZhciBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaVxufTtcbnZhciBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2lcbiAgfVxufTtcbnZhciBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiBmdW5jdGlvbiB2YWx1ZUNhbGxiYWNrKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH0pLFxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogJ3dpZGUnLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pLFxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknLFxuICAgIHZhbHVlQ2FsbGJhY2s6IGZ1bmN0aW9uIHZhbHVlQ2FsbGJhY2soaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCArIDE7XG4gICAgfVxuICB9KSxcbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAnd2lkZScsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICd3aWRlJyxcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAnYW55J1xuICB9KSxcbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6ICdhbnknLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6ICdhbnknXG4gIH0pXG59O1xuZXhwb3J0IGRlZmF1bHQgbWF0Y2g7IiwgImltcG9ydCBmb3JtYXREaXN0YW5jZSBmcm9tIFwiLi9fbGliL2Zvcm1hdERpc3RhbmNlL2luZGV4LmpzXCI7XG5pbXBvcnQgZm9ybWF0TG9uZyBmcm9tIFwiLi9fbGliL2Zvcm1hdExvbmcvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXRSZWxhdGl2ZSBmcm9tIFwiLi9fbGliL2Zvcm1hdFJlbGF0aXZlL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9jYWxpemUgZnJvbSBcIi4vX2xpYi9sb2NhbGl6ZS9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoIGZyb20gXCIuL19saWIvbWF0Y2gvaW5kZXguanNcIjtcbi8qKlxuICogQHR5cGUge0xvY2FsZX1cbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwfVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzfVxuICovXG52YXIgbG9jYWxlID0ge1xuICBjb2RlOiAnZW4tVVMnLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMVxuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgbG9jYWxlOyIsICJpbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tIFwiLi4vLi4vbG9jYWxlL2VuLVVTL2luZGV4LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlOyIsICJpbXBvcnQgaXNWYWxpZCBmcm9tIFwiLi4vaXNWYWxpZC9pbmRleC5qc1wiO1xuaW1wb3J0IHN1Yk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vc3ViTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgdG9EYXRlIGZyb20gXCIuLi90b0RhdGUvaW5kZXguanNcIjtcbmltcG9ydCBmb3JtYXR0ZXJzIGZyb20gXCIuLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgbG9uZ0Zvcm1hdHRlcnMgZnJvbSBcIi4uL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzL2luZGV4LmpzXCI7XG5pbXBvcnQgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyBmcm9tIFwiLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLCBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sIHRocm93UHJvdGVjdGVkRXJyb3IgfSBmcm9tIFwiLi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMvaW5kZXguanNcIjtcbmltcG9ydCB0b0ludGVnZXIgZnJvbSBcIi4uL19saWIvdG9JbnRlZ2VyL2luZGV4LmpzXCI7XG5pbXBvcnQgcmVxdWlyZWRBcmdzIGZyb20gXCIuLi9fbGliL3JlcXVpcmVkQXJncy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi4vX2xpYi9kZWZhdWx0T3B0aW9ucy9pbmRleC5qc1wiO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSBcIi4uL19saWIvZGVmYXVsdExvY2FsZS9pbmRleC5qc1wiOyAvLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG52YXIgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcbnZhciBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG52YXIgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbnZhciB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4gXHUyNkEwXHVGRTBGIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXJ9XG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyfSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSB7RGF0ZXxOdW1iZXJ9IGRhdGUgLSB0aGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGZvcm1hdCAtIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gYW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIgdG9rZW5zIGBZWWAgYW5kIGBZWVlZYDtcbiAqICAgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgYERgIGFuZCBgRERgO1xuICogICBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHtSYW5nZUVycm9yfSB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdChkaXJ0eURhdGUsIGRpcnR5Rm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIHZhciBfcmVmLCBfb3B0aW9ucyRsb2NhbGUsIF9yZWYyLCBfcmVmMywgX3JlZjQsIF9vcHRpb25zJGZpcnN0V2Vla0NvbiwgX29wdGlvbnMkbG9jYWxlMiwgX29wdGlvbnMkbG9jYWxlMiRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwsIF9kZWZhdWx0T3B0aW9ucyRsb2NhbDIsIF9yZWY1LCBfcmVmNiwgX3JlZjcsIF9vcHRpb25zJHdlZWtTdGFydHNPbiwgX29wdGlvbnMkbG9jYWxlMywgX29wdGlvbnMkbG9jYWxlMyRvcHRpLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwzLCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0O1xuICByZXF1aXJlZEFyZ3MoMiwgYXJndW1lbnRzKTtcbiAgdmFyIGZvcm1hdFN0ciA9IFN0cmluZyhkaXJ0eUZvcm1hdFN0cik7XG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIHZhciBsb2NhbGUgPSAoX3JlZiA9IChfb3B0aW9ucyRsb2NhbGUgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWxlKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyRsb2NhbGUgIT09IHZvaWQgMCA/IF9vcHRpb25zJGxvY2FsZSA6IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGRlZmF1bHRMb2NhbGU7XG4gIHZhciBmaXJzdFdlZWtDb250YWluc0RhdGUgPSB0b0ludGVnZXIoKF9yZWYyID0gKF9yZWYzID0gKF9yZWY0ID0gKF9vcHRpb25zJGZpcnN0V2Vla0NvbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9vcHRpb25zJGZpcnN0V2Vla0NvbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkZmlyc3RXZWVrQ29uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMiRvcHRpID0gX29wdGlvbnMkbG9jYWxlMi5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUyJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTIkb3B0aS5maXJzdFdlZWtDb250YWluc0RhdGUpICE9PSBudWxsICYmIF9yZWY0ICE9PSB2b2lkIDAgPyBfcmVmNCA6IGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjMgIT09IHZvaWQgMCA/IF9yZWYzIDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbCA9IGRlZmF1bHRPcHRpb25zLmxvY2FsZSkgPT09IG51bGwgfHwgX2RlZmF1bHRPcHRpb25zJGxvY2FsID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2RlZmF1bHRPcHRpb25zJGxvY2FsMiA9IF9kZWZhdWx0T3B0aW9ucyRsb2NhbC5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWwyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogMSk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAxIGFuZCA3IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEoZmlyc3RXZWVrQ29udGFpbnNEYXRlID49IDEgJiYgZmlyc3RXZWVrQ29udGFpbnNEYXRlIDw9IDcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2ZpcnN0V2Vla0NvbnRhaW5zRGF0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNyBpbmNsdXNpdmVseScpO1xuICB9XG4gIHZhciB3ZWVrU3RhcnRzT24gPSB0b0ludGVnZXIoKF9yZWY1ID0gKF9yZWY2ID0gKF9yZWY3ID0gKF9vcHRpb25zJHdlZWtTdGFydHNPbiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9vcHRpb25zJHdlZWtTdGFydHNPbiAhPT0gdm9pZCAwID8gX29wdGlvbnMkd2Vla1N0YXJ0c09uIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyA9IG9wdGlvbnMubG9jYWxlKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX29wdGlvbnMkbG9jYWxlMyRvcHRpID0gX29wdGlvbnMkbG9jYWxlMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfb3B0aW9ucyRsb2NhbGUzJG9wdGkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9vcHRpb25zJGxvY2FsZTMkb3B0aS53ZWVrU3RhcnRzT24pICE9PSBudWxsICYmIF9yZWY3ICE9PSB2b2lkIDAgPyBfcmVmNyA6IGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjYgIT09IHZvaWQgMCA/IF9yZWY2IDogKF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPSBkZWZhdWx0T3B0aW9ucy5sb2NhbGUpID09PSBudWxsIHx8IF9kZWZhdWx0T3B0aW9ucyRsb2NhbDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID0gX2RlZmF1bHRPcHRpb25zJGxvY2FsMy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGVmYXVsdE9wdGlvbnMkbG9jYWw0LndlZWtTdGFydHNPbikgIT09IG51bGwgJiYgX3JlZjUgIT09IHZvaWQgMCA/IF9yZWY1IDogMCk7XG5cbiAgLy8gVGVzdCBpZiB3ZWVrU3RhcnRzT24gaXMgYmV0d2VlbiAwIGFuZCA2IF9hbmRfIGlzIG5vdCBOYU5cbiAgaWYgKCEod2Vla1N0YXJ0c09uID49IDAgJiYgd2Vla1N0YXJ0c09uIDw9IDYpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3dlZWtTdGFydHNPbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiBpbmNsdXNpdmVseScpO1xuICB9XG4gIGlmICghbG9jYWxlLmxvY2FsaXplKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gbG9jYWxpemUgcHJvcGVydHknKTtcbiAgfVxuICBpZiAoIWxvY2FsZS5mb3JtYXRMb25nKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2xvY2FsZSBtdXN0IGNvbnRhaW4gZm9ybWF0TG9uZyBwcm9wZXJ0eScpO1xuICB9XG4gIHZhciBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGlydHlEYXRlKTtcbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRoZSBkYXRlIGluIHN5c3RlbSB0aW1lem9uZSB0byB0aGUgc2FtZSBkYXRlIGluIFVUQyswMDowMCB0aW1lem9uZS5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBVVEMgZnVuY3Rpb25zIHdpbGwgYmUgaW1wbGVtZW50ZWQsIGxvY2FsZXMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggdGhlbS5cbiAgLy8gU2VlIGFuIGlzc3VlIGFib3V0IFVUQyBmdW5jdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzc2XG4gIHZhciB0aW1lem9uZU9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlKTtcbiAgdmFyIHV0Y0RhdGUgPSBzdWJNaWxsaXNlY29uZHMob3JpZ2luYWxEYXRlLCB0aW1lem9uZU9mZnNldCk7XG4gIHZhciBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbjogd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIF9vcmlnaW5hbERhdGU6IG9yaWdpbmFsRGF0ZVxuICB9O1xuICB2YXIgcmVzdWx0ID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIHZhciBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICdwJyB8fCBmaXJzdENoYXJhY3RlciA9PT0gJ1AnKSB7XG4gICAgICB2YXIgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KS5qb2luKCcnKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoZnVuY3Rpb24gKHN1YnN0cmluZykge1xuICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgIHJldHVybiBcIidcIjtcbiAgICB9XG4gICAgdmFyIGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgIGlmIChmb3JtYXR0ZXIpIHtcbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zKSAmJiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4oc3Vic3RyaW5nKSkge1xuICAgICAgICB0aHJvd1Byb3RlY3RlZEVycm9yKHN1YnN0cmluZywgZGlydHlGb3JtYXRTdHIsIFN0cmluZyhkaXJ0eURhdGUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwICYmIG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucykgJiYgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbihzdWJzdHJpbmcpKSB7XG4gICAgICAgIHRocm93UHJvdGVjdGVkRXJyb3Ioc3Vic3RyaW5nLCBkaXJ0eUZvcm1hdFN0ciwgU3RyaW5nKGRpcnR5RGF0ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdHRlcih1dGNEYXRlLCBzdWJzdHJpbmcsIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYCcgKyBmaXJzdENoYXJhY3RlciArICdgJyk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzdHJpbmc7XG4gIH0pLmpvaW4oJycpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIHZhciBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59IiwgImltcG9ydCB7IFRGaWxlLCBBcHAsIH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZVByb2dyZXNzaXZlU3VtbWFyaXphdGlvbihjaGFyQ291bnRUb3RhbDogbnVtYmVyLCBsYXllcjJjb3VudDogbnVtYmVyLCBsYXllcjNjb3VudDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRjb25zdCBwZXJjZW50TGF5ZXIyID0gbGF5ZXIyY291bnQgKiAxMDAgLyBjaGFyQ291bnRUb3RhbDtcclxuICAgIGNvbnN0IHBlcmNlbnRMYXllcjMgPSBsYXllcjNjb3VudCAqIDEwMCAvIGxheWVyMmNvdW50O1xyXG5cdHZhciBsYXllcjJtYWp1cml0eSA9IDA7XHJcblx0dmFyIGxheWVyM21hanVyaXR5ID0gMDtcclxuXHR2YXIgbWFqdXJpdHkgPSAwO1xyXG5cdGlmIChjaGFyQ291bnRUb3RhbCA8IDMwMDApIHtcclxuXHRcdG1hanVyaXR5ID0gMDtcclxuXHRcdC8vY29uc29sZS5sb2coYE5vdGUgaXMgbm90IGxvbmcgZW5vdWdoIHRvIGdldCBpbnRvIGNhbGN1bGF0aW9uIGZvciBtYWp1cml0eS4gVGhlIHRvdGFsIGNoYXJhY3RlciBjb3VudCBpcyAke2NoYXJDb3VudFRvdGFsfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpZiAocGVyY2VudExheWVyMiA9PSAwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIGlmIChwZXJjZW50TGF5ZXIyIDw9IDMwKSB7XHJcblx0XHRcdGxheWVyMm1hanVyaXR5ID0gMztcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMiA8PSA0MCkge1xyXG5cdFx0XHRsYXllcjJtYWp1cml0eSA9IDI7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjIgPD0gNDApIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIybWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjNjb3VudCA9PSAwKSB7XHJcblx0XHRcdGxheWVyM21hanVyaXR5ID0gMDtcclxuXHRcdH0gZWxzZSBpZiAocGVyY2VudExheWVyMyA8PSAxMCkge1xyXG5cdFx0XHRsYXllcjNtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2UgaWYgKHBlcmNlbnRMYXllcjMgPD0gMjApIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSA0O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGF5ZXIzbWFqdXJpdHkgPSAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXllcjJtYWp1cml0eSA9PSAxICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAxO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA9PSAyICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAyO1xyXG5cdFx0fSBlbHNlIGlmIChsYXllcjJtYWp1cml0eSA+PSAzICYmIGxheWVyM21hanVyaXR5ID09IDApIHtcclxuXHRcdFx0bWFqdXJpdHkgPSAzO1xyXG5cdFx0fSBlbHNlIGlmICgobGF5ZXIybWFqdXJpdHkgPT0gMyB8fCBsYXllcjJtYWp1cml0eSA9PSA0KSAmJiAobGF5ZXIzbWFqdXJpdHkgPT0gNCB8fCBsYXllcjNtYWp1cml0eSA9PSA1KSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDQ7XHJcblx0XHR9IGVsc2UgaWYgKGxheWVyMm1hanVyaXR5ID09IDUgJiYgbGF5ZXIzbWFqdXJpdHkgPT0gNSkge1xyXG5cdFx0XHRtYWp1cml0eSA9IDU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRtYWp1cml0eSA9IDA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRcclxuXHQvL2NvbnNvbGUubG9nKGBsYXllcjJtYWp1cml0eTogJHtsYXllcjJtYWp1cml0eX0gXFx0bGF5ZXIzbWFqdXJpdHk6ICR7bGF5ZXIzbWFqdXJpdHl9IFxcdG1hanVyaXR5OiAke21hanVyaXR5fWApO1xyXG5cdC8vY29uc29sZS5sb2coYHBlcmNlbnRMYXllcjI6ICR7cGVyY2VudExheWVyMn0gXFx0cGVyY2VudExheWVyMzogJHtwZXJjZW50TGF5ZXIzfSBcXHRtYWp1cml0eTogJHttYWp1cml0eX1gKTtcclxuXHQvL2NvbnNvbGUubG9nKGBjaGFyQ291bnRUb3RhbDogJHtjaGFyQ291bnRUb3RhbH1gKTtcclxuXHRyZXR1cm4gbWFqdXJpdHk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRMYXllcjJBbmRMYXllcjNDaGFyYWN0ZXJzKGNvbnRlbnQ6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZywgbGF5ZXIyOiBzdHJpbmcsIGxheWVyMzogc3RyaW5nKTogeyBjaGFyQ291bnQ6IG51bWJlcjsgaGlnaGxpZ2h0ZWRDb3VudDogbnVtYmVyOyBib2xkQ291bnQ6IG51bWJlciB9IHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblxyXG5cdC8vIGNhbGN1bGF0ZSBMYXllciAyICYgMyBMZW5ndGhcclxuXHJcblx0Ly8gQ291bnQgdGhlIGhpZ2hsaWdodGVkIGFuZCBib2xkIGNoYXJhY3RlcnNcclxuXHRsZXQgaGlnaGxpZ2h0ZWRDb3VudCA9IDA7XHJcblx0bGV0IGJvbGRDb3VudCA9IDA7XHJcbiAgXHJcblx0dmFyIGxheWVyMmV4Y2x1ZGUgPSAnPSdcclxuXHR2YXIgbGF5ZXIzZXhjbHVkZSA9ICdcXFxcKidcclxuXHQvLyB0byBoYXZlIHRoZSByZWcgZXggY29ycmVjdC4gb3RoZXJ3aXNlIGl0IHdpbGwgZ2V0IHN0dWMgd2l0aCAqKi5cclxuXHRpZihsYXllcjMgPT0gJyoqJyl7XHJcblx0XHRsYXllcjMgPSAnXFxcXCpcXFxcKidcclxuXHRcdGxheWVyM2V4Y2x1ZGUgPSAnXFxcXConXHJcblx0XHRsYXllcjJleGNsdWRlID0gJz0nXHJcblx0fVxyXG5cdGlmKGxheWVyMiA9PSAnKionKXtcclxuXHRcdGxheWVyMiA9ICdcXFxcKlxcXFwqJ1xyXG5cdFx0bGF5ZXIzZXhjbHVkZSA9ICc9J1xyXG5cdFx0bGF5ZXIyZXhjbHVkZSA9ICdcXFxcKidcclxuXHR9XHJcbiAgXHRcclxuXHJcblx0Y29uc3QgaGlnaGxpZ2h0UmVnZXggPSBuZXcgUmVnRXhwKGAke2xheWVyMn1bXiR7bGF5ZXIyZXhjbHVkZX1dKyR7bGF5ZXIyfWAsIFwiZ1wiKTtcclxuICAgIGNvbnN0IGJvbGRSZWdleCA9IG5ldyBSZWdFeHAoYCR7bGF5ZXIzfVteJHtsYXllcjNleGNsdWRlfV0rJHtsYXllcjN9YCwgXCJnXCIpO1xyXG4gIFxyXG5cdC8vIENvdW50IGhpZ2hsaWdodGVkIGNoYXJhY3RlcnNcclxuXHRjb25zdCBoaWdobGlnaHRlZE1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGhpZ2hsaWdodFJlZ2V4KTtcclxuXHRpZiAoaGlnaGxpZ2h0ZWRNYXRjaGVzKSB7XHJcblx0ICBoaWdobGlnaHRlZENvdW50ID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGhpZ2hsaWdodGVkTWF0Y2hlcy5sZW5ndGggKiA0KTsgLy8gU3VidHJhY3QgdGhlIGxlbmd0aCBvZiAnPT0nXHJcblx0ICAvLyBmaXJzdCB0YWtlIHRoZSBsYXllcjIgKGhpZ2hsaWdodGVkQ291bnQpIGFuZCBydW4gb24gdGhpcyB0aGUgJ2JvbGRSZWdleCdcclxuXHQgIC8vIENvdW50IGJvbGQgY2hhcmFjdGVyc1xyXG5cdCAgY29uc3QgbGF5ZXIyU3RyaW5nID0gaGlnaGxpZ2h0ZWRNYXRjaGVzLmpvaW4oXCJcIik7XHJcblx0ICBjb25zdCBib2xkTWF0Y2hlcyA9IGxheWVyMlN0cmluZy5tYXRjaChib2xkUmVnZXgpO1xyXG5cdCAgaWYgKGJvbGRNYXRjaGVzKSB7XHJcblx0ICAgIGJvbGRDb3VudCA9IGJvbGRNYXRjaGVzLmpvaW4oXCJcIikubGVuZ3RoIC0gKGJvbGRNYXRjaGVzLmxlbmd0aCAqIDQpOyAvLyBTdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mICcqKidcclxuXHQgIH1cclxuXHR9XHJcbiAgXHJcblx0XHJcblx0XHJcbiAgXHJcblx0cmV0dXJuIHsgY2hhckNvdW50LCBoaWdobGlnaHRlZENvdW50LCBib2xkQ291bnQgfTtcclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmF0ZUxldmVsT2ZNYXR1cml0eShub3RlTGVuZ3RoOiBudW1iZXIsIGxlbmd0aE9mVGl0bGU6IG51bWJlciwgSW5saW5rczogbnVtYmVyLCBvdXRnb2luZ0xpbmtzOiBudW1iZXIsIHByb2dyZXNzaXZlU3VtTWFqdXJpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0Ly8gY29uc29sZS5sb2coYG5vdGVMZW5ndGg6ICR7bm90ZUxlbmd0aH1cXHRsZW5ndGhPZlRpdGxlOiAke2xlbmd0aE9mVGl0bGV9XFx0SW5saW5rczogJHtJbmxpbmtzfVxcdG91dGdvaW5nTGlua3M6ICR7b3V0Z29pbmdMaW5rc31gKVxyXG5cdFxyXG5cdC8vIGRlY2lkZSBpZiBub3RlTGVuZ3RoLW1hanVyaXR5IG9yIHByb2dyZXNzaXZlU3VtLW1hanVyaXR5IHNoYWxsIGJlIHVzZWRcclxuXHR2YXIgbGVuZ3RoTWFqdXJpdHkgPSAwO1xyXG5cdGlmKG5vdGVMZW5ndGggPj0gcHJvZ3Jlc3NpdmVTdW1NYWp1cml0eSkge1xyXG5cdFx0bGVuZ3RoTWFqdXJpdHkgPSBub3RlTGVuZ3RoO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsZW5ndGhNYWp1cml0eSA9IHByb2dyZXNzaXZlU3VtTWFqdXJpdHk7XHJcblx0fVxyXG5cdFxyXG5cdGNvbnN0IHRvdGFsV2VpZ2h0IDogbnVtYmVyID0gbGVuZ3RoTWFqdXJpdHkgKyBsZW5ndGhPZlRpdGxlICsgSW5saW5rcyArIG91dGdvaW5nTGlua3M7XHJcblx0Y29uc3QgYXZlcmFnZVdlaWdodCA9IHRvdGFsV2VpZ2h0IC8gNTtcclxuXHQvLyBjb25zb2xlLmxvZyhgdG90YWxXZWlnaHQ6ICR7dG90YWxXZWlnaHR9XFx0YXZlcmFnZVdlaWdodDogJHthdmVyYWdlV2VpZ2h0fWApXHJcblx0aWYgKGF2ZXJhZ2VXZWlnaHQgPCAwLjUpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAxKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKGF2ZXJhZ2VXZWlnaHQgPD0gMikge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChhdmVyYWdlV2VpZ2h0IDw9IDMpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSAzLjUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoYXZlcmFnZVdlaWdodCA8PSA0KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhdGVPdXRsaW5rcyhvdXRsaW5rczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHQvLyBjb25zb2xlLmxvZyhgb3V0bGlua3M6ICR7b3V0bGlua3N9YClcclxuXHRpZiAob3V0bGlua3MgPCAyKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMykge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIGlmIChvdXRsaW5rcyA8IDUpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCA5KSB7XHJcblx0XHRyZXR1cm4gNTtcclxuXHR9IGVsc2UgaWYgKG91dGxpbmtzIDwgMTEpIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAob3V0bGlua3MgPCAxMikge1xyXG5cdFx0cmV0dXJuIDE7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlSW5saW5rcyhudW1JbmxpbmtzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdC8vdmFyIHByb3plbnRJbmxpbmtzID0gbnVtSW5saW5rcyAqIDEwMCAvIG51bUFsbEZpbGVzO1xyXG5cdC8vY29uc29sZS5sb2coYG51bUlubGlua3M6ICR7bnVtSW5saW5rc31cXHRudW1BbGxGaWxlczogJHtudW1BbGxGaWxlc31cXHRwcm96ZW50SW5saW5rczogJHtwcm96ZW50SW5saW5rc31gKVxyXG5cdC8qaWYgKHByb3plbnRJbmxpbmtzIDwgMC4wMDUgfHwgcHJvemVudElubGlua3MgPiAwLjEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH0gZWxzZSAqLyBpZiAobnVtSW5saW5rcyA9PSAwKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA0KSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCA4KSB7XHJcblx0XHRyZXR1cm4gMjtcclxuXHR9IGVsc2UgaWYgKG51bUlubGlua3MgPCAxMSkge1xyXG5cdFx0cmV0dXJuIDM7XHJcblx0fSBlbHNlIGlmIChudW1JbmxpbmtzIDwgMTYpIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAobnVtSW5saW5rcyA+PSAxNiAmJiBudW1JbmxpbmtzIDwgNTAwICkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlRGlyZWN0aW9uKHJhdGluZ0N1cnJlbnQ6IHN0cmluZywgcmF0aW5nTmV3OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGxldCByYXRpbmcgPSBcIlwiXHJcblx0aWYgKHBhcnNlSW50KHJhdGluZ0N1cnJlbnQsIDEwKSA+IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MkIwN1x1RkUwRlwiXHJcblx0fSBlbHNlIGlmIChwYXJzZUludChyYXRpbmdDdXJyZW50LCAxMCkgPCByYXRpbmdOZXcpe1xyXG5cdFx0cmF0aW5nID0gcmF0aW5nTmV3ICsgXCJcdTJCMDZcdUZFMEZcIlxyXG5cdH0gZWxzZSBpZiAocGFyc2VJbnQocmF0aW5nQ3VycmVudCwgMTApID09IHJhdGluZ05ldyl7XHJcblx0XHRyYXRpbmcgPSByYXRpbmdOZXcgKyBcIlx1MjdBMVx1RkUwRlwiXHJcblx0fSBlbHNlIHtcclxuXHRcdHJhdGluZyA9IHJhdGluZ05ldyArIFwiXCJcclxuXHR9XHJcblxyXG5cdHJldHVybiByYXRpbmdcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTGVuZ3RoRmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDMwKSB7XHJcblx0cmV0dXJuIDA7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCA4MCkge1xyXG5cdHJldHVybiAxO1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMTAwKSB7XHJcblx0cmV0dXJuIDM7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAxNTApIHtcclxuXHRyZXR1cm4gNTtcclxuICB9IGVsc2UgaWYgKGZpbGVuYW1lLmxlbmd0aCA8IDE5MCkge1xyXG5cdHJldHVybiA0O1xyXG4gIH0gZWxzZSBpZiAoZmlsZW5hbWUubGVuZ3RoIDwgMjEwKSB7XHJcblx0cmV0dXJuIDI7XHJcbiAgfSBlbHNlIGlmIChmaWxlbmFtZS5sZW5ndGggPCAyNTApIHtcclxuXHRyZXR1cm4gMTtcclxuICB9IGVsc2Uge1xyXG5cdHJldHVybiAwO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYXRlTm90ZUxlbmd0aChjb250ZW5sZW5ndGg6IG51bWJlcik6IG51bWJlciB7XHJcblx0aWYgKGNvbnRlbmxlbmd0aCA8IDIwMCkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCA1NTApIHtcclxuXHRcdHJldHVybiA0O1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMTAwMCkge1xyXG5cdFx0cmV0dXJuIDU7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAxMjAwKSB7XHJcblx0XHRyZXR1cm4gNDtcclxuXHR9IGVsc2UgaWYgKGNvbnRlbmxlbmd0aCA8IDIwMDApIHtcclxuXHRcdHJldHVybiAzO1xyXG5cdH0gZWxzZSBpZiAoY29udGVubGVuZ3RoIDwgMjUwMCkge1xyXG5cdFx0cmV0dXJuIDI7XHJcblx0fSBlbHNlIGlmIChjb250ZW5sZW5ndGggPCAzMDAwKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlck9mT3V0bGlua3MoYWN0aXZlRmlsZTogVEZpbGUpOiBudW1iZXIge1xyXG5cdC8vIGNvbnN0IGFjdGl2ZUZpbGU6IFRGaWxlIHwgbnVsbCA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xyXG5cdGlmICghYWN0aXZlRmlsZSkge1xyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cdGNvbnN0IGlubGlua3MgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoYWN0aXZlRmlsZSk/LmxpbmtzO1xyXG5cdHJldHVybiBpbmxpbmtzID8gT2JqZWN0LmtleXMoaW5saW5rcykubGVuZ3RoIDogMDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudENoYXJhY3RlcnNJbkFjdGl2ZUZpbGUoY29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICBcclxuXHRjb25zdCBmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlbmFtZTsgLy8uc2xpY2UoMCwgLWZpbGVuYW1lLmxlbmd0aCk7XHJcblx0Ly8gY29uc29sZS5sb2coYGZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbjogJHtmaWxlbmFtZVdpdGhvdXRFeHRlbnNpb259YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtYXJrZG93biBmb3JtYXR0aW5nIHN5bWJvbHNcclxuXHRjb25zdCBzdHJpcHBlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1sqX35gXS9nLCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uOiAke2ZpbGVuYW1lV2l0aG91dEV4dGVuc2lvbn1gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIG1hcmtkb3duIGhlYWRpbmdzIHRoYXQgbWF0Y2ggdGhlIGZpbGVuYW1lXHJcblx0Y29uc3QgaGVhZGluZ1JlZ2V4ID0gL14oIyspXFxzKC4qKSQvZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRIZWFkaW5ncyA9IHN0cmlwcGVkQ29udGVudC5yZXBsYWNlKGhlYWRpbmdSZWdleCwgKG1hdGNoLCBwMSwgcDIpID0+IHtcclxuXHRcclxuXHRcdC8vIGNvbnNvbGUubG9nKGBwMjogJHtwMn1gKTtcclxuXHRcdGlmIChwMiA9PT0gZmlsZW5hbWVXaXRob3V0RXh0ZW5zaW9uKSB7XHJcblx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoO1xyXG5cdH0pO1xyXG5cdC8vIGNvbnNvbGUubG9nKGBjb250ZW50V2l0aG91dEhlYWRpbmdzOiAke2NvbnRlbnRXaXRob3V0SGVhZGluZ3N9YCk7XHJcblxyXG5cdC8vIFJlbW92ZSBtZXRhZGF0YSBibG9ja3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IG1ldGFkYXRhUmVnZXggPSAvXi0tLVtcXHNcXFNdKj8tLS0vZ207XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRNZXRhZGF0YSA9IGNvbnRlbnRXaXRob3V0SGVhZGluZ3MucmVwbGFjZShtZXRhZGF0YVJlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRNZXRhZGF0YTogJHtjb250ZW50V2l0aG91dE1ldGFkYXRhfWApO1xyXG5cclxuXHQvLyBSZW1vdmUgI3RhZ3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IHRhZ1JlZ2V4ID0gLyNbXlxcc10rL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRUYWdzID0gY29udGVudFdpdGhvdXRNZXRhZGF0YS5yZXBsYWNlKHRhZ1JlZ2V4LCBcIlwiKTtcclxuXHQvLyBjb25zb2xlLmxvZyhgY29udGVudFdpdGhvdXRUYWdzOiAke2NvbnRlbnRXaXRob3V0VGFnc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGxpbmtzIGFuZCBXaWtpcGVkaWEtbGlua3MgZnJvbSBjb3VudFxyXG5cdGNvbnN0IGxpbmtSZWdleCA9IC9cXFsuKj9cXF1cXCguKj9cXCl8XFxbXFxbLio/XFxdXFxdL2c7XHJcblx0Y29uc3QgY29udGVudFdpdGhvdXRMaW5rcyA9IGNvbnRlbnRXaXRob3V0VGFncy5yZXBsYWNlKGxpbmtSZWdleCwgXCJcIik7XHJcblx0Ly8gY29uc29sZS5sb2coYGNvbnRlbnRXaXRob3V0TGlua3M6ICR7Y29udGVudFdpdGhvdXRMaW5rc31gKTtcclxuXHJcblx0Ly8gUmVtb3ZlIGJsYW5rIG5ld2xpbmVzXHJcblx0Y29uc3QgZmlsdGVyZWRDb250ZW50OiBzdHJpbmcgPSBjb250ZW50V2l0aG91dExpbmtzXHJcblx0LnNwbGl0KCdcXG4nKSAvLyBTcGxpdCB0aGUgY29udGVudCBpbnRvIGFuIGFycmF5IG9mIGxpbmVzXHJcblx0LmZpbHRlcihsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJykgLy8gRmlsdGVyIG91dCBsaW5lcyB0aGF0IGFyZSBlbXB0eSBvciBjb250YWluIG9ubHkgd2hpdGVzcGFjZVxyXG5cdC5maWx0ZXIobGluZSA9PiBsaW5lLnRyaW0oKSAhPT0gJy0tLScpIC8vIHJlbW92ZSAtLS0gb24gc2luZ2xlIGxpbmVzXHJcblx0LmpvaW4oJ1xcbicpOyAvLyBKb2luIHRoZSByZW1haW5pbmcgbGluZXMgYmFjayBpbnRvIGEgc3RyaW5nLCBzZXBhcmF0ZWQgYnkgbmV3bGluZXNcclxuXHQvLyBjb25zb2xlLmxvZyhgZmlsdGVyZWRDb250ZW50OiAke2ZpbHRlcmVkQ29udGVudH1gKTtcclxuXHJcblx0Ly8gQ291bnQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzXHJcblx0Y29uc3QgY2hhckNvdW50ID0gZmlsdGVyZWRDb250ZW50Lmxlbmd0aDtcclxuXHQvLyBjb25zb2xlLmxvZyhgY2hhckNvdW50OiAke2NoYXJDb3VudH1gKTtcclxuXHJcblx0cmV0dXJuIGNoYXJDb3VudDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3VudF9pbmxpbmtzX3NpbmdsZShmaWxlX3BhdGg6IHN0cmluZywgdmF1bHRfcGF0aDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHQvLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2UncmUgY291bnRpbmcgbGlua3MgdG9cclxuXHRjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZV9wYXRoKTtcclxuXHRjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoZmlsZV9wYXRoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGEgc2V0IHRvIGhvbGQgYWxsIHRoZSBmaWxlcyB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3QgbGlua2luZ19maWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XHJcblxyXG5cdC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgZmlsZXMgaW4gdGhlIHZhdWx0IGRpcmVjdG9yeSB0aGF0IGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0Y29uc3Qgd2Fsa1N5bmMgPSAoZGlyOiBzdHJpbmcsIGZpbGVsaXN0OiBzdHJpbmdbXSkgPT4ge1xyXG5cdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpO1xyXG5cdFx0ZmlsZWxpc3QgPSBmaWxlbGlzdCB8fCBbXTtcclxuXHRcdGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRpZiAoZnMuc3RhdFN5bmMocGF0aC5qb2luKGRpciwgZmlsZSkpLmlzRGlyZWN0b3J5KCkpIHtcclxuXHRcdFx0XHRmaWxlbGlzdCA9IHdhbGtTeW5jKHBhdGguam9pbihkaXIsIGZpbGUpLCBmaWxlbGlzdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Ly8gSWdub3JlIG5vbi1tZCBmaWxlcyBhbmQgZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG91ciB0YXJnZXQgZmlsZVxyXG5cdFx0XHRcdGlmICghZmlsZS5lbmRzV2l0aChcIi5tZFwiKSB8fCBmaWxlID09PSBmaWxlbmFtZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVhZCB0aGUgZmlsZSBhbmQgbG9vayBmb3IgbGlua3MgdG8gb3VyIHRhcmdldCBmaWxlXHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcclxuXHRcdFx0XHRkYXRhLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGlmIChsaW5lLmluY2x1ZGVzKGBbWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1dYCkgfHwgbGluZS5pbmNsdWRlcyhgWyR7ZmlsZW5hbWUuc2xpY2UoMCwgLTMpfV1gKSkge1xyXG5cdFx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIGxpbmsgdG8gb3VyIHRhcmdldCBmaWxlIVxyXG5cdFx0XHRcdFx0XHRsaW5raW5nX2ZpbGVzLmFkZChwYXRoLnJlbGF0aXZlKGRpcmVjdG9yeSwgcGF0aC5qb2luKGRpciwgZmlsZSkpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gZmlsZWxpc3Q7XHJcblx0fTtcclxuXHJcblx0d2Fsa1N5bmModmF1bHRfcGF0aCwgW10pO1xyXG5cclxuXHQvLyBjb3VudCBob3cgbWFueSBmaWxlcyBhcmUgbWVudGlvbmluZyB0aGUgaW5wdXQgZmlsZVxyXG5cdHJldHVybiBsaW5raW5nX2ZpbGVzLnNpemU7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY291bnRfaW5saW5rcyhmaWxlOiBURmlsZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGFwcDogeyBtZXRhZGF0YUNhY2hlOiB7IHJlc29sdmVkTGlua3MgfSB9IH0gPSB0aGlzO1xyXG4gICAgY29uc3QgeyBwYXRoIH0gPSBmaWxlO1xyXG5cclxuICAgIGNvbnN0IHN1bUlubGlua3MgPSBPYmplY3QudmFsdWVzKHJlc29sdmVkTGlua3MpXHJcbiAgICAgICAgLm1hcCgodmFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9KSA9PiB2YWxbcGF0aF0gPz8gMClcclxuICAgICAgICAucmVkdWNlKChsZWZ0LCByaWdodCkgPT4gbGVmdCArIHJpZ2h0LCAwKTtcclxuXHJcbiAgICByZXR1cm4gc3VtSW5saW5rcztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGaWxlQ291bnRNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHRcclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHRcclxuICAgIGNvbnN0IGZpbGVDb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB2YXVsdC5nZXRNYXJrZG93bkZpbGVzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG5cdFx0Y29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBmaWxlQ291bnRNYXAuZ2V0KGZpbGVOYW1lKSB8fCAwO1xyXG5cclxuICAgICAgICBmaWxlQ291bnRNYXAuc2V0KGZpbGVOYW1lLCBjdXJyZW50Q291bnQgKyAxKTtcclxuXHJcblx0XHRjb25zdCBmaWxlQ29udGVudHMgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKCFleGNsdWRlZFN1YnN0cmluZ3Muc29tZShzdWJzdHJpbmcgPT4gZmlsZUNvbnRlbnRzLmluY2x1ZGVzKHN1YnN0cmluZykpICYmIFxyXG4gICAgICAgICAgICAhZXhjbHVkZWRGb2xkZXJzLnNvbWUoZm9sZGVyID0+IGZpbGUucGF0aC5pbmNsdWRlcyhmb2xkZXIpKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLmJhc2VuYW1lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gZmlsZUNvdW50TWFwLmdldChmaWxlTmFtZSkgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGZpbGVDb3VudE1hcC5zZXQoZmlsZU5hbWUsIGN1cnJlbnRDb3VudCArIDEpO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWxlQ291bnRNYXA7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpbGVNYXAgPSBhc3luYyAoYXBwOiBBcHAsIGV4Y2x1ZGVUYWc6IHN0cmluZywgZXhjbHVkZUZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxURmlsZVtdPiA9PiB7XHJcblxyXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xyXG5cclxuXHQvLyBmaWxlcyB3aXRoIHRoaXMgI3RhZ3MgaW4gdG8gaWdub3JlXHJcblx0bGV0IGV4Y2x1ZGVkU3Vic3RyaW5ncyA6IHN0cmluZ1tdID0gW11cclxuXHRpZiAoZXhjbHVkZVRhZyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IFtdXHJcblx0fSBlbHNlIHtcclxuXHRcdGV4Y2x1ZGVkU3Vic3RyaW5ncyA9IGV4Y2x1ZGVUYWcuc3BsaXQoJywgJyk7XHJcblx0fVxyXG5cdC8vY29uc29sZS5sb2coYGV4Y2x1ZGVkU3Vic3RyaW5nczogJHtleGNsdWRlZFN1YnN0cmluZ3N9YClcclxuXHQvLyBmb2xkZXJzIHRvIGlnbm9yZSAubWQtZmlsZXMgaW5cclxuXHRsZXQgZXhjbHVkZWRGb2xkZXJzIDogc3RyaW5nW10gPSBbXVxyXG5cdGlmIChleGNsdWRlRm9sZGVyID09IHVuZGVmaW5lZCkge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gW11cclxuXHR9IGVsc2Uge1xyXG5cdFx0ZXhjbHVkZWRGb2xkZXJzID0gZXhjbHVkZUZvbGRlci5zcGxpdCgnLCAnKTtcclxuXHR9XHJcblx0ZXhjbHVkZWRGb2xkZXJzLnB1c2goJy5vYnNpZGlhbicsICcudHJhc2gnKTsgLy8gaGFyZGNvZGUgdGhlIGJhc2ljIGZvbGRlcnNcclxuXHQvL2NvbnNvbGUubG9nKGBleGNsdWRlZEZvbGRlcnM6ICR7ZXhjbHVkZWRGb2xkZXJzfWApXHRcclxuICAgIGxldCBmaWxlQXJyYXk6IFRGaWxlW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhgZmlsZS5wYXRoOiAke2ZpbGUucGF0aH1gKVxyXG5cdFx0aWYgKCghZXhjbHVkZWRTdWJzdHJpbmdzLnNvbWUoc3Vic3RyaW5nID0+IGZpbGVDb250ZW50cy5pbmNsdWRlcyhzdWJzdHJpbmcpKSB8fCBleGNsdWRlVGFnLmxlbmd0aCA9PT0gMCkgJiYgXHJcbiAgICAgICAgICAgICFleGNsdWRlZEZvbGRlcnMuc29tZShmb2xkZXIgPT4gZmlsZS5wYXRoLmluY2x1ZGVzKGZvbGRlcikpKSB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYGZpbGUgJHtmaWxlfSBnZXQncyBhZGRlZC5gKVxyXG5cdFx0XHRmaWxlQXJyYXkucHVzaChmaWxlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxlQXJyYXk7XHJcbn07XHJcbiIsICJleHBvcnQgaW50ZXJmYWNlIEJhZGdlIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBsZXZlbDogc3RyaW5nO1xyXG4gIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUmVjZWl2ZUFCYWRnZShsZXZlbE9sZDogbnVtYmVyLCBsZXZlbE5ldzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gIGxldCByZWNlaXZlQmFkZ2UgPSBmYWxzZVxyXG4gIGZvciAobGV0IGk9MDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKXtcclxuICAgIGlmIChsZXZlbE9sZCA8IGJhZGdlTGV2ZWxzW2ldICYmIGxldmVsTmV3ID49IGJhZGdlTGV2ZWxzW2ldKXtcclxuICAgICAgcmVjZWl2ZUJhZGdlID0gdHJ1ZVxyXG4gICAgfSBcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpdmVCYWRnZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VGb3JMZXZlbChsZXZlbDogbnVtYmVyLCBpbmZvcm06IGJvb2xlYW4pOiBCYWRnZSB7XHJcbiAgICBjb25zdCBiYWRnZUxldmVsczogbnVtYmVyW10gPSBbNSwgMTAsIDIwLCAyNywgMzUsIDQyLCA1MCwgNjAsIDc1LCA4MiwgOTAsIDEwMF07XHJcbiAgICBjb25zdCBiYWRnZU5hbWVzOiBCYWRnZVtdID0gW1xyXG4gICAgICB7IG5hbWU6IFwiRW5saWdodGVuZWQgTm92aWNlXCIsIGRlc2NyaXB0aW9uOiBcIkh1enphaCEgWW91J3ZlIGVtYmFya2VkIG9uIHRoZSBwYXRoIG9mIGtub3dsZWRnZSBhbmQgZWFybmVkIHRoZSB0aXRsZSBvZiAnRW5saWdodGVuZWQgTm92aWNlLicgVGhlIGpvdXJuZXkgaGFzIGp1c3QgYmVndW4sIGFuZCB5b3UncmUgYWxyZWFkeSByYWRpYXRpbmcgd2lzZG9tIGxpa2UgYSBiYWJ5IHN1biFcIiwgbGV2ZWw6IFwibGV2ZWwgNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDdXJpb3VzIENvbm5vaXNzZXVyXCIsIGRlc2NyaXB0aW9uOiBcIkZhbnRhc3RpYyEgWW91J3ZlIGVtYnJhY2VkIHRoZSB3b25kZXJzIG9mIGxlYXJuaW5nIGFuZCBiZWNvbWUgYSAnQ3VyaW91cyBDb25ub2lzc2V1ci4nIFlvdXIgYXBwZXRpdGUgZm9yIGtub3dsZWRnZSBpcyBpbnNhdGlhYmxlLCBsaWtlIGEgYm90dG9tbGVzcyBib3dsIG9mIGljZSBjcmVhbSFcIiAsIGxldmVsOiBcImxldmVsIDEwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkJyYWluaWFjIFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZvISBBcyBhICdCcmFpbmlhYyBUcmFpbGJsYXplciwnIHlvdSd2ZSBjYXJ2ZWQgeW91ciB3YXkgdGhyb3VnaCBhIGp1bmdsZSBvZiBpbmZvcm1hdGlvbiBhbmQgZW1lcmdlZCB2aWN0b3Jpb3VzLiBZb3VyIGludGVsbGVjdCBpcyBhIGJlYWNvbiBzaGluaW5nIGJyaWdodGx5IGZvciBvdGhlcnMgdG8gZm9sbG93IVwiICwgbGV2ZWw6IFwibGV2ZWwgMjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2Nob2xhcmx5IFRyYWlsYmxhemVyXCIsIGRlc2NyaXB0aW9uOiBcIkltcHJlc3NpdmUhIFlvdSdyZSBub3cgYSAnU2Nob2xhcmx5IFRyYWlsYmxhemVyLCcgYm9sZGx5IHZlbnR1cmluZyB0aHJvdWdoIGEgc2VhIG9mIGtub3dsZWRnZSB3aXRoIGEgY29tcGFzcyBvZiBjdXJpb3NpdHkgYW5kIGEgbWFwIG9mIGludGVsbGVjdCFcIiAsIGxldmVsOiBcImxldmVsIDI3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkluZm8gTmluamEgTWFzdGVyXCIsIGRlc2NyaXB0aW9uOiBcIkluY3JlZGlibGUhIFlvdSd2ZSByZWFjaGVkIHRoZSBwaW5uYWNsZSBvZiBzdGVhbHRoeSBrbm93bGVkZ2UgbWFuYWdlbWVudC4gQXMgYW4gJ0luZm8gTmluamEgTWFzdGVyLCcgeW91IGNhbiBzbmF0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgc2hhZG93cyBsaWtlIGEgZGlnaXRhbCBuaW5qYSFcIiAsIGxldmVsOiBcImxldmVsIDM1XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIldpc2UgT3dsIEd1cnVcIiwgZGVzY3JpcHRpb246IFwiV2hvby1ob28hIFlvdSd2ZSBhY2hpZXZlZCAnV2lzZSBPd2wgR3VydScgc3RhdHVzLiBZb3VyIHdpc2RvbSBpcyBsZWdlbmRhcnksIGFuZCB5b3VyIGhvb3RzIG9mIGtub3dsZWRnZSBlY2hvIHRocm91Z2ggdGhlIGZvcmVzdCBvZiBpZ25vcmFuY2UhXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFaW5zdGVpbiBJbmNhcm5hdGVcIiwgZGVzY3JpcHRpb246IFwiRXVyZWthISBZb3UndmUgYmVjb21lIGFuICdFaW5zdGVpbiBJbmNhcm5hdGUsJyBwdXNoaW5nIHRoZSBib3VuZGFyaWVzIG9mIHVuZGVyc3RhbmRpbmcgYW5kIGJlbmRpbmcgdGhlIGZhYnJpYyBvZiBrbm93bGVkZ2UgdG8geW91ciB3aWxsIVwiICwgbGV2ZWw6IFwibGV2ZWwgNTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTWFzdGVybWluZCBTYWdlXCIsIGRlc2NyaXB0aW9uOiBcIk1hZ25pZmljZW50ISBZb3UndmUgYXNjZW5kZWQgdG8gdGhlIHJhbmsgb2YgJ01hc3Rlcm1pbmQgU2FnZSwnIGd1aWRpbmcgdGhlIHJpdmVycyBvZiBpbmZvcm1hdGlvbiBhbmQgZW5saWdodGVuaW5nIGFsbCB3aG8gc2VlayB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA2MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJDZXJlYnJhbCBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkJyYXZpc3NpbW8hIFlvdSdyZSBub3cgYSAnQ2VyZWJyYWwgTWFlc3RybywnIGNvbmR1Y3RpbmcgdGhlIHN5bXBob255IG9mIGtub3dsZWRnZSB3aXRoIHRoZSBmaW5lc3NlIG9mIGEgdmlydHVvc28gY29uZHVjdG9yIVwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiWmVuIEtub3dsZWRnZSBLZWVwZXJcIiwgZGVzY3JpcHRpb246IFwiU2VyZW5pdHkgYWNoaWV2ZWQhIEFzIGEgJ1plbiBLbm93bGVkZ2UgS2VlcGVyLCcgeW91IG1haW50YWluIGEgdHJhbnF1aWwgbWluZCB3aGlsZSBtYW5hZ2luZyB2YXN0IHBvb2xzIG9mIGtub3dsZWRnZSB3aXRoIGdyYWNlIGFuZCBwb2lzZS5cIiAsIGxldmVsOiBcImxldmVsIDgyXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkdyYW5kIEFyY2hpdmlzdCBPdmVybG9yZFwiLCBkZXNjcmlwdGlvbjogXCJBbGwgaGFpbCB0aGUgJ0dyYW5kIEFyY2hpdmlzdCBPdmVybG9yZCEnIFlvdSB3aWVsZCB0aGUga25vd2xlZGdlIG9mIGFnZXMgYW5kIGhvbGQgdGhlIGtleXMgdG8gdW5sb2NrIHRoZSBnYXRlcyBvZiB3aXNkb20hXCIgLCBsZXZlbDogXCJsZXZlbCA5MFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJPbW5pc2NpZW50IFNhZ2Ugb2YgRXZlcnl0aGluZ1wiLCBkZXNjcmlwdGlvbjogXCJDb25ncmF0dWxhdGlvbnMsIG9oIHdpc2Ugb25lISBZb3UndmUgYXR0YWluZWQgdGhlIGhpZ2hlc3QgbGV2ZWwgb2YgZW5saWdodGVubWVudCBhcyB0aGUgJ09tbmlzY2llbnQgU2FnZSBvZiBFdmVyeXRoaW5nLicgWW91ciB1bmRlcnN0YW5kaW5nIGtub3dzIG5vIGJvdW5kcywgYW5kIHlvdXIgd2lzZG9tIGlzIGFzIHZhc3QgYXMgdGhlIGNvc21vcyBpdHNlbGYhXCIsIGxldmVsOiBcImxldmVsIDEwMFwiICB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNbaW5kZXhdXHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcbiAgZXhwb3J0ICBmdW5jdGlvbiBnZXRCYWRnZUZvckluaXRMZXZlbChsZXZlbDogbnVtYmVyKTogQmFkZ2Uge1xyXG4gICAgY29uc3QgYmFkZ2VMZXZlbHM6IG51bWJlcltdID0gWzAsIDMsIDcsIDE1LCAyMywgMzAsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCAxMDBdO1xyXG4gICAgY29uc3QgYmFkZ2VOYW1lc0luaXQ6IEJhZGdlW10gPSBbXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIFNlZWtlciBJbml0aWF0ZVwiLCBkZXNjcmlwdGlvbjogXCJXZWxjb21lIHRvIHRoZSBqb3VybmV5IG9mIGtub3dsZWRnZSEgQXMgYSAnTG9yZSBTZWVrZXIgSW5pdGlhdGUsJyB5b3UndmUgdGFrZW4geW91ciBmaXJzdCBzdGVwcyBpbnRvIHRoZSB3b3JsZCBvZiBvcmdhbml6ZWQgd2lzZG9tLiBZb3VyIHF1ZXN0IGhhcyBqdXN0IGJlZ3VuLCBhbmQgd2l0aCBlYWNoIG5vdGUgeW91IG1ha2UsIHlvdSBsYXkgdGhlIGZvdW5kYXRpb24gZm9yIGEgZnV0dXJlIHJpY2ggd2l0aCBpbnNpZ2h0cyBhbmQgdW5kZXJzdGFuZGluZy4gWW91ciBqb3VybmV5IHN0YXJ0cyBoZXJlLCBhbmQgdGhlIHBhdGggYWhlYWQgaXMgZmlsbGVkIHdpdGggcG90ZW50aWFsIGFuZCBkaXNjb3ZlcnkuXCIsIGxldmVsOiBcImxldmVsIDFcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiTG9yZSBBcHByZW50aWNlXCIsIGRlc2NyaXB0aW9uOiBcIllvdSd2ZSBoaXQgdGhlIGdyb3VuZCBydW5uaW5nIHdpdGggeW91ciBleGlzdGluZyBrbm93bGVkZ2UgdHJlYXN1cmVzISBZb3UncmUgYWxyZWFkeSBhbiAnTG9yZSBBcHByZW50aWNlLCcgYXJtZWQgd2l0aCBhIHdlYWx0aCBvZiB3aXNkb20gYW5kIHJlYWR5IHRvIHNoYXBlIGl0IGZ1cnRoZXIuXCIsIGxldmVsOiBcImxldmVsIDNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU2F2dnkgU2Nob2xhclwiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgZ2l2ZW4geW91IGEgaGVhZCBzdGFydCEgWW91J3JlIG5vdyBhICdTYXZ2eSBTY2hvbGFyLCcgY29uZmlkZW50bHkgZGl2aW5nIGludG8gdGhlIHNlYSBvZiBpbmZvcm1hdGlvbiB3aXRoIGEgdHJlYXN1cmUgdHJvdmUgb2YgaW5zaWdodHMuXCIgLCBsZXZlbDogXCJsZXZlbCA3XCIgfSxcclxuICAgICAgeyBuYW1lOiBcIlNhZ2UncyBGb3VuZGF0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkJ1aWxkaW5nIHVwb24geW91ciBwcmUtZXhpc3Rpbmcgbm90ZXMsIHlvdSdyZSBlc3RhYmxpc2hpbmcgdGhlICdTYWdlJ3MgRm91bmRhdGlvbicgZm9yIGFuIGV2ZW4gZ3JhbmRlciBlZGlmaWNlIG9mIGtub3dsZWRnZS4gWW91ciBncm91bmR3b3JrIGlzIGltcHJlc3NpdmUhXCIgLCBsZXZlbDogXCJsZXZlbCAxNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJXaXNkb20gU2VlZGxpbmdcIiwgZGVzY3JpcHRpb246IFwiWW91ciBleGlzdGluZyBub3RlcyBoYXZlIG51cnR1cmVkIHRoZSBncm93dGggb2YgYSAnV2lzZG9tIFNlZWRsaW5nLicgWW91J3JlIGN1bHRpdmF0aW5nIHlvdXIgZ2FyZGVuIG9mIGtub3dsZWRnZSB3aXRoIGNhcmUgYW5kIHBhdGllbmNlLlwiICwgbGV2ZWw6IFwibGV2ZWwgMjNcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiUHJvZGlnaW91cyBQcmVwYXJlclwiLCBkZXNjcmlwdGlvbjogXCJUaGFua3MgdG8geW91ciBwcmlvciBlZmZvcnRzLCB5b3UncmUgYSAnUHJvZGlnaW91cyBQcmVwYXJlciwnIHN0YW5kaW5nIHRhbGwgYW1vbmcgeW91ciBub3RlcyBhbmQgcmVhZHkgdG8gY29ucXVlciBuZXcgcmVhbG1zIG9mIHVuZGVyc3RhbmRpbmcuXCIgLCBsZXZlbDogXCJsZXZlbCAzMFwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJFcGljIEVwaXBoYW55IEV4cGxvcmVyXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgcGFzdCBub3RlcyBoYXZlIGxlZCB5b3UgdG8gdGhlIGdyYW5kICdFcGljIEVwaXBoYW55IEV4cGxvcmVyJyBzdGF0dXMhIFlvdSd2ZSBhbHJlYWR5IGJlZW4gZG93biBhIGZldyByYWJiaXQgaG9sZXMgYW5kIGNvbWUgb3V0IHdpdGggZGF6emxpbmcgZGlzY292ZXJpZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAzNVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJMb3JlIEx1bWluYXJ5XCIsIGRlc2NyaXB0aW9uOiBcIldpdGggeW91ciBleGlzdGluZyBub3RlcyBpbGx1bWluYXRpbmcgeW91ciBwYXRoLCB5b3UndmUgYmVjb21lIGEgJ0xvcmUgTHVtaW5hcnksJyBzaGluaW5nIGxpZ2h0IG9uIHRoZSBteXN0ZXJpZXMgb2YgdGhlIHVuaXZlcnNlLCBvbmUgaWRlYSBhdCBhIHRpbWUuXCIgLCBsZXZlbDogXCJsZXZlbCA0MlwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJTY3JpYmUgb2YgdGhlIEFuY2llbnRzXCIsIGRlc2NyaXB0aW9uOiBcIllvdXIgbWFzdGVyeSBvZiBwZXJzb25hbCBrbm93bGVkZ2UgbWFuYWdlbWVudCBoYXMgZWxldmF0ZWQgeW91IHRvIHRoZSBlc3RlZW1lZCByYW5rIG9mIHRoZSAnU2NyaWJlIG9mIHRoZSBBbmNpZW50cy4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMgaGF2ZSB0cmFuc2Zvcm1lZCBpbnRvIHRyZWFzdXJlcywgYnJpZGdpbmcgdGhlIGdhcCBiZXR3ZWVuIG9sZCB3aXNkb20gYW5kIG5ldyBkaXNjb3Zlcmllcy5cIiAsIGxldmVsOiBcImxldmVsIDUwXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkV1cmVrYSBNYWVzdHJvXCIsIGRlc2NyaXB0aW9uOiBcIkFybWVkIHdpdGggeW91ciBleGlzdGluZyBub3RlcywgeW91J3JlIHRoZSAnRXVyZWthIE1hZXN0cm8sJyBjb21wb3NpbmcgYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSB3aXRoIHRoZSBtZWxvZHkgb2YgZGlzY292ZXJ5LlwiICwgbGV2ZWw6IFwibGV2ZWwgNjBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiQ2hyb25pY2xlcyBDaGFtcGlvblwiLCBkZXNjcmlwdGlvbjogXCJXaXRoIHlvdXIgZXhpc3Rpbmcgbm90ZXMgc3RhbmRpbmcgYXMgYSB0ZXN0YW1lbnQsIHlvdSd2ZSBhc2NlbmRlZCB0byB0aGUgaWxsdXN0cmlvdXMgJ0Nocm9uaWNsZXMgQ2hhbXBpb24nIGxldmVsLiBZb3VyIGpvdXJuZXkgdGhyb3VnaCB0aW1lJ3MgdGFwZXN0cnkgaGFzIGJyb3VnaHQgZm9ydGggYSBzeW1waG9ueSBvZiBpbnNpZ2h0cyB0aGF0IGhhcm1vbml6ZSBwYXN0IGFuZCBwcmVzZW50LlwiICwgbGV2ZWw6IFwibGV2ZWwgNzVcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiVGhlIEN1cmlvdXMgQ2FydG9ncmFwaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkFzICdUaGUgQ3VyaW91cyBDYXJ0b2dyYXBoZXIsJyB5b3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFwcGVkIG91dCB1bmNoYXJ0ZWQgdGVycml0b3JpZXMgb2YgdW5kZXJzdGFuZGluZy4gWW91ciBjdXJpb3NpdHkga25vd3Mgbm8gYm91bmRzLCBhbmQgeW91ciBub3RlcyBhcmUgdGhlIGNvbXBhc3MgZ3VpZGluZyB5b3VyIGV4cGxvcmF0aW9uLlwiICwgbGV2ZWw6IFwibGV2ZWwgODJcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiU3VsdGFuIG9mIFN5bnRoZXNpc1wiLCBkZXNjcmlwdGlvbjogXCJZb3VyIGV4aXN0aW5nIG5vdGVzIGhhdmUgbWFkZSB5b3UgdGhlICdTdWx0YW4gb2YgU3ludGhlc2lzLicgWW91J3JlIHRoZSBtYXN0ZXIgd2VhdmVyLCB0aHJlYWRpbmcgdG9nZXRoZXIgdGhyZWFkcyBvZiBpbmZvcm1hdGlvbiBpbnRvIGEgcmljaCB0YXBlc3RyeSBvZiBpbnNpZ2h0LlwiICwgbGV2ZWw6IFwibGV2ZWwgOTBcIiB9LFxyXG4gICAgICB7IG5hbWU6IFwiRXRlcm5hbCBBcmNoaXZpc3RcIiwgZGVzY3JpcHRpb246IFwiQXQgdGhlIHBpbm5hY2xlIG9mIHBlcnNvbmFsIGtub3dsZWRnZSBtYXN0ZXJ5LCB5b3UncmUgbm93IHJldmVyZWQgYXMgdGhlICdFdGVybmFsIEFyY2hpdmlzdC4nIFlvdXIgZXhpc3Rpbmcgbm90ZXMsIGNhcmVmdWxseSBjdXJhdGVkIGFuZCBudXJ0dXJlZCwgc3RhbmQgYXMgaW1tb3J0YWwgYmVhY29ucywgZ3VpZGluZyBzZWVrZXJzIHRocm91Z2ggdGhlIGxhYnlyaW50aCBvZiBrbm93bGVkZ2UgYWNyb3NzIGFnZXMuXCIgLCBsZXZlbDogXCJsZXZlbCAxMDBcIiB9LFxyXG4gICAgXTtcclxuICBcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhZGdlTGV2ZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChsZXZlbCA+PSBiYWRnZUxldmVsc1tpXSkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlTmFtZXNJbml0W2luZGV4XVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4YW1wbGUgdXNhZ2U6XHJcbiAgLy8gY29uc3QgY3VycmVudExldmVsID0gNDI7IC8vIFJlcGxhY2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgcGxheWVyJ3MgbGV2ZWxcclxuICAvLyBjb25zdCBiYWRnZSA9IGdldEJhZGdlRm9yTGV2ZWwoY3VycmVudExldmVsKTtcclxuICAvLyBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zISBZb3UndmUgcmVhY2hlZCBMZXZlbCAke2N1cnJlbnRMZXZlbH0uIFlvdSd2ZSBlYXJuZWQgdGhlIFwiJHtiYWRnZS5uYW1lfVwiIGJhZGdlLiAke2JhZGdlLmRlc2NyaXB0aW9ufWApO1xyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEJhZGdlRm9yTGV2ZWwobGV2ZWw6IG51bWJlcik6IEJhZGdlIHtcclxuICAgIGNvbnN0IGJhZGdlczogQmFkZ2VbXSA9IFtcclxuICAgICAgeyBuYW1lOiBcIkVubGlnaHRlbmVkIE5vdmljZVwiLCBkZXNjcmlwdGlvbjogXCJIdXp6YWghIFlvdSd2ZSBlbWJhcmtlZCBvbiB0aGUgcGF0aCBvZiBrbm93bGVkZ2UgYW5kIGVhcm5lZCB0aGUgdGl0bGUgb2YgJ0VubGlnaHRlbmVkIE5vdmljZS4nIFRoZSBqb3VybmV5IGhhcyBqdXN0IGJlZ3VuLCBhbmQgeW91J3JlIGFscmVhZHkgcmFkaWF0aW5nIHdpc2RvbSBsaWtlIGEgYmFieSBzdW4hXCIgfSxcclxuICAgICAgeyBuYW1lOiBcIkN1cmlvdXMgQ29ubm9pc3NldXJcIiwgZGVzY3JpcHRpb246IFwiRmFudGFzdGljISBZb3UndmUgZW1icmFjZWQgdGhlIHdvbmRlcnMgb2YgbGVhcm5pbmcgYW5kIGJlY29tZSBhICdDdXJpb3VzIENvbm5vaXNzZXVyLicgWW91ciBhcHBldGl0ZSBmb3Iga25vd2xlZGdlIGlzIGluc2F0aWFibGUsIGxpa2UgYSBib3R0b21sZXNzIGJvd2wgb2YgaWNlIGNyZWFtIVwiIH0sXHJcbiAgICAgIHsgbmFtZTogXCJCcmFpbmlhYyBUcmFpbGJsYXplclwiLCBkZXNjcmlwdGlvbjogXCJCcmF2byEgQXMgYSAnQnJhaW5pYWMgVHJhaWxibGF6ZXIsJyB5b3UndmUgY2FydmVkIHlvdXIgd2F5IHRocm91Z2ggYSBqdW5nbGUgb2YgaW5mb3JtYXRpb24gYW5kIGVtZXJnZWQgdmljdG9yaW91cy4gWW91ciBpbnRlbGxlY3QgaXMgYSBiZWFjb24gc2hpbmluZyBicmlnaHRseSBmb3Igb3RoZXJzIHRvIGZvbGxvdyFcIiB9LFxyXG4gICAgICAvLyBBZGQgbW9yZSBiYWRnZXMgaGVyZSBmb3IgbGV2ZWxzIDUsIDEwLCAyMCwgMjcsIDM1LCA0MiwgNTAsIDYwLCA3NSwgODIsIDkwLCBhbmQgMTAwXHJcbiAgICAgIC8vIEV4YW1wbGU6XHJcbiAgICAgIC8vIHsgbmFtZTogXCJTY2hvbGFybHkgVHJhaWxibGF6ZXJcIiwgZGVzY3JpcHRpb246IFwiSW1wcmVzc2l2ZSEgWW91J3JlIG5vdyBhICdTY2hvbGFybHkgVHJhaWxibGF6ZXIsJyBib2xkbHkgdmVudHVyaW5nIHRocm91Z2ggYSBzZWEgb2Yga25vd2xlZGdlIHdpdGggYSBjb21wYXNzIG9mIGN1cmlvc2l0eSBhbmQgYSBtYXAgb2YgaW50ZWxsZWN0IVwiIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogXCJJbmZvIE5pbmphIE1hc3RlclwiLCBkZXNjcmlwdGlvbjogXCJJbmNyZWRpYmxlISBZb3UndmUgcmVhY2hlZCB0aGUgcGlubmFjbGUgb2Ygc3RlYWx0aHkga25vd2xlZGdlIG1hbmFnZW1lbnQuIEFzIGFuICdJbmZvIE5pbmphIE1hc3RlciwnIHlvdSBjYW4gc25hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHNoYWRvd3MgbGlrZSBhIGRpZ2l0YWwgbmluamEhXCIgfSxcclxuICAgICAgLy8gLi4uYW5kIHNvIG9uXHJcbiAgICBdO1xyXG4gIFxyXG4gICAgY29uc3QgbWF4TGV2ZWwgPTEwMDsgLy8gQXNzdW1pbmcgZWFjaCBiYWRnZSBpcyBhd2FyZGVkIGV2ZXJ5IDUgbGV2ZWxzXHJcbiAgICBjb25zdCBjYXBwZWRMZXZlbCA9IE1hdGgubWluKGxldmVsLCBtYXhMZXZlbCk7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoY2FwcGVkTGV2ZWwgLyA1KSAtIDE7XHJcbiAgICByZXR1cm4gYmFkZ2VzW2luZGV4XTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGludGVyZmFjZSBCYWRnZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIH1cclxuICAqL1xyXG4iLCAiZXhwb3J0IGludGVyZmFjZSBMZXZlbERhdGEge1xyXG4gICAgcG9pbnRzOiBudW1iZXI7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgcG9pbnRzTmV4dDogbnVtYmVyO1xyXG4gIH1cclxuICBcclxuICBjb25zdCBsZXZlbERhdGE6IExldmVsRGF0YVtdID0gW1xyXG4gICAgeyBwb2ludHM6IDAsIGxldmVsOiAwLCBwb2ludHNOZXh0OiAwfSxcclxuICAgIHsgcG9pbnRzOiAwLCBsZXZlbDogMSwgcG9pbnRzTmV4dDogMTAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwMDAsIGxldmVsOiAyLCBwb2ludHNOZXh0OiAzMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMCwgbGV2ZWw6IDMsIHBvaW50c05leHQ6IDc1MDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NTAwLCBsZXZlbDogNCwgcG9pbnRzTmV4dDogMTUwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNTAwMCwgbGV2ZWw6IDUsIHBvaW50c05leHQ6IDMwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAsIGxldmVsOiA2LCBwb2ludHNOZXh0OiA1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUwMDAwLCBsZXZlbDogNywgcG9pbnRzTmV4dDogODAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4MDAwMCwgbGV2ZWw6IDgsIHBvaW50c05leHQ6IDEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEyMDAwMCwgbGV2ZWw6IDksIHBvaW50c05leHQ6IDE3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3MDAwMCwgbGV2ZWw6IDEwLCBwb2ludHNOZXh0OiAyMzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMzAwMDAsIGxldmVsOiAxMSwgcG9pbnRzTmV4dDogMzAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAwMDAwLCBsZXZlbDogMTIsIHBvaW50c05leHQ6IDM4MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM4MDAwMCwgbGV2ZWw6IDEzLCBwb2ludHNOZXh0OiA0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NzAwMDAsIGxldmVsOiAxNCwgcG9pbnRzTmV4dDogNjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjAwMDAwLCBsZXZlbDogMTUsIHBvaW50c05leHQ6IDc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1MDAwMCwgbGV2ZWw6IDE2LCBwb2ludHNOZXh0OiA5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjAwMDAsIGxldmVsOiAxNywgcG9pbnRzTmV4dDogMTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMTAwMDAsIGxldmVsOiAxOCwgcG9pbnRzTmV4dDogMTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMjAwMDAsIGxldmVsOiAxOSwgcG9pbnRzTmV4dDogMTU1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1NTAwMDAsIGxldmVsOiAyMCwgcG9pbnRzTmV4dDogMTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE4MDAwMDAsIGxldmVsOiAyMSwgcG9pbnRzTmV4dDogMjA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwNzAwMDAsIGxldmVsOiAyMiwgcG9pbnRzTmV4dDogMjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzNjAwMDAsIGxldmVsOiAyMywgcG9pbnRzTmV4dDogMjY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2NzAwMDAsIGxldmVsOiAyNCwgcG9pbnRzTmV4dDogMzAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMwMDAwMDAsIGxldmVsOiAyNSwgcG9pbnRzTmV4dDogMzM1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMzNTAwMDAsIGxldmVsOiAyNiwgcG9pbnRzTmV4dDogMzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM3MjAwMDAsIGxldmVsOiAyNywgcG9pbnRzTmV4dDogNDExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQxMTAwMDAsIGxldmVsOiAyOCwgcG9pbnRzTmV4dDogNDUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ1MjAwMDAsIGxldmVsOiAyOSwgcG9pbnRzTmV4dDogNDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ5NTAwMDAsIGxldmVsOiAzMCwgcG9pbnRzTmV4dDogNTQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU0MDAwMDAsIGxldmVsOiAzMSwgcG9pbnRzTmV4dDogNTg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU4NzAwMDAsIGxldmVsOiAzMiwgcG9pbnRzTmV4dDogNjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYzNjAwMDAsIGxldmVsOiAzMywgcG9pbnRzTmV4dDogNjg3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY4NzAwMDAsIGxldmVsOiAzNCwgcG9pbnRzTmV4dDogNzQwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc0MDAwMDAsIGxldmVsOiAzNSwgcG9pbnRzTmV4dDogNzk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc5NTAwMDAsIGxldmVsOiAzNiwgcG9pbnRzTmV4dDogODUyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDg1MjAwMDAsIGxldmVsOiAzNywgcG9pbnRzTmV4dDogOTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDkxMTAwMDAsIGxldmVsOiAzOCwgcG9pbnRzTmV4dDogOTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDk3MjAwMDAsIGxldmVsOiAzOSwgcG9pbnRzTmV4dDogMTAzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDM1MDAwMCwgbGV2ZWw6IDQwLCBwb2ludHNOZXh0OiAxMTAwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDExMDAwMDAwLCBsZXZlbDogNDEsIHBvaW50c05leHQ6IDExNjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTE2NzAwMDAsIGxldmVsOiA0MiwgcG9pbnRzTmV4dDogMTIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMjM2MDAwMCwgbGV2ZWw6IDQzLCBwb2ludHNOZXh0OiAxMzA3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEzMDcwMDAwLCBsZXZlbDogNDQsIHBvaW50c05leHQ6IDEzODAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTM4MDAwMDAsIGxldmVsOiA0NSwgcG9pbnRzTmV4dDogMTQ1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNDU1MDAwMCwgbGV2ZWw6IDQ2LCBwb2ludHNOZXh0OiAxNTMyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE1MzIwMDAwLCBsZXZlbDogNDcsIHBvaW50c05leHQ6IDE2MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTYxMTAwMDAsIGxldmVsOiA0OCwgcG9pbnRzTmV4dDogMTY5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxNjkyMDAwMCwgbGV2ZWw6IDQ5LCBwb2ludHNOZXh0OiAxNzc1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDE3NzUwMDAwLCBsZXZlbDogNTAsIHBvaW50c05leHQ6IDE4NjAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTg2MDAwMDAsIGxldmVsOiA1MSwgcG9pbnRzTmV4dDogMTk0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxOTQ3MDAwMCwgbGV2ZWw6IDUyLCBwb2ludHNOZXh0OiAyMDM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIwMzYwMDAwLCBsZXZlbDogNTMsIHBvaW50c05leHQ6IDIxMjcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjEyNzAwMDAsIGxldmVsOiA1NCwgcG9pbnRzTmV4dDogMjIyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyMjIwMDAwMCwgbGV2ZWw6IDU1LCBwb2ludHNOZXh0OiAyMzE1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDIzMTUwMDAwLCBsZXZlbDogNTYsIHBvaW50c05leHQ6IDI0MTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjQxMjAwMDAsIGxldmVsOiA1NywgcG9pbnRzTmV4dDogMjUxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyNTExMDAwMCwgbGV2ZWw6IDU4LCBwb2ludHNOZXh0OiAyNjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI2MTIwMDAwLCBsZXZlbDogNTksIHBvaW50c05leHQ6IDI3MTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMjcxNTAwMDAsIGxldmVsOiA2MCwgcG9pbnRzTmV4dDogMjgyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAyODIwMDAwMCwgbGV2ZWw6IDYxLCBwb2ludHNOZXh0OiAyOTI3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDI5MjcwMDAwLCBsZXZlbDogNjIsIHBvaW50c05leHQ6IDMwMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzAzNjAwMDAsIGxldmVsOiA2MywgcG9pbnRzTmV4dDogMzE0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzMTQ3MDAwMCwgbGV2ZWw6IDY0LCBwb2ludHNOZXh0OiAzMjYwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDMyNjAwMDAwLCBsZXZlbDogNjUsIHBvaW50c05leHQ6IDMzNzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzM3NTAwMDAsIGxldmVsOiA2NiwgcG9pbnRzTmV4dDogMzQ5MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzNDkyMDAwMCwgbGV2ZWw6IDY3LCBwb2ludHNOZXh0OiAzNjExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM2MTEwMDAwLCBsZXZlbDogNjgsIHBvaW50c05leHQ6IDM3MzIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMzczMjAwMDAsIGxldmVsOiA2OSwgcG9pbnRzTmV4dDogMzg1NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAzODU1MDAwMCwgbGV2ZWw6IDcwLCBwb2ludHNOZXh0OiAzOTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDM5ODAwMDAwLCBsZXZlbDogNzEsIHBvaW50c05leHQ6IDQxMDcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDEwNzAwMDAsIGxldmVsOiA3MiwgcG9pbnRzTmV4dDogNDIzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0MjM2MDAwMCwgbGV2ZWw6IDczLCBwb2ludHNOZXh0OiA0MzY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQzNjcwMDAwLCBsZXZlbDogNzQsIHBvaW50c05leHQ6IDQ1MDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDUwMDAwMDAsIGxldmVsOiA3NSwgcG9pbnRzTmV4dDogNDYzNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA0NjM1MDAwMCwgbGV2ZWw6IDc2LCBwb2ludHNOZXh0OiA0NzcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDQ3NzIwMDAwLCBsZXZlbDogNzcsIHBvaW50c05leHQ6IDQ5MTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNDkxMTAwMDAsIGxldmVsOiA3OCwgcG9pbnRzTmV4dDogNTA1MjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1MDUyMDAwMCwgbGV2ZWw6IDc5LCBwb2ludHNOZXh0OiA1MTk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDUxOTUwMDAwLCBsZXZlbDogODAsIHBvaW50c05leHQ6IDUzNDAwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTM0MDAwMDAsIGxldmVsOiA4MSwgcG9pbnRzTmV4dDogNTQ4NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1NDg3MDAwMCwgbGV2ZWw6IDgyLCBwb2ludHNOZXh0OiA1NjM2MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDU2MzYwMDAwLCBsZXZlbDogODMsIHBvaW50c05leHQ6IDU3ODcwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNTc4NzAwMDAsIGxldmVsOiA4NCwgcG9pbnRzTmV4dDogNTk0MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA1OTQwMDAwMCwgbGV2ZWw6IDg1LCBwb2ludHNOZXh0OiA2MDk1MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDYwOTUwMDAwLCBsZXZlbDogODYsIHBvaW50c05leHQ6IDYyNTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjI1MjAwMDAsIGxldmVsOiA4NywgcG9pbnRzTmV4dDogNjQxMTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2NDExMDAwMCwgbGV2ZWw6IDg4LCBwb2ludHNOZXh0OiA2NTcyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDY1NzIwMDAwLCBsZXZlbDogODksIHBvaW50c05leHQ6IDY3MzUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNjczNTAwMDAsIGxldmVsOiA5MCwgcG9pbnRzTmV4dDogNjkwMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA2OTAwMDAwMCwgbGV2ZWw6IDkxLCBwb2ludHNOZXh0OiA3MDY3MDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDcwNjcwMDAwLCBsZXZlbDogOTIsIHBvaW50c05leHQ6IDcyMzYwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzIzNjAwMDAsIGxldmVsOiA5MywgcG9pbnRzTmV4dDogNzQwNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3NDA3MDAwMCwgbGV2ZWw6IDk0LCBwb2ludHNOZXh0OiA3NTgwMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDc1ODAwMDAwLCBsZXZlbDogOTUsIHBvaW50c05leHQ6IDc3NTUwMDAwIH0sXHJcbiAgICB7IHBvaW50czogNzc1NTAwMDAsIGxldmVsOiA5NiwgcG9pbnRzTmV4dDogNzkzMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA3OTMyMDAwMCwgbGV2ZWw6IDk3LCBwb2ludHNOZXh0OiA4MTExMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDgxMTEwMDAwLCBsZXZlbDogOTgsIHBvaW50c05leHQ6IDgyOTIwMDAwIH0sXHJcbiAgICB7IHBvaW50czogODI5MjAwMDAsIGxldmVsOiA5OSwgcG9pbnRzTmV4dDogODQ3NTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NDc1MDAwMCwgbGV2ZWw6IDEwMCwgcG9pbnRzTmV4dDogODY2MDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4NjYwMDAwMCwgbGV2ZWw6IDEwMSwgcG9pbnRzTmV4dDogODg0NzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA4ODQ3MDAwMCwgbGV2ZWw6IDEwMiwgcG9pbnRzTmV4dDogOTAzNjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MDM2MDAwMCwgbGV2ZWw6IDEwMywgcG9pbnRzTmV4dDogOTIyNzAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5MjI3MDAwMCwgbGV2ZWw6IDEwNCwgcG9pbnRzTmV4dDogOTQyMDAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NDIwMDAwMCwgbGV2ZWw6IDEwNSwgcG9pbnRzTmV4dDogOTYxNTAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5NjE1MDAwMCwgbGV2ZWw6IDEwNiwgcG9pbnRzTmV4dDogOTgxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiA5ODEyMDAwMCwgbGV2ZWw6IDEwNywgcG9pbnRzTmV4dDogMTAwMTEwMDAwIH0sXHJcbiAgICB7IHBvaW50czogMTAwMTEwMDAwLCBsZXZlbDogMTA4LCBwb2ludHNOZXh0OiAxMDIxMjAwMDAgfSxcclxuICAgIHsgcG9pbnRzOiAxMDIxMjAwMDAsIGxldmVsOiAxMDksIHBvaW50c05leHQ6IDEwMjEyMDAwMCB9LFxyXG4gICAgeyBwb2ludHM6IDEwNDE1MDAwMCwgbGV2ZWw6IDExMCwgcG9pbnRzTmV4dDogMTA2MTUwMDAwIH0sXHJcbiAgXTtcclxuICBcclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzOiBudW1iZXIpOiBMZXZlbERhdGEge1xyXG4gICAgbGV0IGxldmVsIDpMZXZlbERhdGEgPSBsZXZlbERhdGFbMF07XHJcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgbGV2ZWxEYXRhKSB7XHJcbiAgICAgIGlmIChwb2ludHMgPj0gZGF0YS5wb2ludHMpIHtcclxuICAgICAgICBsZXZlbCA9IGRhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzdGF0dXNQb2ludHNGb3JMZXZlbCh0YXJnZXRMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGF0dXNQb2ludHMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGxldmVsRGF0YSkge1xyXG4gICAgICBpZiAodGFyZ2V0TGV2ZWwgPT0gZGF0YS5sZXZlbCAmJiBzdGF0dXNQb2ludHMgPT0gMCkge1xyXG4gICAgICAgIHN0YXR1c1BvaW50cyA9IGRhdGEucG9pbnRzO1xyXG4gICAgICB9IFxyXG4gICAgfVxyXG5cclxuXHRcdFxyXG5cdFx0cmV0dXJuIHN0YXR1c1BvaW50c1xyXG4gIH1cclxuICBcclxuXHJcbi8qXHJcbmNvbnN0IHBvaW50cyA9IDU1MDA7XHJcbmNvbnN0IGxldmVsID0gZ2V0TGV2ZWxGb3JQb2ludHMocG9pbnRzKTtcclxuY29uc29sZS5sb2coYFdpdGggJHtwb2ludHN9IHBvaW50cywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgJHtsZXZlbH0uYCk7XHJcbiovIiwgImNvbnN0IG1lc3NhZ2VzV2Vla2x5Q2hhbGxlbmdlOiBzdHJpbmdbXSA9IFtcclxuXHRcIlNldmVuIGRheXMgb2Ygbm90ZS10YWtpbmc/IFlvdSdyZSBwcmFjdGljYWxseSBhIG5vdGUgbmluamEgdHVydGxlIG5vdyEgXHVEODNEXHVEQzIyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGNvd2FidW5nYSFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGNvbXBsZXRlZCBhIHdlZWstbG9uZyBub3RlLXRha2luZyBtYXJhdGhvbiEgXHVEODNDXHVERkMzXHUyMDBEXHUyNjQyXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMgZWFybmVkLiBSZWFkeSBmb3IgdGhlIG5leHQgbGFwP1wiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgdGhlIHNwYXJrIGFsaXZlIVwiLFxyXG5cdFwiU2V2ZW4gbm90ZXMgaW4gc2V2ZW4gZGF5cyAtIHRoYXQncyBsaWtlIGEgbm90ZSBzeW1waG9ueSEgXHVEODNDXHVERkI2XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIG1hZXN0cm8hXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgZmllc3RhISBcdUQ4M0NcdURGODlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgcGFydHkgZ29pbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIFlvdSdyZSBsaWtlIHRoZSBKYW1lcyBCb25kIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURENzZcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc2VjcmV0IGFnZW50IVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAnTm90ZS1BLURheScgc3VwZXJoZXJvISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgY2FwZXMgb3B0aW9uYWwhXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSd2ZSBwcmFjdGljYWxseSB3cml0dGVuIGEgbWluaSBub3ZlbCBieSBub3chIFx1RDgzRFx1RENEQVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBhdXRob3Igc3RhdHVzIGFjaGlldmVkIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cyBzdHJhaWdodD8gWW91J3JlIHRoZSBVc2FpbiBCb2x0IG9mIG5vdGUtdGFraW5nISBcdUQ4M0NcdURGQzNcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgc3ByaW50aW5nIHRvd2FyZHMga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNwcmVlISBJdCdzIGxpa2UgYSBub3Rlcy1wbG9zaW9uISBcdUQ4M0RcdURDQTVcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCB0aGUgZmlyZXdvcmtzIGNvbWluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGJhc2ljYWxseSB0aGUgTWljaGFlbCBKb3JkYW4gb2Ygbm90ZS10YWtpbmchIFx1RDgzQ1x1REZDMFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBzbGFtIGR1bmshXCIsXHJcblx0XCJBIHdob2xlIHdlZWsgb2Ygbm90ZXM/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTVZQISBcdUQ4M0NcdURGQzZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzY29yaW5nIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlICdTZXZlbiBEYXkgTm90ZSBGZXZlcicgYWNoaWV2ZW1lbnQhIFx1RDgzQ1x1REYxRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjYXRjaCB0aGUgZmV2ZXIhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIHJvY2tzdGFyISBcdUQ4M0NcdURGQjhcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBqYW1taW4nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIG1hZ2ljIHNob3chIE5vdyB5b3Ugc2VlIHRoZSBub3Rlcywgbm93IHlvdSBkb24ndCEgXHVEODNDXHVERkE5XHUyNzI4IFtYXSBwb2ludHMsIGtlZXAgdGhlIG1hZ2ljIGFsaXZlIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgbGlrZSBhIG5vdGUtdGFraW5nIEplZGkgTWFzdGVyISBcdUQ4M0NcdURGMENcdTI2OTRcdUZFMEYgW1hdIHBvaW50cywgbWF5IHRoZSBub3RlcyBiZSB3aXRoIHlvdSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgVG9ueSBIYXdrIG9mIG5vdGUtdGFraW5nISBcdUQ4M0RcdURFRjlcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzaHJlZGRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9sbGVyY29hc3RlciEgVXAgYW5kIGRvd24sIGJ1dCBhbHdheXMgbW92aW5nIGZvcndhcmQhIFx1RDgzQ1x1REZBMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgcmlkZSFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgREogc3Bpbm5pbmcga25vd2xlZGdlIGJlYXRzISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZHJvcCB0aGUga25vd2xlZGdlIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgY29ucXVlcmVkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgY2hhbGxlbmdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIEluZGlhbmEgSm9uZXMhIFx1RDgzQ1x1REZGOVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBTaGVybG9jayBIb2xtZXMsIHNvbHZpbmcga25vd2xlZGdlIG15c3RlcmllcyEgXHVEODNEXHVERDBEXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xldXRoaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBQaWNhc3NvLCBjcmVhdGluZyBhIG1hc3RlcnBpZWNlIG9mIGtub3dsZWRnZSEgXHVEODNDXHVERkE4XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgcGFpbnRpbmchXCIsXHJcblx0XCJZb3UncmUgb24gYSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgcm9ja2V0IHNoaXAhIERlc3RpbmF0aW9uOiBJbmZpbml0ZSBLbm93bGVkZ2UhIFx1RDgzRFx1REU4MFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBlbmpveSB0aGUgam91cm5leSFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgTWFjR3l2ZXIsIHR1cm5pbmcgaW5mb3JtYXRpb24gaW50byBzb2x1dGlvbnMhIFx1RDgzRFx1REQyN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGNyYWZ0aW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHNhZmFyaSwgZXhwbG9yaW5nIHRoZSB3aWxkcyBvZiBrbm93bGVkZ2UhIFx1RDgzRFx1REMxOFx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIGV4cGxvcmluZyFcIixcclxuXHRcIlNldmVuIGRheXMsIHNldmVuIG5vdGVzIC0geW91J3JlIGEgbm90ZS10YWtpbmcgY2hlZiwgY29va2luZyB1cCBhIGtub3dsZWRnZSBmZWFzdCEgXHVEODNDXHVERjczXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgY29va2luZyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IHVubG9ja2VkIHRoZSBzZXZlbi1kYXkgbm90ZS10YWtpbmcgYmFkZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgc3VwZXJoZXJvIHdlIG5lZWQhIFx1RDgzRVx1RERCOFx1MjAwRFx1MjY0MFx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHNhdmluZyB0aGUgZGF5IVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIExld2lzIGFuZCBDbGFyaywgY2hhcnRpbmcgbmV3IHRlcnJpdG9yaWVzIG9mIGtub3dsZWRnZSEgXHVEODNEXHVEREZBXHVGRTBGXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2NrZXQgc2hpcCEgRGVzdGluYXRpb246IEluZmluaXRlIEtub3dsZWRnZSEgXHVEODNEXHVERTgwXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSBqb3VybmV5IVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBkZXRlY3RpdmUsIHNvbHZpbmcgY2FzZXMgb2YgY3VyaW9zaXR5ISBcdUQ4M0RcdURENzVcdUZFMEZcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBkZXRlY3RpbmchXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIGJhZGdlISBZb3UncmUgdGhlIG5vdGUtdGFraW5nIHN1cGVyaGVybyB3ZSBuZWVkISBcdUQ4M0VcdUREQjhcdTIwMERcdTI2NDJcdUZFMEZcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzYXZpbmcgdGhlIGRheSFcIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIHRoZSBub3RlLXRha2luZyBwaW9uZWVyLCBibGF6aW5nIHRyYWlscyB0aHJvdWdoIHRoZSBmb3Jlc3RzIG9mIGluZm9ybWF0aW9uISBcdUQ4M0NcdURGMzJcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwaW9uZWVyaW5nIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiwgZHJvcHBpbmcgYmVhdHMgb2Ygd2lzZG9tISBcdUQ4M0NcdURGQTdcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzcGlubmluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyB0cmVhc3VyZSBodW50LCBkaXNjb3ZlcmluZyBnZW1zIG9mIHdpc2RvbSEgXHVEODNEXHVEQzhFXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgaHVudGluZyFcIixcclxuXHRcIlNldmVuIGRheXMgc3RyYWlnaHQ/IFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgbmluamEgd2FycmlvciwgY29ucXVlcmluZyB0aGUga25vd2xlZGdlIG9ic3RhY2xlIGNvdXJzZSEgXHVEODNFXHVERDRCXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2xheWluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyByb2xsZXJjb2FzdGVyISBVcCBhbmQgZG93biwgYnV0IGFsd2F5cyBtb3ZpbmcgZm9yd2FyZCEgXHVEODNDXHVERkEyXHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGVuam95IHRoZSByaWRlIVwiLFxyXG5cdFwiU2V2ZW4gZGF5cywgc2V2ZW4gbm90ZXMgLSB5b3UncmUgYSBub3RlLXRha2luZyBESiBzcGlubmluZyBrbm93bGVkZ2UgYmVhdHMhIFx1RDgzQ1x1REZBN1x1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBkcm9wIHRoZSBrbm93bGVkZ2UhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb25xdWVyZWQgdGhlIHNldmVuLWRheSBub3RlLXRha2luZyBjaGFsbGVuZ2UhIFlvdSdyZSB0aGUgbm90ZS10YWtpbmcgSW5kaWFuYSBKb25lcyEgXHVEODNDXHVERkY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgZXhwbG9yaW5nIVwiLFxyXG5cdFwiQSB3aG9sZSB3ZWVrIG9mIG5vdGVzPyBZb3UncmUgdGhlIG5vdGUtdGFraW5nIFNoZXJsb2NrIEhvbG1lcywgc29sdmluZyBrbm93bGVkZ2UgbXlzdGVyaWVzISBcdUQ4M0RcdUREMERcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBzbGV1dGhpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIFBpY2Fzc28sIGNyZWF0aW5nIGEgbWFzdGVycGllY2Ugb2Yga25vd2xlZGdlISBcdUQ4M0NcdURGQThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBwYWludGluZyFcIixcclxuXHRcIllvdSdyZSBvbiBhIHNldmVuLWRheSBub3RlLXRha2luZyBzYWZhcmksIGV4cGxvcmluZyB0aGUgd2lsZHMgb2Yga25vd2xlZGdlISBcdUQ4M0RcdURDMThcdUQ4M0RcdURDREQgW1hdIHBvaW50cywga2VlcCBleHBsb3JpbmchXCIsXHJcblx0XCJTZXZlbiBkYXlzIHN0cmFpZ2h0PyBZb3UncmUgdGhlIFRvbnkgSGF3ayBvZiBub3RlLXRha2luZyEgXHVEODNEXHVERUY5XHVEODNEXHVEQ0REIFtYXSBwb2ludHMsIGtlZXAgc2hyZWRkaW5nIVwiLFxyXG5cdFwiWW91J3JlIG9uIGEgc2V2ZW4tZGF5IG5vdGUtdGFraW5nIHJvY2tldCBzaGlwISBEZXN0aW5hdGlvbjogSW5maW5pdGUgS25vd2xlZGdlISBcdUQ4M0RcdURFODBcdUQ4M0RcdURDREQgW1hdIHBvaW50cywgZW5qb3kgdGhlIGpvdXJuZXkhXCIsXHJcblx0XCJTZXZlbiBkYXlzLCBzZXZlbiBub3RlcyAtIHlvdSdyZSBhIG5vdGUtdGFraW5nIG5pbmphIHR1cnRsZSBub3chIFx1RDgzRFx1REMyMlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBjb3dhYnVuZ2EhXCIsXHJcblx0XCJZb3UndmUganVzdCBjb21wbGV0ZWQgYSB3ZWVrLWxvbmcgbm90ZS10YWtpbmcgbWFyYXRob24hIFx1RDgzQ1x1REZDM1x1MjAwRFx1MjY0Mlx1RkUwRlx1RDgzRFx1RENERCBbWF0gcG9pbnRzIGVhcm5lZC4gUmVhZHkgZm9yIHRoZSBuZXh0IGxhcD9cIixcclxuXHRcIkEgd2hvbGUgd2VlayBvZiBub3Rlcz8gWW91J3JlIG9uIGZpcmUhIFx1RDgzRFx1REQyNVx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBrZWVwIHRoZSBzcGFyayBhbGl2ZSFcIixcclxuXHRcIlNldmVuIG5vdGVzIGluIHNldmVuIGRheXMgLSB0aGF0J3MgbGlrZSBhIG5vdGUgc3ltcGhvbnkhIFx1RDgzQ1x1REZCNlx1RDgzRFx1RENERCBbWF0gcG9pbnRzLCBtYWVzdHJvIVwiXHJcbl07XHJcblxyXG5jb25zdCB0d29Ob3RlTWVzc2FnZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQm9vbSEgWW91IGp1c3QgYWNlZCB0aGUgMi1ub3RlIHRhbmdvISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIGdyb292aW4nIVwiLFxyXG5cdFwiVHdvIG5vdGVzIGluIGEgZGF5PyBZb3UncmUgb2ZmaWNpYWxseSBhIE5vdGUgTmluamEhIFx1RDgzRVx1REQ0QiBbWF0gcG9pbnRzIGVhcm5lZC4gUm9jayBvbiFcIixcclxuXHRcIkhpZ2gtZml2ZSEgWW91J3ZlIGNvbnF1ZXJlZCB0aGUgMi1ub3RlIHJvZGVvISBcdUQ4M0VcdUREMjAgW1hdIHBvaW50cyBlYXJuZWQuIFllZWhhdyFcIixcclxuXHRcIkRvdWJsZSB0cm91YmxlISBUd28gbm90ZXMgaW4gb25lIGRheSwgeW91IGxlZ2VuZCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMsIHJvY2tzdGFyIVwiLFxyXG5cdFwiWW91J3JlIG9uIGZpcmUhIFR3byBub3RlcyBpbiBhIGRheSAtIHdoYXQncyB5b3VyIHNlY3JldCB3ZWFwb24/IFx1RDgzRFx1REQyNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiS2Fib29tISBZb3UganVzdCBibGV3IHRoZSAyLW5vdGUgY2hhbGxlbmdlIG91dCBvZiB0aGUgd2F0ZXIhIFx1RDgzRFx1RENBNSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiWW91J3JlIG9mZmljaWFsbHkgYSAyLW5vdGUgc3VwZXJzdGFyISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBpbiB0aGUgYmFnLiBLZWVwIHNoaW5pbmchXCIsXHJcblx0XCJEb3VibGUgdXAsIGRvdWJsZSBkb3duISBUd28gbm90ZXMgaW4gb25lIGRheSAtIHlvdSdyZSBhIHJvY2tzdGFyISBcdUQ4M0NcdURGQjggW1hdIHBvaW50cyFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIHBhcnR5ISBcdUQ4M0VcdURENzMgW1hdIHBvaW50cyBlYXJuZWQuIExldCdzIGtlZXAgZGFuY2luZyFcIixcclxuXHRcIkthLWNoaW5nISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSByYWNraW5nIHVwIHRob3NlIHBvaW50cyEgXHVEODNEXHVEQ0IwIFtYXSBlYXJuZWQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFnaWNpYW4hIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCB0cmljaz9cIixcclxuXHRcIlR3byBub3Rlcz8gTmFpbGVkIGl0ISBZb3UncmUgb24gYSByb2xsISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgaXQgZ29pbmchXCIsXHJcblx0XCJBYnJhLWNhZGFicmEhIFR3byBub3RlcyBhcHBlYXIhIFx1RDgzQ1x1REZBOVx1MjcyOCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCB0aGUgbWFnaWMgYWxpdmUhXCIsXHJcblx0XCJEb3VibGUgdHJvdWJsZSwgZG91YmxlIHRoZSBmdW4hIFR3byBub3RlcyBpbiBvbmUgZGF5ISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiWW91J3ZlIGp1c3QgdW5sb2NrZWQgdGhlIDItbm90ZSBhY2hpZXZlbWVudCEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNvYXJpbmchXCIsXHJcblx0XCJXb28taG9vISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBmaXJlISBcdUQ4M0RcdUREMjUgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSB3aXphcmQhIFx1MjcyOFx1RDgzRFx1REQyRSBbWF0gcG9pbnRzIGVhcm5lZC4gV2hhdCdzIHlvdXIgbmV4dCBzcGVsbD9cIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgYXdlc29tZW5lc3MhIFx1RDgzQ1x1REYxRiBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGtpY2tlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSBvdXQgb2YgdGhlIHBhcmshIFx1MjZCRSBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiQm9vbSEgWW91IGp1c3QgY29ucXVlcmVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdUQ4M0NcdURGODkgW1hdIHBvaW50cywgc3VwZXJzdGFyIVwiLFxyXG5cdFwiRG91YmxlIHRoZSBub3RlcywgZG91YmxlIHRoZSBjZWxlYnJhdGlvbiEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBQYXJ0eSBvbiFcIixcclxuXHRcIllvdSdyZSBhIDItbm90ZSBtYWVzdHJvISBcdUQ4M0NcdURGQjUgW1hdIHBvaW50cyBpbiB0aGUgcG9ja2V0LiBLZWVwIHRoZSBtdXNpYyBwbGF5aW5nIVwiLFxyXG5cdFwiS2Fib29tISBUd28gbm90ZXMgaW4gYSBkYXkhIFlvdSdyZSBvbiBhIHJvbGwhIFx1RDgzRFx1REU4MCBbWF0gcG9pbnRzIGVhcm5lZC4gS2VlcCBpdCB1cCFcIixcclxuXHRcIllvdSd2ZSBqdXN0IGpvaW5lZCB0aGUgMi1ub3RlIGZpZXN0YSEgXHVEODNFXHVERDczIFtYXSBwb2ludHMgZWFybmVkLiBMZXQncyBrZWVwIGRhbmNpbmchXCIsXHJcblx0XCJaYXAhIFlvdSd2ZSBqdXN0IGVsZWN0cmlmaWVkIHRoZSAyLW5vdGUgY2hhbGxlbmdlISBcdTI2QTEgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJEb3VibGUgbm90ZXMsIGRvdWJsZSB0aGUgc3BhcmtsZSEgXHVEODNDXHVERjFGIFtYXSBwb2ludHMgZWFybmVkLiBLZWVwIHNoaW5pbmcgYnJpZ2h0IVwiLFxyXG5cdFwiWW91J3JlIGEgMi1ub3RlIGR5bmFtbyEgXHVEODNEXHVEQ0E1IFtYXSBwb2ludHMgZWFybmVkLiBXaGF0J3MgeW91ciBuZXh0IGV4cGxvc2lvbj9cIixcclxuXHRcIkthYm9vbSEgVHdvIG5vdGVzIGluIGEgZGF5ISBZb3UncmUgb24gZmlyZSEgXHVEODNEXHVERDI1IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UndmUganVzdCB1bmxvY2tlZCB0aGUgMi1ub3RlIGFjaGlldmVtZW50ISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc29hcmluZyFcIixcclxuXHRcIldvby1ob28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiLFxyXG5cdFwiS2Fwb3chIFR3byBub3RlcyBpbiBhIGRheSAtIHlvdSdyZSBhIHN1cGVyaGVybyEgXHVEODNFXHVEREI4XHUyMDBEXHUyNjQyXHVGRTBGIFtYXSBwb2ludHMhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbGVnZW5kISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgYWR2ZW50dXJlP1wiLFxyXG5cdFwiQmluZ28hIFR3byBub3RlcyBpbiBhIGRheSEgWW91J3JlIG9uIGEgcm9sbCEgXHVEODNEXHVERTgwIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgd2l6YXJkISBcdTI3MjhcdUQ4M0RcdUREMkUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgc3BlbGw/XCIsXHJcblx0XCJEb3VibGUgdGhlIG5vdGVzLCBkb3VibGUgdGhlIGF3ZXNvbWVuZXNzISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cywgcm9ja3N0YXIhXCIsXHJcblx0XCJZb3UndmUganVzdCBraWNrZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2Ugb3V0IG9mIHRoZSBwYXJrISBcdTI2QkUgW1hdIHBvaW50cyFcIixcclxuXHRcIkJvb20hIFlvdSBqdXN0IGNvbnF1ZXJlZCB0aGUgMi1ub3RlIGNoYWxsZW5nZSEgXHVEODNDXHVERjg5IFtYXSBwb2ludHMsIHN1cGVyc3RhciFcIixcclxuXHRcIkRvdWJsZSB0aGUgbm90ZXMsIGRvdWJsZSB0aGUgY2VsZWJyYXRpb24hIFx1RDgzRVx1REQ3MyBbWF0gcG9pbnRzIGVhcm5lZC4gUGFydHkgb24hXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgbWFlc3RybyEgXHVEODNDXHVERkI1IFtYXSBwb2ludHMgaW4gdGhlIHBvY2tldC4gS2VlcCB0aGUgbXVzaWMgcGxheWluZyFcIixcclxuXHRcIlphcCEgWW91J3ZlIGp1c3QgZWxlY3RyaWZpZWQgdGhlIDItbm90ZSBjaGFsbGVuZ2UhIFx1MjZBMSBbWF0gcG9pbnRzLCByb2Nrc3RhciFcIixcclxuXHRcIkRvdWJsZSBub3RlcywgZG91YmxlIHRoZSBzcGFya2xlISBcdUQ4M0NcdURGMUYgW1hdIHBvaW50cyBlYXJuZWQuIEtlZXAgc2hpbmluZyBicmlnaHQhXCIsXHJcblx0XCJZb3UncmUgYSAyLW5vdGUgZHluYW1vISBcdUQ4M0RcdURDQTUgW1hdIHBvaW50cyBlYXJuZWQuIFdoYXQncyB5b3VyIG5leHQgZXhwbG9zaW9uP1wiXHJcbl07XHJcblxyXG5jb25zdCByYW5kb21Qb2ludE5vdGljZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiQmF6aW5nYSEgWW91IGp1c3Qgc25hZ2dlZCBbWF0gcG9pbnRzIVwiLFxyXG5cdFwiS2Fib29tISBbWF0gcG9pbnRzIGFyZSBub3cgaW4geW91ciBwb2NrZXQhXCIsXHJcblx0XCJXb29ob28hIFtYXSBwb2ludHMgZWFybmVkISBLZWVwIGl0IHVwIVwiLFxyXG5cdFwiUG9pbnRzIGFob3khIFtYXSBtb3JlIGluIHRoZSBiYW5rIVwiLFxyXG5cdFwiU2NvcmUhIFtYXSBwb2ludHMgYWRkZWQgdG8geW91ciB0b3RhbCFcIixcclxuXHRcIllvdSdyZSBvbiBmaXJlISBbWF0gcG9pbnRzIGluIHRoZSBiYWchXCIsXHJcblx0XCJaaXBwaXR5LXphcCEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiQ2hhbXBpb24gbW92ZSEgW1hdIHBvaW50cyBhcmUgeW91cnMhXCIsXHJcblx0XCJCaW5nbyEgW1hdIHBvaW50cyBqdXN0IGZvciB5b3UhXCIsXHJcblx0XCJTaGF6YW0hIFtYXSBwb2ludHMgdG8gdGhlIHJlc2N1ZSFcIixcclxuXHRcIkthLWNoaW5nISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlN1cGVyYiEgW1hdIG1vcmUgcG9pbnRzIGZvciB5b3UhXCIsXHJcblx0XCJCcmF2byEgW1hdIHBvaW50cyBhZGRlZCB0byB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiV2VsbCBkb25lISBbWF0gbW9yZSBwb2ludHMgaW4gdG93IVwiLFxyXG5cdFwiWmFwISBbWF0gcG9pbnRzLCBqdXN0IGxpa2UgdGhhdCFcIixcclxuXHRcIkEgcm91bmQgb2YgYXBwbGF1c2UgZm9yIFtYXSBwb2ludHMhXCIsXHJcblx0XCJXaG9vc2ghIFtYXSBwb2ludHMgYXJlIHlvdXJzIVwiLFxyXG5cdFwiWmluZyEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiV29vISBbWF0gcG9pbnRzLCB3YXkgdG8gZ28hXCIsXHJcblx0XCJaZXN0eSEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiR3JlYXQgam9iISBbWF0gbW9yZSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIkZhbnRhc3RpYyEgW1hdIHBvaW50cyBpbiB0aGUgYmFnIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiSG9vcmF5ISBbWF0gcG9pbnRzIGluIHlvdXIgYWNjb3VudCFcIixcclxuXHRcIk5pY2Ugb25lISBbWF0gcG9pbnRzIGluIHRoZSBwb2NrZXQhXCIsXHJcblx0XCJXb290IHdvb3QhIFtYXSBwb2ludHMsIG5pY2Ugd29yayFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cywga2VlcCBpdCB1cCFcIixcclxuXHRcIkJhbSEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiQ29vbCBiZWFucyEgW1hdIHBvaW50cyBmb3IgeW91IVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMsIGtlZXAgaXQgdXAhXCIsXHJcblx0XCJTcGxlbmRpZCEgW1hdIHBvaW50cyBmb3IgeW91ciBlZmZvcnRzIVwiLFxyXG5cdFwiTWFydmVsb3VzISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlphbnkhIFtYXSBwb2ludHMsIHdlbGwgZG9uZSFcIixcclxuXHRcIkV4cXVpc2l0ZSEgW1hdIHBvaW50cyBpbiB5b3VyIHN0YXNoIVwiLFxyXG5cdFwiT3V0c3RhbmRpbmchIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIGpvYiFcIixcclxuXHRcIk1hZ25pZmljZW50ISBbWF0gcG9pbnRzIGVhcm5lZCFcIixcclxuXHRcIlppZ3phZyEgW1hdIHBvaW50cyBpbiB5b3VyIHRhbGx5IVwiLFxyXG5cdFwiVGVycmlmaWMhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlN1cGVyYiEgW1hdIHBvaW50cywgd2VsbCBkb25lIVwiLFxyXG5cdFwiWm93aWUhIFtYXSBwb2ludHMgZm9yIHlvdXIgZWZmb3J0cyFcIixcclxuXHRcIkV4Y2VsbGVudCEgW1hdIHBvaW50cyBlYXJuZWQhXCIsXHJcblx0XCJaYXAhIFtYXSBwb2ludHMgaW4geW91ciBhY2NvdW50IVwiLFxyXG5cdFwiQXdlc29tZSEgW1hdIHBvaW50cywgd2F5IHRvIGdvIVwiLFxyXG5cdFwiV2VsbCBwbGF5ZWQhIFtYXSBwb2ludHMgZm9yIHlvdSFcIixcclxuXHRcIlplc3R5ISBbWF0gcG9pbnRzLCBuaWNlIHdvcmshXCIsXHJcblx0XCJJbXByZXNzaXZlISBbWF0gcG9pbnRzLCBrZWVwIGl0IHVwIVwiLFxyXG5cdFwiQnJpbGxpYW50ISBbWF0gcG9pbnRzLCB3ZWxsIGRvbmUhXCIsXHJcblx0XCJaaW5nISBbWF0gcG9pbnRzIGZvciB5b3VyIGVmZm9ydHMhXCIsXHJcblx0XCJOaWNlIG1vdmUhIFtYXSBwb2ludHMgZWFybmVkIVwiLFxyXG5cdFwiWmVzdHkhIFtYXSBwb2ludHMgaW4gdGhlIGJhZyFcIixcclxuXHRcIlN0ZWxsYXIhIFtYXSBwb2ludHMganVzdCBmb3IgeW91IVwiLFxyXG5cdFwiV2VsbCBkZXNlcnZlZCEgW1hdIHBvaW50cyBlYXJuZWQhXCJcclxuXTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVdlZWtseUNoYWxsZW5nZShwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZS5sZW5ndGgpO1xyXG5cdGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1dlZWtseUNoYWxsZW5nZVtyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVR3b05vdGVDaGFsbGVuZ2UocG9pbnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdHdvTm90ZU1lc3NhZ2VzLmxlbmd0aCk7XHJcblx0Y29uc3QgbWVzc2FnZSA9IHR3b05vdGVNZXNzYWdlc1tyYW5kb21JbmRleF07XHJcblx0cmV0dXJuIG1lc3NhZ2UucmVwbGFjZShcIltYXVwiLCBwb2ludHMudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tTWVzc2FnZVBvaW50cyhwb2ludHM6IG51bWJlcik6IHN0cmluZyB7XHJcblx0Y29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiByYW5kb21Qb2ludE5vdGljZXMubGVuZ3RoKTtcclxuXHRjb25zdCBtZXNzYWdlID0gcmFuZG9tUG9pbnROb3RpY2VzW3JhbmRvbUluZGV4XTtcclxuXHRyZXR1cm4gbWVzc2FnZS5yZXBsYWNlKFwiW1hdXCIsIHBvaW50cy50b1N0cmluZygpKTtcclxufVxyXG5cclxuLy8gRXhhbXBsZSB1c2FnZVxyXG4vLyBjb25zdCByYW5kb21Qb2ludHMgPSAxMDA7IC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBwb2ludHMgdmFsdWVcclxuLy8gY29uc3QgcmFuZG9tTWVzc2FnZSA9IGdldFJhbmRvbU1lc3NhZ2VXZWVrbHlDaGFsbGVuZ2UocmFuZG9tUG9pbnRzKTtcclxuLy8gY29uc29sZS5sb2cocmFuZG9tTWVzc2FnZSk7XHJcblxyXG5cclxuIiwgImltcG9ydCB7IEFwcCwgTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kYWxJbmZvcm1hdGlvbmJveCBleHRlbmRzIE1vZGFsIHtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlUZXh0OiBzdHJpbmc7IC8vIFN0b3JlIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZGlzcGxheVRleHQ6IHN0cmluZykge1xyXG5cdFx0c3VwZXIoYXBwKTtcclxuXHRcdHRoaXMuZGlzcGxheVRleHQgPSBkaXNwbGF5VGV4dDsgLy8gU3RvcmUgdGhlIHBhc3NlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpOyAvLyBVc2UgdGhlIHN0b3JlZCB0ZXh0XHJcblx0fVxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCBnYW1pZmljYXRpb24gZnJvbSAnbWFpbic7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0TW9kYWwgfSBmcm9tICdNdWx0aVNlbGVjdE1vZGFsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2RhbEJvb3N0ZXIgZXh0ZW5kcyBNb2RhbCB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VGV4dDogc3RyaW5nO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgZ2FtaWZpY2F0aW9uSW5zdGFuY2U6IGdhbWlmaWNhdGlvbjtcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGRpc3BsYXlUZXh0OiBzdHJpbmcsIGdhbWlmaWNhdGlvbkluc3RhbmNlOiBnYW1pZmljYXRpb24pIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLmRpc3BsYXlUZXh0ID0gZGlzcGxheVRleHQ7XHJcblx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlID0gZ2FtaWZpY2F0aW9uSW5zdGFuY2U7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcclxuXHRcdGNvbnRlbnRFbC5zZXRUZXh0KHRoaXMuZGlzcGxheVRleHQpO1xyXG5cclxuXHRcdGNvbnN0IG11bHRpU2VsZWN0TW9kYWwgPSBuZXcgTXVsdGlTZWxlY3RNb2RhbCh0aGlzLmFwcCwgW10sICdDcmFmdCBCb29zdGVyIEl0ZW0nLCB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlKTsgLy8gQ3JlYXRlIHRoZSBtb2RhbCBpbnN0YW5jZVxyXG5cclxuXHJcblx0XHQvLyBBZGQgYSBidXR0b24gdG8gb3BlbiB0aGUgbXVsdGktc2VsZWN0IG1vZGFsXHJcblx0XHRjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuXHRcdGJ1dHRvbi5pbm5lclRleHQgPSAnT3BlbiBDcmFmdGluZyBUYWJsZSc7XHJcblx0XHRidXR0b24ub25jbGljayA9ICgpID0+IHtcclxuXHRcdFx0bXVsdGlTZWxlY3RNb2RhbC5zZXRVc2VCb29zdGVyKGZhbHNlKTsgLy8gU2V0IHRoZSBmbGFnIGZvciBjcmFmdGluZyB0YWJsZVxyXG5cdFx0XHRtdWx0aVNlbGVjdE1vZGFsLm9wZW4oKTtcclxuXHRcdH07XHJcblxyXG5cclxuXHRcdG11bHRpU2VsZWN0TW9kYWwucmVhZEJvb3N0ZXJzU3RvY2soKTtcclxuXHRcdG11bHRpU2VsZWN0TW9kYWwucmVhZEluZ3JlbWVudFN0b2NrKCk7XHJcblxyXG5cclxuXHRcdGNvbnN0IGJ1dHRvbjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuXHRcdGJ1dHRvbjIuaW5uZXJUZXh0ID0gJ09wZW4gQm9vc3RlciBCb2FyZCc7XHJcblx0XHRidXR0b24yLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdG11bHRpU2VsZWN0TW9kYWwuc2V0VXNlQm9vc3Rlcih0cnVlKTtcclxuXHRcdFx0bXVsdGlTZWxlY3RNb2RhbC5vcGVuKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnRlbnRFbC5hcHBlbmRDaGlsZChidXR0b24pO1xyXG5cdFx0Y29udGVudEVsLmFwcGVuZENoaWxkKGJ1dHRvbjIpO1xyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XHJcblx0fVxyXG5cclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBNb2RhbCB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IHtcclxuXHRjcmFmdGluZ0l0ZW1zLFxyXG5cdGVsZW1lbnRzLFxyXG5cdGJvb3N0ZXJSZWNpcGVzLFxyXG5cdGxpc3RPZlVzZWFibGVCb29zdGVyc1RvQmVTaG93bixcclxuXHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd25cclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IE1vZGFsSW5mb3JtYXRpb25ib3ggfSBmcm9tICdNb2RhbEluZm9ybWF0aW9uYm94JztcclxuaW1wb3J0IGdhbWlmaWNhdGlvbiwgeyBpc01pbnV0ZXNQYXNzZWQsIGhvdXJzVW50aWxNaW51dGVzUGFzc2VkfSBmcm9tICdtYWluJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdE1vZGFsIGV4dGVuZHMgTW9kYWwge1xyXG5cdHByaXZhdGUgaXRlbXM6IHN0cmluZ1tdO1xyXG5cdHByaXZhdGUgc2VsZWN0ZWRJdGVtczogc3RyaW5nW10gPSBbXTtcclxuXHRwcml2YXRlIHJlbWFpbmluZ1N0b2NrOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcblx0cHJpdmF0ZSBidXR0b25UZXh0OiBzdHJpbmc7XHJcblx0cHJpdmF0ZSByZWFkb25seSBnYW1pZmljYXRpb25JbnN0YW5jZTogZ2FtaWZpY2F0aW9uO1xyXG5cdHByaXZhdGUgYm9vc3RlcnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcclxuXHRwcml2YXRlIHVzZUJvb3N0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwcml2YXRlIHJlbWFpbmluZ0Jvb3N0ZXJTdG9jazogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgaXRlbXM6IHN0cmluZ1tdLCBidXR0b25UZXh0OiBzdHJpbmcsIGdhbWlmaWNhdGlvbkluc3RhbmNlOiBnYW1pZmljYXRpb24pIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0XHR0aGlzLml0ZW1zID0gaXRlbXM7XHJcblx0XHR0aGlzLmJ1dHRvblRleHQgPSBidXR0b25UZXh0O1xyXG5cdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZSA9IGdhbWlmaWNhdGlvbkluc3RhbmNlO1xyXG5cdH1cclxuXHJcblx0b25PcGVuKCkge1xyXG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHJcblx0XHQvL3RoaXMucmVhZEJvb3N0ZXJzU3RvY2soKTtcclxuXHRcdC8vIHRha2UgY2FyZSBvbmx5IHRvIHJ1biBzZXZlcmFsIHRpbWVzIHRocm91Z2ggd2hlbiBib29zdGVycyBhcmUgdXNlZFxyXG5cdFx0aWYgKHRoaXMudXNlQm9vc3Rlcikge1xyXG5cdFx0XHRib29zdGVyUmVjaXBlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmJvb3N0ZXJBdmFpbGFibGVGb3JVc2UoaXRlbS5uYW1lKSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbGlzdEl0ZW0gPSB0aGlzLmNyZWF0ZUl0ZW1Db250YWluZXIoaXRlbS5uYW1lKTtcclxuXHRcdFx0XHRcdGNvbnRlbnRFbC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgZm9ydHVuZUluZnVzaW9uQm9vc3RlciA9IGJvb3N0ZXJSZWNpcGVzLmZpbmQoZW50cnkgPT4gZW50cnkudmFybmFtZSA9PT0gJ2ZvcnR1bmVJbmZ1c2lvbicpO1xyXG5cdFx0XHRpZiAoZm9ydHVuZUluZnVzaW9uQm9vc3Rlcil7XHJcblx0XHRcdFx0Y29uc3QgbGlzdEl0ZW0gPSB0aGlzLmNyZWF0ZUl0ZW1Db250YWluZXIoZm9ydHVuZUluZnVzaW9uQm9vc3Rlci5uYW1lKTtcclxuXHRcdFx0XHRjb250ZW50RWwuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zdCBsaXN0SXRlbSA9IHRoaXMuY3JlYXRlSXRlbUNvbnRhaW5lcihcIlwiKTtcclxuXHRcdFx0Y29udGVudEVsLmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRvbkNsb3NlKCkge1xyXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJvb3N0ZXJBdmFpbGFibGVGb3JVc2UoaXRlbTogc3RyaW5nKSB7XHJcblx0XHQvL2NvbnNvbGUubG9nKGBib29zdGVyQXZhaWxhYmxlRm9yVXNlOiAke2l0ZW19YClcclxuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0bGlzdE9mVXNlYWJsZUJvb3N0ZXJzVG9CZVNob3duLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYCR7aXRlbX0gPT0gJHtlbGVtZW50fSA/P2ApXHJcblx0XHRcdGlmIChpdGVtID09IGVsZW1lbnQpIHtcclxuXHRcdFx0XHRpZiAoIWZvdW5kKSB7XHJcblx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGZvdW5kO1xyXG5cdH1cclxuXHJcblx0c2V0VXNlQm9vc3Rlcih1c2VCb29zdGVyOiBib29sZWFuKSB7XHJcblx0XHR0aGlzLnVzZUJvb3N0ZXIgPSB1c2VCb29zdGVyO1xyXG5cdH1cclxuXHJcblxyXG5cdC8vIFVwZGF0ZWQgY3JlYXRlSXRlbUNvbnRhaW5lciBtZXRob2RcclxuXHRwcml2YXRlIGNyZWF0ZUl0ZW1Db250YWluZXIobGFiZWxUZXh0OiBzdHJpbmcpIHtcclxuXHRcdGlmICh0aGlzLnVzZUJvb3N0ZXIpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlQm9vc3Rlckxpc3QobGFiZWxUZXh0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vcmV0dXJuIHRoaXMuY3JlYXRlQ2hlY2tib3gobGFiZWxUZXh0KTtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlQ3JhZnRpbmdMYXlvdXQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwZGF0ZUluY3JlbWVudFN0b2NrKGluY3JlbWVudDogc3RyaW5nLCBzdG9jazogbnVtYmVyKSB7XHJcblx0XHRjb25zb2xlLmxvZyhgaW5jcmVtZW50IFwiJHtpbmNyZW1lbnR9XCIgbmV3IHZhbHVlICR7c3RvY2t9YCk7XHJcblx0XHR0aGlzLnJlbWFpbmluZ1N0b2NrW2luY3JlbWVudF0gPSBzdG9jaztcclxuXHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ051bWJlcih0aGlzLmdldEluZ2VyZW1lbnRWYXJOYW1lRnJvbU5hbWUoaW5jcmVtZW50KSB8fCAnJywgc3RvY2spO1xyXG5cdH1cclxuXHJcblxyXG5cdHVwZGF0ZUJvb3N0ZXJTdG9jayhib29zdGVyOiBzdHJpbmcsIHN0b2NrSW5jcmVhc2U6IG51bWJlcikge1xyXG5cdFx0dGhpcy5ib29zdGVyc1tib29zdGVyXSArPSBzdG9ja0luY3JlYXNlO1xyXG5cdH1cclxuXHJcblx0ZGVjcmVtZW50Qm9vc3Rlcihib29zdGVyOiBzdHJpbmcsIHN0b2NrSW5jcmVhc2U6IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgc3RvY2sgPSB0aGlzLmJvb3N0ZXJzW2Jvb3N0ZXJdO1xyXG5cdFx0Y29uc3QgYm9vc3Rlckxhc3RVc2VkRGF0ZSA9IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ1N0cmluZyh0aGlzLmdldEJvb3N0ZXJEYXRlRnJvbU5hbWUoYm9vc3RlcikpO1xyXG5cdFx0aWYgKHR5cGVvZiBib29zdGVyTGFzdFVzZWREYXRlID09PSAnc3RyaW5nJyAmJiBib29zdGVyTGFzdFVzZWREYXRlICE9PSBudWxsKSB7XHJcblx0XHRjb25zdCBtb21lbnREYXRlID0gd2luZG93Lm1vbWVudChib29zdGVyTGFzdFVzZWREYXRlLCAnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG5cdFx0aWYgKHN0b2NrID4gMCAmJiBpc01pbnV0ZXNQYXNzZWQobW9tZW50RGF0ZSwgdGhpcy5nZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShib29zdGVyKSkpIHtcclxuXHRcdFx0dGhpcy5ib29zdGVyc1tib29zdGVyXSAtPSBzdG9ja0luY3JlYXNlO1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdOdW1iZXIodGhpcy5nZXRCb29zdGVyVmFyTmFtZUZyb21OYW1lKGJvb3N0ZXIpLCB0aGlzLmJvb3N0ZXJzW2Jvb3N0ZXJdKTtcclxuXHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nQm9vbGVhbih0aGlzLmdldEJvb3N0ZXJTd2l0Y2hGcm9tTmFtZShib29zdGVyKSwgdHJ1ZSk7XHJcblx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ1N0cmluZyh0aGlzLmdldEJvb3N0ZXJEYXRlRnJvbU5hbWUoYm9vc3RlciksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSk7XHJcblx0XHRcdGNvbnN0IGJvb3N0ZXJPdmVyYWxsVXNlID0gdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdib29zdGVyVXNlQ291bnQnKVxyXG5cdFx0XHRpZiAodHlwZW9mIGJvb3N0ZXJPdmVyYWxsVXNlID09PSAnbnVtYmVyJyAmJiBib29zdGVyT3ZlcmFsbFVzZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdC8vIE5vdyB5b3UgY2FuIHNhZmVseSBhc3NpZ24gYm9vc3Rlckxhc3RVc2VkRGF0ZSB0byBib29zdGVyTGFzdFVzZWREYXRlLlxyXG5cdFx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ051bWJlcignYm9vc3RlclVzZUNvdW50Jyxib29zdGVyT3ZlcmFsbFVzZSArIDEpXHJcblx0XHRcdCAgfSBlbHNlIHtcclxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYm9vc3Rlckxhc3RVc2VkRGF0ZSBpcyBub3QgYSB2YWxpZCBzdHJpbmcuXHJcblx0XHRcdFx0Y29uc29sZS5kZWJ1ZyhgZGVjcmVtZW50Qm9vc3RlcjogXCJib29zdGVyVXNlQ291bnRcIiBjb3VsZCBub3QgZ290IHJlYWQuYClcclxuXHRcdFx0ICB9XHJcblx0XHRcdGNvbnN0IGJvb3N0ZXJVc2UgPSB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIodGhpcy5nZXRCb29zdGVyVXNlRnJvbU5hbWUoYm9vc3RlcikpXHJcblx0XHRcdGlmICh0eXBlb2YgYm9vc3RlclVzZSA9PT0gJ251bWJlcicgJiYgYm9vc3RlclVzZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdC8vIE5vdyB5b3UgY2FuIHNhZmVseSBhc3NpZ24gYm9vc3Rlckxhc3RVc2VkRGF0ZSB0byBib29zdGVyTGFzdFVzZWREYXRlLlxyXG5cdFx0XHRcdHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2Uuc2V0U2V0dGluZ051bWJlcih0aGlzLmdldEJvb3N0ZXJVc2VGcm9tTmFtZShib29zdGVyKSxib29zdGVyVXNlICsgMSlcclxuXHRcdFx0ICB9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBib29zdGVyTGFzdFVzZWREYXRlIGlzIG5vdCBhIHZhbGlkIHN0cmluZy5cclxuXHRcdFx0XHRjb25zb2xlLmRlYnVnKGBkZWNyZW1lbnRCb29zdGVyOiBcIiR7dGhpcy5nZXRCb29zdGVyVXNlRnJvbU5hbWUoYm9vc3Rlcil9XCIgY291bGQgbm90IGdvdCByZWFkLmApXHJcblx0XHRcdCAgfVxyXG5cdFx0XHR0aGlzLnVwZGF0ZVF1YW50aXR5RGlzcGxheShib29zdGVyKTtcclxuXHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHQvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYm9vc3Rlckxhc3RVc2VkRGF0ZSBpcyBub3QgYSB2YWxpZCBzdHJpbmcuXHJcblx0XHRjb25zb2xlLmVycm9yKGB2YWx1ZSBmcm9tICR7dGhpcy5nZXRCb29zdGVyVmFyTmFtZUZyb21OYW1lKGJvb3N0ZXIpfSBjb3VsZCBub3QgYmUgcmVhZCBmcm9tIFNldHRpbmdzIGluIGRlY3JlbWVudEJvb3N0ZXIoKWApXHJcblx0XHR9XHJcblx0XHRcclxuXHR9XHJcblxyXG5cclxuXHRyZWFkQm9vc3RlcnNTdG9jaygpIHtcclxuXHRcdGlmICh0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlKSB7XHJcblx0XHRcdHRoaXMuYm9vc3RlcnMgPSB7XHJcblx0XHRcdFx0J1RlbXBvcmFsIFR3ZWFrZXInOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3RlbXBvcmFsVHdlYWtlcicpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnUGVycGV0dWFsIFByb2dyZXNzJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdwZXJwZXR1YWxQcm9ncmVzcycpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnU3RyYXRlZ2ljIFN5bmFwc2VzJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdzdHJhdGVnaWNTeW5hcHNlcycpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnQWNjZWxlcmF0ZWQgQWNxdWlzaXRpb24nOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2FjY2VsZXJhdGVkQWNxdWlzaXRpb24nKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J0xpbmtlcnMgTG9kZSc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignbGlua2Vyc0xvZGUnKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J0VmZm9ydGxlc3MgRXhwYW5zaW9uJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdlZmZvcnRsZXNzRXhwYW5zaW9uJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdSZWN1cnNpdmUgUmVmbGVjdGlvbic6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcigncmVjdXJzaXZlUmVmbGVjdGlvbicpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnU3luYXB0aWMgU3VyZ2UnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ3N5bmFwdGljU3VyZ2UnKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J0luc3BpcmF0aW9uIEluZnVzaW9uJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdpbnNwaXJhdGlvbkluZnVzaW9uJykgYXMgbnVtYmVyLFxyXG5cdFx0XHRcdCdUaXRsZSBUaXRhbic6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcigndGl0bGVUaXRhbicpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnUHJlY2lzaW9uIFByaXNtJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdwcmVjaXNpb25QcmlzbScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnSHlwZXJsaW5rIEhhcm1vbnknOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2h5cGVybGlua0hhcm1vbnknKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J0VwaGVtZXJhbCBFdXBob3JpYSc6IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ051bWJlcignZXBoZW1lcmFsRXVwaG9yaWEnKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J0ZvcnR1bmUgSW5mdXNpb24nOiAxLFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdHJlYWRJbmdyZW1lbnRTdG9jaygpIHtcclxuXHRcdGlmICh0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlKSB7XHJcblx0XHRcdHRoaXMucmVtYWluaW5nU3RvY2sgPSB7XHJcblx0XHRcdFx0J05leHVzIE5vZGUnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ25leHVzTm9kZScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnQ29ubmVjdGlvbiBDcnlzdGFsJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdjb25uZWN0aW9uQ3J5c3RhbCcpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnTWFzdGVyeSBTY3JvbGwnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ21hc3RlcnlTY3JvbGwnKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J0luc2lnaHQgUHJpc20nOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2luc2lnaHRQcmlzbScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnUmVmbGVjdGl2ZSBFc3NlbmNlJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdyZWZsZWN0aXZlRXNzZW5jZScpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnQW1wbGlmaWNhdGlvbiBDcnlzdGFsJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdhbXBsaWZpY2F0aW9uQ3J5c3RhbCcpIGFzIG51bWJlcixcclxuXHRcdFx0XHQnQ3JlYXRpdmUgQ2F0YWx5c3QnOiB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdOdW1iZXIoJ2NyZWF0aXZlQ2F0YWx5c3QnKSBhcyBudW1iZXIsXHJcblx0XHRcdFx0J1ByZWNpc2lvbiBMZW5zJzogdGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5nZXRTZXR0aW5nTnVtYmVyKCdwcmVjaXNpb25MZW5zJykgYXMgbnVtYmVyLFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgY3JlYXRlQ3JhZnRpbmdMYXlvdXQoKSB7XHJcblx0XHR0aGlzLnJlYWRJbmdyZW1lbnRTdG9jaygpO1xyXG5cdFx0Y29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRjb250YWluZXIuY2xhc3NOYW1lID0gJ21vZGFsLWNyYWZ0aW5nLWNvbnRhaW5lcic7XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgc3RvY2sgaW5mb3JtYXRpb25cclxuXHRcdGNvbnN0IHN0b2NrQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRzdG9ja0NvbnRhaW5lci5jbGFzc05hbWUgPSAnc3RvY2stY29udGFpbmVyJztcclxuXHJcblxyXG5cdFx0Ym9vc3RlclJlY2lwZXMuZm9yRWFjaChyZWNpcGUgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5ib29zdGVyQXZhaWxhYmxlRm9yVXNlKHJlY2lwZS5uYW1lKSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdFx0XHRpdGVtQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdjcmFmdGluZy1pdGVtLWNvbnRhaW5lcic7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG5cdFx0XHRcdGJ1dHRvbi5pbm5lclRleHQgPSAnQ3JhZnQnO1xyXG5cdFx0XHRcdGJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gdGhpcy5jcmFmdEJvb3N0ZXJJdGVtKHJlY2lwZSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHVzZUluZm9CdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuXHRcdFx0XHR1c2VJbmZvQnV0dG9uLmlubmVyVGV4dCA9ICc/JztcclxuXHRcdFx0XHR1c2VJbmZvQnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcblx0XHRcdFx0XHRuZXcgTW9kYWxJbmZvcm1hdGlvbmJveCh0aGlzLmFwcCwgdGhpcy5nZXRCb29zdGVySW5mb3JGcm9tRnJvbU5hbWUocmVjaXBlLm5hbWUpKS5vcGVuKCk7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaXRlbVRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcblx0XHRcdFx0aXRlbVRleHQuaW5uZXJUZXh0ID0gYCR7cmVjaXBlLm5hbWV9IFx1MjFEMiAke3JlY2lwZS5pbmNyZWRpZW50cy5qb2luKCcgICAgJyl9YDtcclxuXHJcblx0XHRcdFx0aXRlbUNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b24pO1xyXG5cdFx0XHRcdGl0ZW1Db250YWluZXIuYXBwZW5kQ2hpbGQodXNlSW5mb0J1dHRvbik7XHJcblx0XHRcdFx0aXRlbUNvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtVGV4dCk7XHJcblx0XHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKGl0ZW1Db250YWluZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRjb25zdCBzdG9ja0luZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdHN0b2NrSW5mby5jbGFzc05hbWUgPSAnc3RvY2staW5mbyc7XHJcblxyXG5cdFx0bGlzdE9mVXNlYWJsZUluZ3JlZGllbnRzVG9CZVNob3duLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblx0XHRcdC8vY29uc29sZS5sb2coYCR7ZWxlbWVudC5uYW1lfSA6ICR7dGhpcy5yZW1haW5pbmdTdG9ja1tlbGVtZW50Lm5hbWVdfWApXHJcblx0XHRcdHN0b2NrSW5mby5pbm5lckhUTUwgKz0gYCR7dGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoZWxlbWVudCkuc2hvcnROYW1lfSBbJHt0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGVsZW1lbnQpLm5hbWVdIHx8IDB9XSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2A7XHJcblx0XHR9KTtcclxuXHJcblx0XHRzdG9ja0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdG9ja0luZm8pO1xyXG5cclxuXHJcblxyXG5cdFx0Ly8gQWRkIHRoZSBzdG9jayBjb250YWluZXIgdG8gdGhlIG1haW4gY29udGFpbmVyXHJcblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoc3RvY2tDb250YWluZXIpO1xyXG5cclxuXHRcdHJldHVybiBjb250YWluZXI7XHJcblx0fVxyXG5cclxuXHJcblxyXG5cdHByaXZhdGUgY3JlYXRlQm9vc3Rlckxpc3QobGFiZWxUZXh0OiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0Y29udGFpbmVyLmNsYXNzTmFtZSA9ICdtb2RhbC1jaGVja2JveC1jb250YWluZXInO1xyXG5cclxuXHRcdC8vY29uc3Qgc3RvY2sgPSB0aGlzLnJlbWFpbmluZ1N0b2NrW2xhYmVsVGV4dF0gfHwgMDtcclxuXHRcdGNvbnN0IHN0b2NrID0gdGhpcy5ib29zdGVyc1tsYWJlbFRleHRdO1xyXG5cclxuXHRcdGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRsYWJlbC5jbGFzc05hbWUgPSBgJHtsYWJlbFRleHQucmVwbGFjZSgnICcsICctJyl9YDtcclxuXHRcdGNvbnN0IHVzZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG5cdFx0Y29uc3QgbW9tZW50RGF0ZSA9IHRoaXMuZ2FtaWZpY2F0aW9uSW5zdGFuY2UuZ2V0U2V0dGluZ1N0cmluZyh0aGlzLmdldEJvb3N0ZXJEYXRlRnJvbU5hbWUobGFiZWxUZXh0KSk7XHJcblx0XHRpZiAoaXNNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQobW9tZW50RGF0ZSBhcyBzdHJpbmcsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksIHRoaXMuZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUobGFiZWxUZXh0KSkgPT0gZmFsc2UpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYEJvb3N0ZXIgJHtsYWJlbFRleHR9IGlzIHN0aWxsIGluIGNvb2xkb3duIGZvciAke3dpbmRvdy5tb21lbnQobW9tZW50RGF0ZSBhcyBzdHJpbmcsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksIHRoaXMuZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUobGFiZWxUZXh0KSAvIDYwfSBob3Vyc2ApO1xyXG5cdFx0XHRsYWJlbC5pbm5lckhUTUwgPSBgJHtsYWJlbFRleHR9IDogKCR7c3RvY2t9KWA7XHJcblx0XHRcdC8vY29uc3QgdXNlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcblx0XHRcdHVzZUJ1dHRvbi5pbm5lclRleHQgPSBgY29vbGRvd24gJHtob3Vyc1VudGlsTWludXRlc1Bhc3NlZCh3aW5kb3cubW9tZW50KG1vbWVudERhdGUgYXMgc3RyaW5nLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLCB0aGlzLmdldEJvb3N0ZXJDb29sZG93bkZyb21OYW1lKGxhYmVsVGV4dCkpfSBob3Vyc2A7XHJcblx0XHRcdHVzZUJ1dHRvbi5pZCA9IGB1c2UtYnV0dG9uLSR7bGFiZWxUZXh0LnJlcGxhY2UoJyAnLCAnLScpfWA7XHJcblx0XHRcdHVzZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRcdG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgJHtsYWJlbFRleHR9IGlzIGZvciAke2hvdXJzVW50aWxNaW51dGVzUGFzc2VkKHdpbmRvdy5tb21lbnQobW9tZW50RGF0ZSBhcyBzdHJpbmcsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksIHRoaXMuZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUobGFiZWxUZXh0KSl9IGhvdXJzIGluIGNvb2xkb3duIGFuZCBjYW4gb25seSB0aGVuIGJlIHVzZWQgYWdhaW4uYCkub3BlbigpO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGFiZWwuaW5uZXJIVE1MID0gYCR7bGFiZWxUZXh0fSA6ICgke3N0b2NrfSlgO1xyXG5cdFx0XHQvL2NvbnN0IHVzZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG5cdFx0XHR1c2VCdXR0b24uaW5uZXJUZXh0ID0gJ1VzZSc7XHJcblx0XHRcdHVzZUJ1dHRvbi5pZCA9IGB1c2UtYnV0dG9uLSR7bGFiZWxUZXh0LnJlcGxhY2UoJyAnLCAnLScpfWA7XHJcblx0XHRcdHVzZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMudXNlQm9vc3Rlckl0ZW0obGFiZWxUZXh0KTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB1c2VJbmZvQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcblx0XHR1c2VJbmZvQnV0dG9uLmlubmVyVGV4dCA9ICc/JztcclxuXHRcdHVzZUluZm9CdXR0b24uaWQgPSBgaW5mb3JtYXRpb24tJHtsYWJlbFRleHQucmVwbGFjZSgnICcsICctJyl9YDtcclxuXHRcdHVzZUluZm9CdXR0b24ub25jbGljayA9ICgpID0+IHtcclxuXHRcdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIHRoaXMuZ2V0Qm9vc3RlckluZm9yRnJvbUZyb21OYW1lKGxhYmVsVGV4dCkpLm9wZW4oKTtcclxuXHRcdH07XHJcblxyXG5cclxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCh1c2VCdXR0b24pO1xyXG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHVzZUluZm9CdXR0b24pO1xyXG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKGxhYmVsKTtcclxuXHJcblxyXG5cdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuXHJcblx0fVxyXG5cclxuXHJcblx0aW5jcmVtZW50SXRlbShpdGVtOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IHN0b2NrID0gdGhpcy5yZW1haW5pbmdTdG9ja1tpdGVtXTtcclxuXHRcdC8vY29uc29sZS5sb2coYGluY3JlbWVudEl0ZW06IHN0b2NrID0gJHtzdG9ja31gKTtcclxuXHRcdGlmIChzdG9jayA+IDApIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcblx0XHRcdHRoaXMucmVtYWluaW5nU3RvY2tbaXRlbV0tLTtcclxuXHRcdFx0dGhpcy51cGRhdGVRdWFudGl0eURpc3BsYXkoaXRlbSk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5ib29zdGVyc1tpdGVtXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuYm9vc3RlcnNbaXRlbV0tLTtcclxuXHRcdFx0dGhpcy51cGRhdGVRdWFudGl0eURpc3BsYXkoaXRlbSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0ZGVjcmVtZW50SXRlbShpdGVtOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG5cclxuXHRcdGlmIChpdGVtSW5kZXggPiAtMSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcblx0XHRcdHRoaXMucmVtYWluaW5nU3RvY2tbaXRlbV0rKztcclxuXHRcdFx0dGhpcy51cGRhdGVRdWFudGl0eURpc3BsYXkoaXRlbSk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5ib29zdGVyc1tpdGVtXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuYm9vc3RlcnNbaXRlbV0rKztcclxuXHRcdFx0dGhpcy51cGRhdGVRdWFudGl0eURpc3BsYXkoaXRlbSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSB1c2VCb29zdGVySXRlbShsYWJlbFRleHQ6IHN0cmluZykge1xyXG5cdFx0Y29uc29sZS5sb2coYHVzZSBCb29zdGVyICR7bGFiZWxUZXh0fWApO1xyXG5cdFx0aWYobGFiZWxUZXh0PT0nRm9ydHVuZSBJbmZ1c2lvbicpe1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBhY3F1aXJlSW5ncmVkaWVudHMoKTtgKVxyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmFjcXVpcmVJbmdyZWRpZW50cygxLDEsMTApXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J1RlbXBvcmFsIFR3ZWFrZXInKXtcclxuXHRcdFx0XHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J1BlcnBldHVhbCBQcm9ncmVzcycpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUGVycGV0dWFsUHJvZ3Jlc3MnLCB0cnVlKVxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdTdHJhdGVnaWMgU3luYXBzZXMnKXtcclxuXHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclN0cmF0ZWdpY1N5bmFwc2VzJywgdHJ1ZSlcclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nQWNjZWxlcmF0ZWQgQWNxdWlzaXRpb24nKXtcclxuXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J0xpbmtlcnMgTG9kZScpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yTGlua2Vyc0xvZGUnLCB0cnVlKVxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdFZmZvcnRsZXNzIEV4cGFuc2lvbicpe1xyXG5cclxuXHRcdH0gZWxzZSBpZiAobGFiZWxUZXh0PT0nUmVjdXJzaXZlIFJlZmxlY3Rpb24nKXtcclxuXHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nQm9vbGVhbignYm9vc3RlckZhY3RvclJlY3Vyc2l2ZVJlZmxlY3Rpb24nLCB0cnVlKVxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdTeW5hcHRpYyBTdXJnZScpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yU3luYXB0aWNTdXJnZScsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J0luc3BpcmF0aW9uIEluZnVzaW9uJyl7XHJcblxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdUaXRsZSBUaXRhbicpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yVGl0bGVUaXRhbicsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J1ByZWNpc2lvbiBQcmlzbScpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yUHJlY2lzaW9uUHJpc20nLCB0cnVlKVxyXG5cdFx0fSBlbHNlIGlmIChsYWJlbFRleHQ9PSdIeXBlcmxpbmsgSGFybW9ueScpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9ySHlwZXJsaW5rSGFybW9ueScsIHRydWUpXHJcblx0XHR9IGVsc2UgaWYgKGxhYmVsVGV4dD09J0VwaGVtZXJhbCBFdXBob3JpYScpe1xyXG5cdFx0XHR0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLnNldFNldHRpbmdCb29sZWFuKCdib29zdGVyRmFjdG9yRXBoZW1lcmFsRXVwaG9yaWEnLCB0cnVlKVxyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHQvKmNvbnN0IHN0b2NrID0gdGhpcy5ib29zdGVyc1tsYWJlbFRleHRdO1xyXG5cdFx0aWYgKHN0b2NrID4gMCkge1xyXG5cdFx0XHQvL3RoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGxhYmVsVGV4dCk7XHJcblx0XHRcdC8vdGhpcy5ib29zdGVyc1tsYWJlbFRleHRdLS07XHJcblx0XHRcdHRoaXMudXBkYXRlUXVhbnRpdHlEaXNwbGF5KGxhYmVsVGV4dCk7XHJcblx0XHR9Ki9cclxuXHRcdHRoaXMuZGVjcmVtZW50Qm9vc3RlcihsYWJlbFRleHQsIDEpO1xyXG5cclxuXHR9XHJcblxyXG5cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVRdWFudGl0eURpc3BsYXkobGFiZWxUZXh0OiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IHN0b2NrID0gdGhpcy5ib29zdGVyc1tsYWJlbFRleHRdO1xyXG5cdFx0Y29uc3Qgc3RvY2tJbmZvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGFiZWxUZXh0LnJlcGxhY2UoJyAnLCAnLScpfWApO1xyXG5cdFx0aWYgKHN0b2NrSW5mbykge1xyXG5cdFx0XHRzdG9ja0luZm8uaW5uZXJIVE1MID0gJyc7IC8vIENsZWFyIHRoZSBjdXJyZW50IGNvbnRlbnRcclxuXHRcdFx0c3RvY2tJbmZvLmlubmVySFRNTCA9IGAke2xhYmVsVGV4dH0gOiAoJHtzdG9ja30pYDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGJ1dHRvblVzZTogSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3VzZS1idXR0b24tJHtsYWJlbFRleHQucmVwbGFjZSgnICcsICctJyl9YCk7XHJcblx0XHRpZiAoYnV0dG9uVXNlICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbnN0IGRhdGUgPSB0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdTdHJpbmcodGhpcy5nZXRCb29zdGVyRGF0ZUZyb21OYW1lKGxhYmVsVGV4dCkpO1xyXG5cdFx0XHRjb25zdCBtb21lbnREYXRlID0gd2luZG93Lm1vbWVudCh0aGlzLmdhbWlmaWNhdGlvbkluc3RhbmNlLmdldFNldHRpbmdTdHJpbmcodGhpcy5nZXRCb29zdGVyRGF0ZUZyb21OYW1lKGxhYmVsVGV4dCkpLCAnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG5cdFx0XHRpZiAoaXNNaW51dGVzUGFzc2VkKG1vbWVudERhdGUsIHRoaXMuZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUobGFiZWxUZXh0KSkgPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRidXR0b25Vc2Uuc2V0VGV4dChgY29vbGRvd24gJHtob3Vyc1VudGlsTWludXRlc1Bhc3NlZChtb21lbnREYXRlLCB0aGlzLmdldEJvb3N0ZXJDb29sZG93bkZyb21OYW1lKGxhYmVsVGV4dCkpfSBob3Vyc2ApO1xyXG5cdFx0XHRcdGJ1dHRvblVzZS5vbmNsaWNrID0gKCkgPT4ge1xyXG5cdFx0XHRcdFx0bmV3IE1vZGFsSW5mb3JtYXRpb25ib3godGhpcy5hcHAsIGAke2xhYmVsVGV4dH0gaXMgZm9yICR7aG91cnNVbnRpbE1pbnV0ZXNQYXNzZWQobW9tZW50RGF0ZSwgdGhpcy5nZXRCb29zdGVyQ29vbGRvd25Gcm9tTmFtZShsYWJlbFRleHQpKX0gaG91cnMgaW4gY29vbGRvd24gYW5kIGNhbiBvbmx5IHRoZW4gYmUgdXNlZCBhZ2Fpbi5gKS5vcGVuKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBjaGVja0luZ3JlZGllbnRzQXZhaWxhYmlsaXR5KGluY3JlZGllbnRzOiB7IG5hbWU6IHN0cmluZzsgaW5jcmVkaWVudHM6IHN0cmluZ1tdOyB9KSB7XHJcblx0XHRmb3IgKGNvbnN0IGluZ3JlZGllbnQgb2YgaW5jcmVkaWVudHMuaW5jcmVkaWVudHMpIHtcclxuXHRcdFx0Y29uc3QgW3F1YW50aXR5LCBzaG9ydE5hbWVdID0gaW5ncmVkaWVudC5zcGxpdCgneCcpO1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGBxdWFudGl0eTogJHtxdWFudGl0eX1cXHRzaG9ydE5hbWU6ICR7c2hvcnROYW1lfWApXHJcblx0XHRcdGNvbnN0IHJlcXVpcmVkUXVhbnRpdHkgPSBwYXJzZUludChxdWFudGl0eSk7XHJcblx0XHRcdGNvbnN0IGF2YWlsYWJsZVN0b2NrID0gdGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnROYW1lRnJvbVNob3J0TmFtZShzaG9ydE5hbWUpIHx8IDBdO1xyXG5cdFx0XHQvL2NvbnNvbGUubG9nKGByZXF1aXJlZFF1YW50aXR5OiAke3JlcXVpcmVkUXVhbnRpdHl9XFx0YXZhaWxhYmxlU3RvY2s6IFx1MDMwMSR7YXZhaWxhYmxlU3RvY2t9YClcclxuXHRcdFx0aWYgKHJlcXVpcmVkUXVhbnRpdHkgPiBhdmFpbGFibGVTdG9jaykge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTsgLy8gTm90IGVub3VnaCBzdG9jayBmb3IgdGhpcyBpbmdyZWRpZW50XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGNoZWNrMTAwMEluZ3JlZGllbnRzQXZhaWxhYmxlQW5kQnVybigpIHtcclxuXHRcdGxldCB0b3RhbEF2YWlsYWJsZUluZ3JlZGllbnRzID0gMDtcclxuXHRcclxuXHRcdC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGF2YWlsYWJsZSBpbmdyZWRpZW50c1xyXG5cdFx0Ly9lbGVtZW50cy5mb3JFYWNoKGluY3JlbWVudCA9PiB7XHJcblx0XHRsaXN0T2ZVc2VhYmxlSW5ncmVkaWVudHNUb0JlU2hvd24uZm9yRWFjaChpbmNyZW1lbnQgPT4ge1xyXG5cdFx0XHR0b3RhbEF2YWlsYWJsZUluZ3JlZGllbnRzICs9IHRoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSB8fCAwO1xyXG5cdFx0fSk7XHJcblx0XHJcblx0XHRjb25zb2xlLmxvZyhgdG90YWwgYW1vdW50IG9mIGluZ3JlZGltZW50czogJHt0b3RhbEF2YWlsYWJsZUluZ3JlZGllbnRzfWApXHJcblx0XHQvLyBJZiBhdCBsZWFzdCAxMDAwIGluZ3JlZGllbnRzIGFyZSBhdmFpbGFibGVcclxuXHRcdGlmICh0b3RhbEF2YWlsYWJsZUluZ3JlZGllbnRzID49IDEwMDApIHtcclxuXHRcdFx0Ly8gQnVybiBpbmdyZWRpZW50cyBwcm9wb3J0aW9uYWxseVxyXG5cdFx0XHQvL2VsZW1lbnRzLmZvckVhY2goaW5jcmVtZW50ID0+IHtcclxuXHRcdFx0bGlzdE9mVXNlYWJsZUluZ3JlZGllbnRzVG9CZVNob3duLmZvckVhY2goaW5jcmVtZW50ID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLm5hbWVdKSB7XHJcblx0XHRcdFx0XHRjb25zdCBwcm9wb3J0aW9uYWxBbW91bnQgPSBNYXRoLmNlaWwoKHRoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXSAvIHRvdGFsQXZhaWxhYmxlSW5ncmVkaWVudHMpICogMTAwMCk7XHJcblx0XHRcdFx0XHQvL2NvbnN0IHJlc3QgPSB0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0gLSBwcm9wb3J0aW9uYWxBbW91bnQ7XHJcblx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKGAke3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkuc2hvcnROYW1lfSAke3RoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS5uYW1lXX0gc2hhbGwgYmUgJHt0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0gLSByZXN0fSA9ICR7dGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLm5hbWVdfSAtICR7cmVzdH1gKVxyXG5cdFx0XHRcdFx0Ly90aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0gPSB0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0gLSBwcm9wb3J0aW9uYWxBbW91bnQ7XHJcblx0XHRcdFx0XHQvL3RoaXMudXBkYXRlSW5jcmVtZW50U3RvY2sodGhpcy5nZXRJbmdlcmVtZW50RnJvbU5hbWUoaW5jcmVtZW50KS52YXJOYW1lLCB0aGlzLnJlbWFpbmluZ1N0b2NrW3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZV0pXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluY3JlbWVudFN0b2NrKHRoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGluY3JlbWVudCkubmFtZSwgdGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShpbmNyZW1lbnQpLm5hbWVdIC0gcHJvcG9ydGlvbmFsQW1vdW50KVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHJcblx0XHRcdC8vc2F2ZSBuZXcgc3RvY2tcclxuXHJcblx0XHRcdC8vIFVwZGF0ZSB0aGUgc3RvY2sgaW5mb3JtYXRpb24gZGlzcGxheVxyXG5cdFx0XHR0aGlzLnVwZGF0ZVN0b2NrSW5mb3JtYXRpb24oKTtcclxuXHRcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cdFxyXG5cclxuXHRcclxuXHJcblxyXG5cdHByaXZhdGUgdXNlSW5ncmVkaW1lbnRzKGluY3JlZGllbnRzOiB7IG5hbWU6IHN0cmluZzsgaW5jcmVkaWVudHM6IHN0cmluZ1tdOyB9KSB7XHJcblx0XHRmb3IgKGNvbnN0IGluZ3JlZGllbnQgb2YgaW5jcmVkaWVudHMuaW5jcmVkaWVudHMpIHtcclxuXHRcdFx0Y29uc3QgW3F1YW50aXR5LCBzaG9ydE5hbWVdID0gaW5ncmVkaWVudC5zcGxpdCgneCcpO1xyXG5cdFx0XHRjb25zdCByZXF1aXJlZFF1YW50aXR5ID0gcGFyc2VJbnQocXVhbnRpdHkpO1xyXG5cdFx0XHRjb25zdCBhdmFpbGFibGVTdG9jayA9IHRoaXMucmVtYWluaW5nU3RvY2tbdGhpcy5nZXRJbmdlcmVtZW50TmFtZUZyb21TaG9ydE5hbWUoc2hvcnROYW1lKSB8fCAwXTtcclxuXHRcdFx0Y29uc3QgaW5ncmVtZW50TmFtZSA9IHRoaXMuZ2V0SW5nZXJlbWVudE5hbWVGcm9tU2hvcnROYW1lKHNob3J0TmFtZSkgfHwgJyc7XHJcblx0XHRcdHRoaXMudXBkYXRlSW5jcmVtZW50U3RvY2soaW5ncmVtZW50TmFtZSwgYXZhaWxhYmxlU3RvY2sgLSByZXF1aXJlZFF1YW50aXR5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVN0b2NrSW5mb3JtYXRpb24oKSB7XHJcblx0XHRjb25zdCBzdG9ja0luZm8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc3RvY2staW5mbycpO1xyXG5cdFx0aWYgKHN0b2NrSW5mbykge1xyXG5cdFx0XHRzdG9ja0luZm8uaW5uZXJIVE1MID0gJyc7IC8vIENsZWFyIHRoZSBjdXJyZW50IGNvbnRlbnRcclxuXHJcblx0XHRcdC8vZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHRcdFx0bGlzdE9mVXNlYWJsZUluZ3JlZGllbnRzVG9CZVNob3duLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblx0XHRcdFx0Ly9zdG9ja0luZm8uaW5uZXJIVE1MICs9IGAke2VsZW1lbnQuc2hvcnROYW1lfSBbJHt0aGlzLnJlbWFpbmluZ1N0b2NrW2VsZW1lbnQubmFtZV0gfHwgMH1dJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YDtcclxuXHRcdFx0XHRzdG9ja0luZm8uaW5uZXJIVE1MICs9IGAke3RoaXMuZ2V0SW5nZXJlbWVudEZyb21OYW1lKGVsZW1lbnQpLnNob3J0TmFtZX0gWyR7dGhpcy5yZW1haW5pbmdTdG9ja1t0aGlzLmdldEluZ2VyZW1lbnRGcm9tTmFtZShlbGVtZW50KS5uYW1lXSB8fCAwfV0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtgO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRwcml2YXRlIGNyYWZ0Qm9vc3Rlckl0ZW0oc2VsZWN0ZWRJdGVtczogeyBuYW1lOiBzdHJpbmc7IGluY3JlZGllbnRzOiBzdHJpbmdbXTsgfSkge1xyXG5cdFx0Ly8gY2FsbCBoZXJlIHRoZSByZWNpcGUgbG9naWMgYW5kIHJlZHVjZSB0aGUgc3RvY2tcclxuXHRcdGlmKHNlbGVjdGVkSXRlbXMubmFtZSA9PSAnRXBoZW1lcmFsIEV1cGhvcmlhJyl7XHJcblx0XHRcdGlmKHRoaXMuY2hlY2sxMDAwSW5ncmVkaWVudHNBdmFpbGFibGVBbmRCdXJuKCkpe1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlQm9vc3RlclN0b2NrKHNlbGVjdGVkSXRlbXMubmFtZSwgMSk7XHJcblx0XHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nTnVtYmVyKHRoaXMuZ2V0Qm9vc3RlclZhck5hbWVGcm9tTmFtZShzZWxlY3RlZEl0ZW1zLm5hbWUpLCB0aGlzLmJvb3N0ZXJzW3NlbGVjdGVkSXRlbXMubmFtZV0pO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBjcmFmdCBib29zdGVyICR7c2VsZWN0ZWRJdGVtcy5uYW1lfWApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBub3QgZW5vdWdoIGluZ3JlZGllbnRzIGZvciBib29zdGVyICR7c2VsZWN0ZWRJdGVtcy5uYW1lfSBpbiBzdG9ja2ApO1xyXG5cdFx0XHRcdG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgTm90IGVub3VnaCBpbmdyZWRpbWVudHMgYXZhaWxhYmxlIGZvciAnJHtzZWxlY3RlZEl0ZW1zLm5hbWV9Jy4gQ3JhZnQgbW9yZSBOb3RlcyB0byBjb2xsZWN0IG5ldyBpbmdyZWRpbWVudHMuYCkub3BlbigpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYoc2VsZWN0ZWRJdGVtcy5uYW1lID09ICdGb3J0dW5lIEluZnVzaW9uJyl7XHJcblx0XHRcdFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuY2hlY2tJbmdyZWRpZW50c0F2YWlsYWJpbGl0eShzZWxlY3RlZEl0ZW1zKSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBjcmFmdCBib29zdGVyICR7c2VsZWN0ZWRJdGVtcy5uYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlQm9vc3RlclN0b2NrKHNlbGVjdGVkSXRlbXMubmFtZSwgMSk7XHJcblx0XHRcdFx0dGhpcy5nYW1pZmljYXRpb25JbnN0YW5jZS5zZXRTZXR0aW5nTnVtYmVyKHRoaXMuZ2V0Qm9vc3RlclZhck5hbWVGcm9tTmFtZShzZWxlY3RlZEl0ZW1zLm5hbWUpLCB0aGlzLmJvb3N0ZXJzW3NlbGVjdGVkSXRlbXMubmFtZV0pO1xyXG5cdFx0XHRcdHRoaXMudXNlSW5ncmVkaW1lbnRzKHNlbGVjdGVkSXRlbXMpO1xyXG5cdFx0XHRcdC8vdGhpcy51cGRhdGVRdWFudGl0eURpc3BsYXkoc2VsZWN0ZWRJdGVtcy5uYW1lKVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlU3RvY2tJbmZvcm1hdGlvbigpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBub3QgZW5vdWdoIGluZ3JlZGllbnRzIGZvciBib29zdGVyICR7c2VsZWN0ZWRJdGVtcy5uYW1lfSBpbiBzdG9ja2ApO1xyXG5cdFx0XHRcdG5ldyBNb2RhbEluZm9ybWF0aW9uYm94KHRoaXMuYXBwLCBgTm90IGVub3VnaCBpbmdyZWRpbWVudHMgYXZhaWxhYmxlIGZvciAnJHtzZWxlY3RlZEl0ZW1zLm5hbWV9Jy4gQ3JhZnQgbW9yZSBOb3RlcyB0byBjb2xsZWN0IG5ldyBpbmdyZWRpbWVudHMuYCkub3BlbigpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHJpdmF0ZSBnZXRJbmdlcmVtZW50TmFtZUZyb21TaG9ydE5hbWUoc2hvcnROYW1lOiBzdHJpbmcpIHtcclxuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5zaG9ydE5hbWUgPT09IHNob3J0TmFtZSkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50Lm5hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZ2VyZW1lbnRTaG9ydE5hbWVGcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5uYW1lID09PSBuYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuc2hvcnROYW1lO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJbmdlcmVtZW50RnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQubmFtZSA9PT0gbmFtZSkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4geyBzaG9ydE5hbWU6ICcnLCBuYW1lOiAnJywgdmFyTmFtZTogJycgfTsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblxyXG5cdHByaXZhdGUgZ2V0SW5nZXJlbWVudFZhck5hbWVGcm9tU2hvcnROYW1lKHNob3J0TmFtZTogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcclxuXHRcdFx0aWYgKGVsZW1lbnQuc2hvcnROYW1lID09PSBzaG9ydE5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC52YXJOYW1lO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJbmdlcmVtZW50VmFyTmFtZUZyb21OYW1lKG5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IG5hbWUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbWVudC52YXJOYW1lO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRCb29zdGVyVmFyTmFtZUZyb21OYW1lKGJvb3N0ZXJOYW1lOiBzdHJpbmcpIHtcclxuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBib29zdGVyUmVjaXBlcykge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5uYW1lID09PSBib29zdGVyTmFtZSkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtZW50LnZhcm5hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAnJzsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRCb29zdGVySW5mb3JGcm9tRnJvbU5hbWUoYm9vc3Rlck5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGJvb3N0ZXJSZWNpcGVzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IGJvb3N0ZXJOYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuZGVzY3JpcHRpb247XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAnJzsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRCb29zdGVyU3dpdGNoRnJvbU5hbWUoYm9vc3Rlck5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGJvb3N0ZXJSZWNpcGVzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IGJvb3N0ZXJOYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuYm9vc3RlclN3aXRjaDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuICcnOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEJvb3N0ZXJEYXRlRnJvbU5hbWUoYm9vc3Rlck5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGJvb3N0ZXJSZWNpcGVzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IGJvb3N0ZXJOYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuYm9vc3RlckRhdGUgYXMgc3RyaW5nO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7IC8vIFJldHVybiBudWxsIGlmIG5vIG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmRcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Qm9vc3RlckNvb2xkb3duRnJvbU5hbWUoYm9vc3Rlck5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGJvb3N0ZXJSZWNpcGVzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IGJvb3N0ZXJOYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuYm9vc3RlckNvb2xkb3duO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRCb29zdGVyVXNlRnJvbU5hbWUoYm9vc3Rlck5hbWU6IHN0cmluZykge1xyXG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGJvb3N0ZXJSZWNpcGVzKSB7XHJcblx0XHRcdGlmIChlbGVtZW50Lm5hbWUgPT09IGJvb3N0ZXJOYW1lKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuYm9vc3RlclVzZUNvdW50TmFtZSBhcyBzdHJpbmc7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAnJzsgLy8gUmV0dXJuIG51bGwgaWYgbm8gbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZFxyXG5cdH1cclxuXHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsNENBQUFBLFNBQUE7QUFBQyxLQUFDLFNBQVUsTUFBTSxTQUFTO0FBQzFCLFVBQUksT0FBTyxZQUFZLFVBQVU7QUFFaEMsUUFBQUEsUUFBTyxVQUFVLFVBQVUsUUFBUTtBQUFBLE1BQ3BDLFdBQ1MsT0FBTyxXQUFXLGNBQWMsT0FBTyxLQUFLO0FBRXBELGVBQU8sQ0FBQyxHQUFHLE9BQU87QUFBQSxNQUNuQixPQUNLO0FBRUosYUFBSyxXQUFXLFFBQVE7QUFBQSxNQUN6QjtBQUFBLElBQ0QsR0FBRSxTQUFNLFdBQVk7QUFP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LGdCQUFJLGNBQWNBLEdBQUUsU0FBUyxFQUFFO0FBRy9CLGdCQUFJRSxLQUFJRCxHQUFFLENBQUM7QUFDWCxnQkFBSUUsS0FBSUYsR0FBRSxDQUFDO0FBQ1gsZ0JBQUlHLEtBQUlILEdBQUUsQ0FBQztBQUNYLGdCQUFJSSxLQUFJSixHQUFFLENBQUM7QUFHWCxZQUFBQyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLENBQUMsQ0FBQztBQUN4QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsYUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsYUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsYUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsYUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUV6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsYUFBYSxHQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsYUFBYSxHQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsYUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsYUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUV6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsYUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsYUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsYUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsYUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUV6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsYUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsWUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsYUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsWUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdDLElBQUcsWUFBYSxHQUFJUCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTyxLQUFJLEdBQUdBLElBQUdILElBQUdDLElBQUdDLElBQUcsYUFBYSxJQUFJTixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBTSxLQUFJLEdBQUdBLElBQUdDLElBQUdILElBQUdDLElBQUcsWUFBYSxJQUFJTCxHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSyxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdILElBQUcsYUFBYSxJQUFJSixHQUFFLEVBQUUsQ0FBQztBQUN6QyxZQUFBSSxLQUFJLEdBQUdBLElBQUdDLElBQUdDLElBQUdD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QzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxTQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsWUFBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFlBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksVUFBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxVQUFVO0FBQUEsVUFBRyxlQUFlLFdBQVksU0FBVTtBQUFBLFVBQzdFLGVBQWUsV0FBWSxT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QSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQzNEO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFDNUQ7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUMzRDtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQzVEO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsUUFBRSxDQUFDO0FBQ2xFLFlBQUksTUFBTSxVQUFVLE9BQU87QUFBQSxVQUN2QjtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQzNEO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDNUQ7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUc7QUFBQSxVQUM1RDtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQzNEO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsUUFBRSxDQUFDO0FBQ25FLFlBQUksTUFBTSxVQUFVLE9BQU87QUFBQSxVQUN0QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQzlEO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFDM0Q7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUc7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUMzRDtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQzlEO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsUUFBRSxDQUFDO0FBQ25FLFlBQUksTUFBTSxVQUFVLE9BQU87QUFBQSxVQUN2QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFHO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSztBQUFBLFVBQzVEO0FBQUEsVUFBRztBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFBLFVBQUs7QUFBQSxVQUFJO0FBQUEsVUFBRztBQUFB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QUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUM1QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUM1QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUM1QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUM1QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUM1QjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxRQUNoQztBQUdBLFlBQUksTUFBTTtBQUFBLFVBQ047QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQ3BCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUNwQjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDcEI7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQ3BCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUNwQjtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFDcEI7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQ3BCO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxVQUFJO0FBQUEsVUFBSTtBQUFBLFVBQUk7QUFBQSxRQUN4QjtBQUdBLFlBQUksYUFBYSxDQUFDLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFHaEYsWUFBSSxTQUFTO0FBQUEsVUFDVDtBQUFBLFlBQ0ksR0FBSztBQUFBLFlBQ0wsV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osV0FBVztBQUFBLFlBQ1gsV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osR0FBSztBQUFBLFlBQ0wsV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osV0FBVztBQUFBLFlBQ1gsV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFVBQ2hCO0FBQUEsVUFDQTtBQUFBLFlBQ0ksR0FBSztBQUFBLFlBQ0wsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsU0FBVTtBQUFBLFlBQ1YsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFlBQ1osV0FBWTtBQUFBLFVBQ2hCO0FBQUEsVUFDQTtBQUFBLFlBQ0ksR0FBSztBQUFBLFlBQ0wsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsUUFBUztBQUFBLFlBQ1QsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsU0FBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFlBQ1gsVUFBVztBQUFBLFVBQ2Y7QUFBQSxVQUNBO0FBQUEsWUFDSSxHQUFLO0FBQUEsWUFDTCxPQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxPQUFRO0FBQUEsWUFDUixPQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxRQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsWUFDVixTQUFVO0FBQUEsVUFDZDtBQUFBLFVBQ0E7QUFBQSxZQUNJLEdBQUs7QUFBQSxZQUNMLE1BQVE7QUFBQSxZQUNSLE1BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE1BQU87QUFBQSxZQUNQLE1BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVE7QUFBQSxZQUNSLE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULE9BQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxZQUNULFFBQVM7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFlBQ0ksR0FBSztBQUFBLFlBQ0wsS0FBTztBQUFBLFlBQ1AsS0FBTztBQUFBLFlBQ1AsS0FBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsS0FBTTtBQUFBLFlBQ04sS0FBTztBQUFBLFlBQ1AsS0FBTztBQUFBLFlBQ1AsS0FBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBTztBQUFBLFlBQ1AsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFlBQ1IsTUFBUTtBQUFBLFVBQ1o7QUFBQSxVQUNBO0FBQUEsWUFDSSxHQUFLO0FBQUEsWUFDTCxJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixHQUFLO0FBQUEsWUFDTCxJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixJQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFNO0FBQUEsWUFDTixLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsWUFDUCxLQUFPO0FBQUEsVUFDWDtBQUFBLFVBQ0E7QUFBQSxZQUNJLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLEdBQUs7QUFBQSxZQUNMLElBQUs7QUFBQSxZQUNMLElBQUs7QUFBQSxZQUNMLElBQUs7QUFBQSxZQUNMLElBQUs7QUFBQSxZQUNMLElBQUs7QUFBQSxZQUNMLElBQUs7QUFBQSxZQUNMLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLElBQU07QUFBQSxZQUNOLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxVQUNoQjtBQUFBLFFBQ0o7QUFHQSxZQUFJLFlBQVk7QUFBQSxVQUNaO0FBQUEsVUFB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LE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLElBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsS0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLEtBQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsTUFBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxLQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE1BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE1BQVE7QUFBQSxFQUNsRCxFQUFFLFFBQVEsT0FBUyxPQUFPLElBQUksWUFBWSxNQUFRO0FBQUEsRUFDbEQsRUFBRSxRQUFRLE9BQVMsT0FBTyxJQUFJLFlBQVksTUFBUTtBQUFBLEVBQ2xELEVBQUUsUUFBUSxPQUFTLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNuRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxLQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE1BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksS0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxNQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksTUFBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxPQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE1BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsT0FBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLEtBQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsTUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxNQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLE9BQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLElBQUksWUFBWSxPQUFTO0FBQUEsRUFDcEQsRUFBRSxRQUFRLFFBQVUsT0FBTyxJQUFJLFlBQVksT0FBUztBQUFBLEVBQ3BELEVBQUUsUUFBUSxRQUFVLE9BQU8sSUFBSSxZQUFZLE9BQVM7QUFBQSxFQUNwRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxNQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLE9BQVUsT0FBTyxLQUFLLFlBQVksT0FBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxRQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksTUFBUztBQUFBLEVBQ3JELEVBQUUsUUFBUSxPQUFVLE9BQU8sS0FBSyxZQUFZLE9BQVM7QUFBQSxFQUNyRCxFQUFFLFFBQVEsUUFBVSxPQUFPLEtBQUssWUFBWSxPQUFTO0FBQUEsRUFDckQsRUFBRSxRQUFRLFFBQVUsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUFBLEVBQ3RELEVBQUUsUUFBUSxTQUFXLE9BQU8sS0FBSyxZQUFZLFFBQVU7QUFBQSxFQUN2RCxFQUFFLFFBQVEsU0FBVyxPQUFPLEtBQUssWUFBWSxRQUFVO0FBQUEsRUFDdkQsRUFBRSxRQUFRLFNBQVcsT0FBTyxLQUFLLFlBQVksUUFBVTtBQUN6RDtBQUVPLFNBQVMsa0JBQWtCLFFBQTJCO0FBQzNELE1BQUksUUFBbUIsVUFBVSxDQUFDO0FBQ2xDLGFBQVcsUUFBUSxXQUFXO0FBQzVCLFFBQUksVUFBVSxLQUFLLFFBQVE7QUFDekIsY0FBUTtBQUFBLElBQ1YsT0FBTztBQUNMO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLHFCQUFxQixhQUE2QjtBQUNoRSxNQUFJLGVBQWU7QUFDbkIsYUFBVyxRQUFRLFdBQVc7QUFDNUIsUUFBSSxlQUFlLEtBQUssU0FBUyxnQkFBZ0IsR0FBRztBQUNsRCxxQkFBZSxLQUFLO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBR0YsU0FBTztBQUNQOzs7QUM5SUYsSUFBTSwwQkFBb0M7QUFBQSxFQUN6QztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRDtBQUVBLElBQU0sa0JBQTRCO0FBQUEsRUFDakM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFD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MkI7QUFDdkYsTUFBSTtBQUNKLE1BQUksU0FBUyxlQUFlLEVBQUUsSUFBSSxXQUFVO0FBQzNDLG1CQUFlLFlBQVksU0FBUyxlQUFlLEVBQUU7QUFBQSxFQUN0RCxPQUFPO0FBQ04sbUJBQWU7QUFBQSxFQUNoQjtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgIkNyeXB0b0pTIiwgIk1hdGgiLCAidW5kZWZpbmVkIiwgImkiLCAiZSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAidW5kZWZpbmVkIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgIk1hdGgiLCAiVCIsICJpIiwgIk0iLCAiSCIsICJhIiwgImIiLCAiYyIsICJkIiwgIngiLCAicyIsICJ0IiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJNIiwgIkgiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImkiLCAidCIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiTWF0aCIsICJIIiwgIksiLCAibiIsICJNIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJoIiwgImkiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJLIiwgImkiLCAiTSIsICJIIiwgIkgyIiwgIkgzIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiTWF0aCIsICJ4IiwgInkiLCAidCIsICJpIiwgIlQiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiTWF0aCIsICJNIiwgImkiLCAiSCIsICJ0IiwgIngiLCAieSIsICJ6IiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJ1bmRlZmluZWQiLCAiQ0JDIiwgImkiLCAiZm9ybWF0IiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiaSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAibW9kdWxlIiwgIkNyeXB0b0pTIiwgInVuZGVmaW5lZCIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiZCIsICJpIiwgIngiLCAieDIiLCAidCIsICJNIiwgIlNVQl9NSVhfMCIsICJTVUJfTUlYXzEiLCAiU1VCX01JWF8yIiwgIlNVQl9NSVhfMyIsICJTQk9YIiwgInMyIiwgIm1vZHVsZSIsICJDcnlwdG9KUyIsICJpIiwgIk0iLCAidCIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiUyIsICJpIiwgInQiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiUyIsICJHIiwgIksiLCAiaSIsICJYIiwgIkMiLCAiaTIiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiUyIsICJHIiwgIksiLCAiWCIsICJDIiwgImkiLCAiaTIiLCAiTSIsICJtb2R1bGUiLCAiQ3J5cHRvSlMiLCAiZ2FtaWZpY2F0aW9uIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAib2JqIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgImRlZmF1bHRPcHRpb25zIiwgIk1JTExJU0VDT05EU19JTl9XRUVLIiwgImZvcm1hdHRlcnMiLCAibG9jYWxpemUiLCAieSIsICJNIiwgImQiLCAiYSIsICJoIiwgIkgiLCAibSIsICJzIiwgIlMiLCAiZGF0ZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0TG9uZyIsICJ0aW1lTG9uZ0Zvcm1hdHRlciIsICJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCAiZm9ybWF0IiwgImZvcm1hdERpc3RhbmNlIiwgImZvcm1hdCIsICJmb3JtYXRSZWxhdGl2ZSIsICJvcmRpbmFsTnVtYmVyIiwgInZhbHVlQ2FsbGJhY2siLCAiZGVmYXVsdE9wdGlvbnMiLCAibG9jYWxlIiwgIm1hdGNoIiwgInBhdGgiLCAiYXBwIiwgImZpbGVOYW1lIiwgImN1cnJlbnRDb3VudCIsICJpIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAiYXBwIiwgImdhbWlmaWNhdGlvbiIsICJlIiwgImkiLCAibWF0Y2giLCAiZmlsZSIsICJhcHAiXQp9Cg== diff --git a/src/main.ts b/src/main.ts index 3bb487d..82a005c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -359,13 +359,13 @@ export default class gamification extends Plugin { } catch (e) { if (e?.name === 'YAMLParseError') { const errorMessage = `Update majuritys failed Malformed frontamtter on this file : ${file.path} ${e.message}`; - new Notice(errorMessage, 4000); + new Notice(errorMessage, this.getSettingNumber('timeShowNotice') * 1000); console.error(errorMessage); } } } if (pointsReceived > 0) { - new Notice(`${pointsReceived} Points received`,4000) + new Notice(`${pointsReceived} Points received`,this.getSettingNumber('timeShowNotice') * 1000) console.log(`${pointsReceived} Points received`) } @@ -374,7 +374,7 @@ export default class gamification extends Plugin { setTimeout(async () => { // Code that you want to execute after the delay const initBadge: Badge = getBadgeForInitLevel(this.getSettingNumber('statusLevel')); - new Notice(`You've earned the "${initBadge.name}" badge. ${initBadge.description}`,5000) + new Notice(`You've earned the "${initBadge.name}" badge. ${initBadge.description}`,this.getSettingNumber('timeShowNotice') * 1000 * 1.2) console.log(`You earned ${initBadge.name} - ${initBadge.description}`) await this.giveInitBadgeInProfile(this.getSettingString('avatarPageName'), initBadge); await this.removeBadgesWhenInitLevelHigher(this.getSettingString('avatarPageName'), this.getSettingNumber('statusLevel')) @@ -539,7 +539,7 @@ export default class gamification extends Plugin { //console.log(`pointsReceived: ${pointsReceived}`) if (pointsReceived > 0){ const messagePoints = getRandomMessagePoints(pointsReceived); - new Notice(messagePoints,4000) + new Notice(messagePoints,this.getSettingNumber('timeShowNotice') * 1000) console.log(messagePoints) } @@ -549,7 +549,7 @@ export default class gamification extends Plugin { } catch (e) { if (e?.name === 'YAMLParseError') { const errorMessage = `Update majuritys failed Malformed frontamtter on this file : ${file.path} ${e.message}`; - new Notice(errorMessage, 4000); + new Notice(errorMessage, this.getSettingNumber('timeShowNotice') * 1000); console.error(errorMessage); } } @@ -655,7 +655,7 @@ export default class gamification extends Plugin { await this.giveStatusPoints(pointsForDailyChallenge,'formIncreaseDailyCreatedNoteCount') const message = getRandomMessageTwoNoteChallenge(pointsForDailyChallenge * (this.getSettingNumber('badgeBoosterFactor') + this.getSettingNumber('streakbooster'))); console.log(`daily Challenge reached! ${newDailyNoteCreationTask}/2 created.`) - new Notice(message,4000) + new Notice(message,this.getSettingNumber('timeShowNotice') * 1000) console.log(message) } else { // nothing else to do here @@ -704,7 +704,7 @@ export default class gamification extends Plugin { await this.giveStatusPoints(pointsForWeeklyChallenge, 'fromCheckForWeeklyNoteChallengeEvaluation') console.log(`Weekly Challenge reached! ${newWeeklyNoteCreationTask}/7 created in a chain.`) const message = getRandomMessageWeeklyChallenge(pointsForWeeklyChallenge * (this.getSettingNumber('badgeBoosterFactor') + this.getSettingNumber('streakbooster'))); - new Notice(message,4000) + new Notice(message,this.getSettingNumber('timeShowNotice') * 1000) console.log(message) } else { // nothing else to do here @@ -891,7 +891,7 @@ export default class gamification extends Plugin { let receiveBadge = false if (this.getSettingNumber('statusLevel') < level.level){ // Level Up archived - new Notice(`With ${newPoints} points, the current level is ${level.level}.`,5000) + new Notice(`With ${newPoints} points, the current level is ${level.level}.`,this.getSettingNumber('timeShowNotice') * 1000 * 1.2) // check first if this means a new badge before it gets overwritten receiveBadge = checkIfReceiveABadge(this.getSettingNumber('statusLevel'), level.level) this.setSettingNumber('statusLevel', level.level); @@ -1109,7 +1109,7 @@ export default class gamification extends Plugin { newLevel.then((result: boolean)=> { if(result){ const badge : Badge = getBadgeForLevel(this.getSettingNumber('statusLevel'), false) - new Notice(`You've earned the "${badge.name}" badge. ${badge.description}`,5000) + new Notice(`You've earned the "${badge.name}" badge. ${badge.description}`,this.getSettingNumber('timeShowNotice') * 1000 * 1.2) console.log(`You've earned the "${badge.name}" badge. ${badge.description}`) this.giveBadgeInProfile(this.getSettingString('avatarPageName'), badge) this.setSettingBoolean('badgeBoosterState', false); @@ -1143,7 +1143,7 @@ export default class gamification extends Plugin { } catch (e) { if (e?.name === 'YAMLParseError') { const errorMessage = `Update majuritys failed Malformed frontamtter ${e.message}`; - new Notice(errorMessage, 4000); + new Notice(errorMessage, this.getSettingNumber('timeShowNotice') * 1000); console.error(errorMessage); } } @@ -1220,7 +1220,7 @@ export default class gamification extends Plugin { } } console.log(`You earned: ${concatenateStrings(earnedIngredientToShow)}`); - new Notice(`You earned ${concatenateStrings(earnedIngredientToShow)}`,3000) + new Notice(`You earned ${concatenateStrings(earnedIngredientToShow)}`,this.getSettingNumber('timeShowNotice') * 1000) } else { console.log('You did not earn an ingredient this time.'); } diff --git a/src/settings.ts b/src/settings.ts index 3ca5550..8b4d9e0 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -87,7 +87,8 @@ export const defaultSettings: Partial = { boosterUseCountFortuneInfusion: "U2FsdGVkX191hJANYr8JHI1bn1YRrJfBh0cQ0vgkKRM=", counterMajurityCalc: "U2FsdGVkX19TLndonGY4Y8vHuZFfLJ5gZ2t/CLprh0o=", counterMajurityCalcInitial: "U2FsdGVkX1+2Qii8qhFSqrNqmKR1Wh6saEjYbwPdi8Q=", - delayLoadTime: "U2FsdGVkX19TLndonGY4Y8vHuZFfLJ5gZ2t/CLprh0o=" + delayLoadTime: "U2FsdGVkX19TLndonGY4Y8vHuZFfLJ5gZ2t/CLprh0o=", + timeShowNotice: "U2FsdGVkX190u8cOsylOs1cQ8MeZFq+i+Wv4ox6qq0k=" }; export interface DynamicSettings { @@ -174,7 +175,8 @@ export interface ISettings extends DynamicSettings{ boosterUseCountEphemeralEuphoria: string; counterMajurityCalc: string; counterMajurityCalcInitial: string; - delayLoadTime: string + delayLoadTime: string; + timeShowNotice: string //[key: string]: number | string | boolean | MomentInput; } @@ -262,6 +264,7 @@ export class GamificationPluginSettings extends PluginSettingTab { public counterMajurityCalc: string; public counterMajurityCalcInitial: string; public delayLoadTime: string; + public timeShowNotice: string; constructor(app: App, plugin: gamification) { super(app, plugin); @@ -373,6 +376,17 @@ export class GamificationPluginSettings extends PluginSettingTab { await this.plugin.saveSettings(); })); + new Setting(containerEl) + .setName('Time how long Notices are shown') + .setDesc('Enter in seconds. 4 seconds or more is a good value') + .addText(text => text + .setPlaceholder('4') + .setValue(decryptNumber(this.plugin.settings.timeShowNotice).toString()) + .onChange(async (value) => { + this.plugin.settings.timeShowNotice = encryptNumber(parseInt(value)); + await this.plugin.saveSettings(); + })); + new Setting(containerEl) .setName('Progressive Summarization') .setDesc('you can change which formatting you use for Layer 2 and 3.')